StateManager => BlockManager
This commit is contained in:
		@@ -315,7 +315,7 @@ out:
 | 
				
			|||||||
			// otherwise process and don't emit anything
 | 
								// otherwise process and don't emit anything
 | 
				
			||||||
			var err error
 | 
								var err error
 | 
				
			||||||
			for i, block := range blocks {
 | 
								for i, block := range blocks {
 | 
				
			||||||
				err = self.eth.StateManager().Process(block)
 | 
									err = self.eth.BlockManager().Process(block)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					poollogger.Infoln(err)
 | 
										poollogger.Infoln(err)
 | 
				
			||||||
					poollogger.Debugf("Block #%v failed (%x...)\n", block.Number, block.Hash()[0:4])
 | 
										poollogger.Debugf("Block #%v failed (%x...)\n", block.Number, block.Hash()[0:4])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,7 @@ type Peer interface {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type EthManager interface {
 | 
					type EthManager interface {
 | 
				
			||||||
	StateManager() *StateManager
 | 
						BlockManager() *BlockManager
 | 
				
			||||||
	ChainManager() *ChainManager
 | 
						ChainManager() *ChainManager
 | 
				
			||||||
	TxPool() *TxPool
 | 
						TxPool() *TxPool
 | 
				
			||||||
	Broadcast(msgType wire.MsgType, data []interface{})
 | 
						Broadcast(msgType wire.MsgType, data []interface{})
 | 
				
			||||||
@@ -46,7 +46,7 @@ type EthManager interface {
 | 
				
			|||||||
	EventMux() *event.TypeMux
 | 
						EventMux() *event.TypeMux
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type StateManager struct {
 | 
					type BlockManager struct {
 | 
				
			||||||
	// Mutex for locking the block processor. Blocks can only be handled one at a time
 | 
						// Mutex for locking the block processor. Blocks can only be handled one at a time
 | 
				
			||||||
	mutex sync.Mutex
 | 
						mutex sync.Mutex
 | 
				
			||||||
	// Canonical block chain
 | 
						// Canonical block chain
 | 
				
			||||||
@@ -74,8 +74,8 @@ type StateManager struct {
 | 
				
			|||||||
	events event.Subscription
 | 
						events event.Subscription
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewStateManager(ethereum EthManager) *StateManager {
 | 
					func NewBlockManager(ethereum EthManager) *BlockManager {
 | 
				
			||||||
	sm := &StateManager{
 | 
						sm := &BlockManager{
 | 
				
			||||||
		mem: make(map[string]*big.Int),
 | 
							mem: make(map[string]*big.Int),
 | 
				
			||||||
		Pow: &EasyPow{},
 | 
							Pow: &EasyPow{},
 | 
				
			||||||
		eth: ethereum,
 | 
							eth: ethereum,
 | 
				
			||||||
@@ -87,18 +87,18 @@ func NewStateManager(ethereum EthManager) *StateManager {
 | 
				
			|||||||
	return sm
 | 
						return sm
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (self *StateManager) Start() {
 | 
					func (self *BlockManager) Start() {
 | 
				
			||||||
	statelogger.Debugln("Starting state manager")
 | 
						statelogger.Debugln("Starting state manager")
 | 
				
			||||||
	self.events = self.eth.EventMux().Subscribe(Blocks(nil))
 | 
						self.events = self.eth.EventMux().Subscribe(Blocks(nil))
 | 
				
			||||||
	go self.updateThread()
 | 
						go self.updateThread()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (self *StateManager) Stop() {
 | 
					func (self *BlockManager) Stop() {
 | 
				
			||||||
	statelogger.Debugln("Stopping state manager")
 | 
						statelogger.Debugln("Stopping state manager")
 | 
				
			||||||
	self.events.Unsubscribe()
 | 
						self.events.Unsubscribe()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (self *StateManager) updateThread() {
 | 
					func (self *BlockManager) updateThread() {
 | 
				
			||||||
	for ev := range self.events.Chan() {
 | 
						for ev := range self.events.Chan() {
 | 
				
			||||||
		for _, block := range ev.(Blocks) {
 | 
							for _, block := range ev.(Blocks) {
 | 
				
			||||||
			err := self.Process(block)
 | 
								err := self.Process(block)
 | 
				
			||||||
@@ -112,29 +112,29 @@ func (self *StateManager) updateThread() {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (sm *StateManager) CurrentState() *state.State {
 | 
					func (sm *BlockManager) CurrentState() *state.State {
 | 
				
			||||||
	return sm.eth.ChainManager().CurrentBlock.State()
 | 
						return sm.eth.ChainManager().CurrentBlock.State()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (sm *StateManager) TransState() *state.State {
 | 
					func (sm *BlockManager) TransState() *state.State {
 | 
				
			||||||
	return sm.transState
 | 
						return sm.transState
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (sm *StateManager) MiningState() *state.State {
 | 
					func (sm *BlockManager) MiningState() *state.State {
 | 
				
			||||||
	return sm.miningState
 | 
						return sm.miningState
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (sm *StateManager) NewMiningState() *state.State {
 | 
					func (sm *BlockManager) NewMiningState() *state.State {
 | 
				
			||||||
	sm.miningState = sm.eth.ChainManager().CurrentBlock.State().Copy()
 | 
						sm.miningState = sm.eth.ChainManager().CurrentBlock.State().Copy()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return sm.miningState
 | 
						return sm.miningState
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (sm *StateManager) ChainManager() *ChainManager {
 | 
					func (sm *BlockManager) ChainManager() *ChainManager {
 | 
				
			||||||
	return sm.bc
 | 
						return sm.bc
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (self *StateManager) ProcessTransactions(coinbase *state.StateObject, state *state.State, block, parent *Block, txs Transactions) (Receipts, Transactions, Transactions, Transactions, error) {
 | 
					func (self *BlockManager) ProcessTransactions(coinbase *state.StateObject, state *state.State, block, parent *Block, txs Transactions) (Receipts, Transactions, Transactions, Transactions, error) {
 | 
				
			||||||
	var (
 | 
						var (
 | 
				
			||||||
		receipts           Receipts
 | 
							receipts           Receipts
 | 
				
			||||||
		handled, unhandled Transactions
 | 
							handled, unhandled Transactions
 | 
				
			||||||
@@ -209,7 +209,7 @@ done:
 | 
				
			|||||||
	return receipts, handled, unhandled, erroneous, err
 | 
						return receipts, handled, unhandled, erroneous, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (sm *StateManager) Process(block *Block) (err error) {
 | 
					func (sm *BlockManager) Process(block *Block) (err error) {
 | 
				
			||||||
	// Processing a blocks may never happen simultaneously
 | 
						// Processing a blocks may never happen simultaneously
 | 
				
			||||||
	sm.mutex.Lock()
 | 
						sm.mutex.Lock()
 | 
				
			||||||
	defer sm.mutex.Unlock()
 | 
						defer sm.mutex.Unlock()
 | 
				
			||||||
@@ -298,7 +298,7 @@ func (sm *StateManager) Process(block *Block) (err error) {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (sm *StateManager) ApplyDiff(state *state.State, parent, block *Block) (receipts Receipts, err error) {
 | 
					func (sm *BlockManager) ApplyDiff(state *state.State, parent, block *Block) (receipts Receipts, err error) {
 | 
				
			||||||
	coinbase := state.GetOrNewStateObject(block.Coinbase)
 | 
						coinbase := state.GetOrNewStateObject(block.Coinbase)
 | 
				
			||||||
	coinbase.SetGasPool(block.CalcGasLimit(parent))
 | 
						coinbase.SetGasPool(block.CalcGasLimit(parent))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -311,7 +311,7 @@ func (sm *StateManager) ApplyDiff(state *state.State, parent, block *Block) (rec
 | 
				
			|||||||
	return receipts, nil
 | 
						return receipts, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (sm *StateManager) CalculateTD(block *Block) bool {
 | 
					func (sm *BlockManager) CalculateTD(block *Block) bool {
 | 
				
			||||||
	uncleDiff := new(big.Int)
 | 
						uncleDiff := new(big.Int)
 | 
				
			||||||
	for _, uncle := range block.Uncles {
 | 
						for _, uncle := range block.Uncles {
 | 
				
			||||||
		uncleDiff = uncleDiff.Add(uncleDiff, uncle.Difficulty)
 | 
							uncleDiff = uncleDiff.Add(uncleDiff, uncle.Difficulty)
 | 
				
			||||||
@@ -337,7 +337,7 @@ func (sm *StateManager) CalculateTD(block *Block) bool {
 | 
				
			|||||||
// Validates the current block. Returns an error if the block was invalid,
 | 
					// Validates the current block. Returns an error if the block was invalid,
 | 
				
			||||||
// an uncle or anything that isn't on the current block chain.
 | 
					// an uncle or anything that isn't on the current block chain.
 | 
				
			||||||
// Validation validates easy over difficult (dagger takes longer time = difficult)
 | 
					// Validation validates easy over difficult (dagger takes longer time = difficult)
 | 
				
			||||||
func (sm *StateManager) ValidateBlock(block *Block) error {
 | 
					func (sm *BlockManager) ValidateBlock(block *Block) error {
 | 
				
			||||||
	// Check each uncle's previous hash. In order for it to be valid
 | 
						// Check each uncle's previous hash. In order for it to be valid
 | 
				
			||||||
	// is if it has the same block hash as the current
 | 
						// is if it has the same block hash as the current
 | 
				
			||||||
	parent := sm.bc.GetBlock(block.PrevHash)
 | 
						parent := sm.bc.GetBlock(block.PrevHash)
 | 
				
			||||||
@@ -374,7 +374,7 @@ func (sm *StateManager) ValidateBlock(block *Block) error {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (sm *StateManager) AccumelateRewards(state *state.State, block, parent *Block) error {
 | 
					func (sm *BlockManager) AccumelateRewards(state *state.State, block, parent *Block) error {
 | 
				
			||||||
	reward := new(big.Int).Set(BlockReward)
 | 
						reward := new(big.Int).Set(BlockReward)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	knownUncles := ethutil.Set(parent.Uncles)
 | 
						knownUncles := ethutil.Set(parent.Uncles)
 | 
				
			||||||
@@ -417,21 +417,7 @@ func (sm *StateManager) AccumelateRewards(state *state.State, block, parent *Blo
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Manifest will handle both creating notifications and generating bloom bin data
 | 
					func (sm *BlockManager) GetMessages(block *Block) (messages []*state.Message, err error) {
 | 
				
			||||||
func (sm *StateManager) createBloomFilter(state *state.State) *BloomFilter {
 | 
					 | 
				
			||||||
	bloomf := NewBloomFilter(nil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for _, msg := range state.Manifest().Messages {
 | 
					 | 
				
			||||||
		bloomf.Set(msg.To)
 | 
					 | 
				
			||||||
		bloomf.Set(msg.From)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	sm.eth.EventMux().Post(state.Manifest().Messages)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return bloomf
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (sm *StateManager) GetMessages(block *Block) (messages []*state.Message, err error) {
 | 
					 | 
				
			||||||
	if !sm.bc.HasBlock(block.PrevHash) {
 | 
						if !sm.bc.HasBlock(block.PrevHash) {
 | 
				
			||||||
		return nil, ParentError(block.PrevHash)
 | 
							return nil, ParentError(block.PrevHash)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1,12 +1,8 @@
 | 
				
			|||||||
package chain
 | 
					package chain
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/ethereum/go-ethereum/crypto"
 | 
					 | 
				
			||||||
	"github.com/ethereum/go-ethereum/state"
 | 
						"github.com/ethereum/go-ethereum/state"
 | 
				
			||||||
	"github.com/ethgo.old/ethutil"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestBloom9(t *testing.T) {
 | 
					func TestBloom9(t *testing.T) {
 | 
				
			||||||
@@ -21,6 +17,7 @@ func TestBloom9(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
func TestAddress(t *testing.T) {
 | 
					func TestAddress(t *testing.T) {
 | 
				
			||||||
	block := &Block{}
 | 
						block := &Block{}
 | 
				
			||||||
	block.Coinbase = ethutil.Hex2Bytes("22341ae42d6dd7384bc8584e50419ea3ac75b83f")
 | 
						block.Coinbase = ethutil.Hex2Bytes("22341ae42d6dd7384bc8584e50419ea3ac75b83f")
 | 
				
			||||||
@@ -29,3 +26,4 @@ func TestAddress(t *testing.T) {
 | 
				
			|||||||
	bin := CreateBloom(block)
 | 
						bin := CreateBloom(block)
 | 
				
			||||||
	fmt.Printf("bin = %x\n", ethutil.LeftPadBytes(bin, 64))
 | 
						fmt.Printf("bin = %x\n", ethutil.LeftPadBytes(bin, 64))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -100,7 +100,7 @@ func (self *Filter) Find() []*state.Message {
 | 
				
			|||||||
		// current parameters
 | 
							// current parameters
 | 
				
			||||||
		if self.bloomFilter(block) {
 | 
							if self.bloomFilter(block) {
 | 
				
			||||||
			// Get the messages of the block
 | 
								// Get the messages of the block
 | 
				
			||||||
			msgs, err := self.eth.StateManager().GetMessages(block)
 | 
								msgs, err := self.eth.BlockManager().GetMessages(block)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				chainlogger.Warnln("err: filter get messages ", err)
 | 
									chainlogger.Warnln("err: filter get messages ", err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -114,8 +114,8 @@ func (pool *TxPool) ValidateTransaction(tx *Transaction) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Get the sender
 | 
						// Get the sender
 | 
				
			||||||
	//sender := pool.Ethereum.StateManager().procState.GetAccount(tx.Sender())
 | 
						//sender := pool.Ethereum.BlockManager().procState.GetAccount(tx.Sender())
 | 
				
			||||||
	sender := pool.Ethereum.StateManager().CurrentState().GetAccount(tx.Sender())
 | 
						sender := pool.Ethereum.BlockManager().CurrentState().GetAccount(tx.Sender())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	totAmount := new(big.Int).Set(tx.Value)
 | 
						totAmount := new(big.Int).Set(tx.Value)
 | 
				
			||||||
	// Make sure there's enough in the sender's account. Having insufficient
 | 
						// Make sure there's enough in the sender's account. Having insufficient
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -108,7 +108,7 @@ func (self *Gui) DumpState(hash, path string) {
 | 
				
			|||||||
	var stateDump []byte
 | 
						var stateDump []byte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if len(hash) == 0 {
 | 
						if len(hash) == 0 {
 | 
				
			||||||
		stateDump = self.eth.StateManager().CurrentState().Dump()
 | 
							stateDump = self.eth.BlockManager().CurrentState().Dump()
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		var block *chain.Block
 | 
							var block *chain.Block
 | 
				
			||||||
		if hash[0] == '#' {
 | 
							if hash[0] == '#' {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -141,8 +141,8 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
 | 
				
			|||||||
		keyPair = self.lib.eth.KeyManager().KeyPair()
 | 
							keyPair = self.lib.eth.KeyManager().KeyPair()
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	statedb := self.lib.eth.StateManager().TransState()
 | 
						statedb := self.lib.eth.BlockManager().TransState()
 | 
				
			||||||
	account := self.lib.eth.StateManager().TransState().GetAccount(keyPair.Address())
 | 
						account := self.lib.eth.BlockManager().TransState().GetAccount(keyPair.Address())
 | 
				
			||||||
	contract := statedb.NewStateObject([]byte{0})
 | 
						contract := statedb.NewStateObject([]byte{0})
 | 
				
			||||||
	contract.SetBalance(value)
 | 
						contract.SetBalance(value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -396,7 +396,7 @@ func (gui *Gui) update() {
 | 
				
			|||||||
	generalUpdateTicker := time.NewTicker(500 * time.Millisecond)
 | 
						generalUpdateTicker := time.NewTicker(500 * time.Millisecond)
 | 
				
			||||||
	statsUpdateTicker := time.NewTicker(5 * time.Second)
 | 
						statsUpdateTicker := time.NewTicker(5 * time.Second)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	state := gui.eth.StateManager().TransState()
 | 
						state := gui.eth.BlockManager().TransState()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	unconfirmedFunds := new(big.Int)
 | 
						unconfirmedFunds := new(big.Int)
 | 
				
			||||||
	gui.win.Root().Call("setWalletValue", fmt.Sprintf("%v", ethutil.CurrencyToString(state.GetAccount(gui.address()).Balance())))
 | 
						gui.win.Root().Call("setWalletValue", fmt.Sprintf("%v", ethutil.CurrencyToString(state.GetAccount(gui.address()).Balance())))
 | 
				
			||||||
@@ -428,7 +428,7 @@ func (gui *Gui) update() {
 | 
				
			|||||||
				case chain.NewBlockEvent:
 | 
									case chain.NewBlockEvent:
 | 
				
			||||||
					gui.processBlock(ev.Block, false)
 | 
										gui.processBlock(ev.Block, false)
 | 
				
			||||||
					if bytes.Compare(ev.Block.Coinbase, gui.address()) == 0 {
 | 
										if bytes.Compare(ev.Block.Coinbase, gui.address()) == 0 {
 | 
				
			||||||
						gui.setWalletValue(gui.eth.StateManager().CurrentState().GetAccount(gui.address()).Balance(), nil)
 | 
											gui.setWalletValue(gui.eth.BlockManager().CurrentState().GetAccount(gui.address()).Balance(), nil)
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				case chain.TxPreEvent:
 | 
									case chain.TxPreEvent:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -190,7 +190,7 @@ func (ui *UiLib) AssetPath(p string) string {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (self *UiLib) StartDbWithContractAndData(contractHash, data string) {
 | 
					func (self *UiLib) StartDbWithContractAndData(contractHash, data string) {
 | 
				
			||||||
	dbWindow := NewDebuggerWindow(self)
 | 
						dbWindow := NewDebuggerWindow(self)
 | 
				
			||||||
	object := self.eth.StateManager().CurrentState().GetStateObject(ethutil.Hex2Bytes(contractHash))
 | 
						object := self.eth.BlockManager().CurrentState().GetStateObject(ethutil.Hex2Bytes(contractHash))
 | 
				
			||||||
	if len(object.Code) > 0 {
 | 
						if len(object.Code) > 0 {
 | 
				
			||||||
		dbWindow.SetCode("0x" + ethutil.Bytes2Hex(object.Code))
 | 
							dbWindow.SetCode("0x" + ethutil.Bytes2Hex(object.Code))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -317,7 +317,7 @@ func BlockDo(ethereum *eth.Ethereum, hash []byte) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	parent := ethereum.ChainManager().GetBlock(block.PrevHash)
 | 
						parent := ethereum.ChainManager().GetBlock(block.PrevHash)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, err := ethereum.StateManager().ApplyDiff(parent.State(), parent, block)
 | 
						_, err := ethereum.BlockManager().ApplyDiff(parent.State(), parent, block)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								ethereum.go
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								ethereum.go
									
									
									
									
									
								
							@@ -50,7 +50,7 @@ type Ethereum struct {
 | 
				
			|||||||
	// DB interface
 | 
						// DB interface
 | 
				
			||||||
	db ethutil.Database
 | 
						db ethutil.Database
 | 
				
			||||||
	// State manager for processing new blocks and managing the over all states
 | 
						// State manager for processing new blocks and managing the over all states
 | 
				
			||||||
	stateManager *chain.StateManager
 | 
						blockManager *chain.BlockManager
 | 
				
			||||||
	// The transaction pool. Transaction can be pushed on this pool
 | 
						// The transaction pool. Transaction can be pushed on this pool
 | 
				
			||||||
	// for later including in the blocks
 | 
						// for later including in the blocks
 | 
				
			||||||
	txPool *chain.TxPool
 | 
						txPool *chain.TxPool
 | 
				
			||||||
@@ -130,7 +130,7 @@ func New(db ethutil.Database, clientIdentity wire.ClientIdentity, keyManager *cr
 | 
				
			|||||||
	ethereum.blockPool = NewBlockPool(ethereum)
 | 
						ethereum.blockPool = NewBlockPool(ethereum)
 | 
				
			||||||
	ethereum.txPool = chain.NewTxPool(ethereum)
 | 
						ethereum.txPool = chain.NewTxPool(ethereum)
 | 
				
			||||||
	ethereum.blockChain = chain.NewChainManager(ethereum)
 | 
						ethereum.blockChain = chain.NewChainManager(ethereum)
 | 
				
			||||||
	ethereum.stateManager = chain.NewStateManager(ethereum)
 | 
						ethereum.blockManager = chain.NewBlockManager(ethereum)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Start the tx pool
 | 
						// Start the tx pool
 | 
				
			||||||
	ethereum.txPool.Start()
 | 
						ethereum.txPool.Start()
 | 
				
			||||||
@@ -150,8 +150,8 @@ func (s *Ethereum) ChainManager() *chain.ChainManager {
 | 
				
			|||||||
	return s.blockChain
 | 
						return s.blockChain
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s *Ethereum) StateManager() *chain.StateManager {
 | 
					func (s *Ethereum) BlockManager() *chain.BlockManager {
 | 
				
			||||||
	return s.stateManager
 | 
						return s.blockManager
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s *Ethereum) TxPool() *chain.TxPool {
 | 
					func (s *Ethereum) TxPool() *chain.TxPool {
 | 
				
			||||||
@@ -392,7 +392,7 @@ func (s *Ethereum) reapDeadPeerHandler() {
 | 
				
			|||||||
// Start the ethereum
 | 
					// Start the ethereum
 | 
				
			||||||
func (s *Ethereum) Start(seed bool) {
 | 
					func (s *Ethereum) Start(seed bool) {
 | 
				
			||||||
	s.blockPool.Start()
 | 
						s.blockPool.Start()
 | 
				
			||||||
	s.stateManager.Start()
 | 
						s.blockManager.Start()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Bind to addr and port
 | 
						// Bind to addr and port
 | 
				
			||||||
	ln, err := net.Listen("tcp", ":"+s.Port)
 | 
						ln, err := net.Listen("tcp", ":"+s.Port)
 | 
				
			||||||
@@ -516,7 +516,7 @@ func (s *Ethereum) Stop() {
 | 
				
			|||||||
		s.RpcServer.Stop()
 | 
							s.RpcServer.Stop()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	s.txPool.Stop()
 | 
						s.txPool.Stop()
 | 
				
			||||||
	s.stateManager.Stop()
 | 
						s.blockManager.Stop()
 | 
				
			||||||
	s.blockPool.Stop()
 | 
						s.blockPool.Stop()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	loggerger.Infoln("Server stopped")
 | 
						loggerger.Infoln("Server stopped")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -149,7 +149,7 @@ func (self *JSRE) dump(call otto.FunctionCall) otto.Value {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		state = block.State()
 | 
							state = block.State()
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		state = self.ethereum.StateManager().CurrentState()
 | 
							state = self.ethereum.BlockManager().CurrentState()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	v, _ := self.Vm.ToValue(state.Dump())
 | 
						v, _ := self.Vm.ToValue(state.Dump())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,7 +67,7 @@ func (miner *Miner) Start() {
 | 
				
			|||||||
	miner.events = mux.Subscribe(chain.NewBlockEvent{}, chain.TxPreEvent{})
 | 
						miner.events = mux.Subscribe(chain.NewBlockEvent{}, chain.TxPreEvent{})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Prepare inital block
 | 
						// Prepare inital block
 | 
				
			||||||
	//miner.ethereum.StateManager().Prepare(miner.block.State(), miner.block.State())
 | 
						//miner.ethereum.BlockManager().Prepare(miner.block.State(), miner.block.State())
 | 
				
			||||||
	go miner.listener()
 | 
						go miner.listener()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minerlogger.Infoln("Started")
 | 
						minerlogger.Infoln("Started")
 | 
				
			||||||
@@ -161,7 +161,7 @@ func (miner *Miner) stopMining() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (self *Miner) mineNewBlock() {
 | 
					func (self *Miner) mineNewBlock() {
 | 
				
			||||||
	stateManager := self.ethereum.StateManager()
 | 
						blockManager := self.ethereum.BlockManager()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	self.block = self.ethereum.ChainManager().NewBlock(self.coinbase)
 | 
						self.block = self.ethereum.ChainManager().NewBlock(self.coinbase)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -178,7 +178,7 @@ func (self *Miner) mineNewBlock() {
 | 
				
			|||||||
	parent := self.ethereum.ChainManager().GetBlock(self.block.PrevHash)
 | 
						parent := self.ethereum.ChainManager().GetBlock(self.block.PrevHash)
 | 
				
			||||||
	coinbase := self.block.State().GetOrNewStateObject(self.block.Coinbase)
 | 
						coinbase := self.block.State().GetOrNewStateObject(self.block.Coinbase)
 | 
				
			||||||
	coinbase.SetGasPool(self.block.CalcGasLimit(parent))
 | 
						coinbase.SetGasPool(self.block.CalcGasLimit(parent))
 | 
				
			||||||
	receipts, txs, unhandledTxs, erroneous, err := stateManager.ProcessTransactions(coinbase, self.block.State(), self.block, self.block, self.txs)
 | 
						receipts, txs, unhandledTxs, erroneous, err := blockManager.ProcessTransactions(coinbase, self.block.State(), self.block, self.block, self.txs)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		minerlogger.Debugln(err)
 | 
							minerlogger.Debugln(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -189,7 +189,7 @@ func (self *Miner) mineNewBlock() {
 | 
				
			|||||||
	self.block.SetReceipts(receipts)
 | 
						self.block.SetReceipts(receipts)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Accumulate the rewards included for this block
 | 
						// Accumulate the rewards included for this block
 | 
				
			||||||
	stateManager.AccumelateRewards(self.block.State(), self.block, parent)
 | 
						blockManager.AccumelateRewards(self.block.State(), self.block, parent)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	self.block.State().Update()
 | 
						self.block.State().Update()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -199,7 +199,7 @@ func (self *Miner) mineNewBlock() {
 | 
				
			|||||||
	nonce := self.pow.Search(self.block, self.powQuitChan)
 | 
						nonce := self.pow.Search(self.block, self.powQuitChan)
 | 
				
			||||||
	if nonce != nil {
 | 
						if nonce != nil {
 | 
				
			||||||
		self.block.Nonce = nonce
 | 
							self.block.Nonce = nonce
 | 
				
			||||||
		err := self.ethereum.StateManager().Process(self.block)
 | 
							err := self.ethereum.BlockManager().Process(self.block)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			minerlogger.Infoln(err)
 | 
								minerlogger.Infoln(err)
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -224,10 +224,10 @@ func (self *JSXEth) Transact(key, toStr, valueStr, gasStr, gasPriceStr, codeStr
 | 
				
			|||||||
		tx = chain.NewTransactionMessage(hash, value, gas, gasPrice, data)
 | 
							tx = chain.NewTransactionMessage(hash, value, gas, gasPrice, data)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	acc := self.obj.StateManager().TransState().GetOrNewStateObject(keyPair.Address())
 | 
						acc := self.obj.BlockManager().TransState().GetOrNewStateObject(keyPair.Address())
 | 
				
			||||||
	tx.Nonce = acc.Nonce
 | 
						tx.Nonce = acc.Nonce
 | 
				
			||||||
	acc.Nonce += 1
 | 
						acc.Nonce += 1
 | 
				
			||||||
	self.obj.StateManager().TransState().UpdateStateObject(acc)
 | 
						self.obj.BlockManager().TransState().UpdateStateObject(acc)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tx.Sign(keyPair.PrivateKey)
 | 
						tx.Sign(keyPair.PrivateKey)
 | 
				
			||||||
	self.obj.TxPool().QueueTransaction(tx)
 | 
						self.obj.TxPool().QueueTransaction(tx)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ type VmVars struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
type XEth struct {
 | 
					type XEth struct {
 | 
				
			||||||
	obj          chain.EthManager
 | 
						obj          chain.EthManager
 | 
				
			||||||
	stateManager *chain.StateManager
 | 
						blockManager *chain.BlockManager
 | 
				
			||||||
	blockChain   *chain.ChainManager
 | 
						blockChain   *chain.ChainManager
 | 
				
			||||||
	world        *World
 | 
						world        *World
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -34,7 +34,7 @@ type XEth struct {
 | 
				
			|||||||
func New(obj chain.EthManager) *XEth {
 | 
					func New(obj chain.EthManager) *XEth {
 | 
				
			||||||
	pipe := &XEth{
 | 
						pipe := &XEth{
 | 
				
			||||||
		obj:          obj,
 | 
							obj:          obj,
 | 
				
			||||||
		stateManager: obj.StateManager(),
 | 
							blockManager: obj.BlockManager(),
 | 
				
			||||||
		blockChain:   obj.ChainManager(),
 | 
							blockChain:   obj.ChainManager(),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	pipe.world = NewWorld(pipe)
 | 
						pipe.world = NewWorld(pipe)
 | 
				
			||||||
@@ -137,10 +137,10 @@ func (self *XEth) Transact(key *crypto.KeyPair, rec []byte, value, gas, price *e
 | 
				
			|||||||
		tx = chain.NewTransactionMessage(hash, value.BigInt(), gas.BigInt(), price.BigInt(), data)
 | 
							tx = chain.NewTransactionMessage(hash, value.BigInt(), gas.BigInt(), price.BigInt(), data)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	acc := self.stateManager.TransState().GetOrNewStateObject(key.Address())
 | 
						acc := self.blockManager.TransState().GetOrNewStateObject(key.Address())
 | 
				
			||||||
	tx.Nonce = acc.Nonce
 | 
						tx.Nonce = acc.Nonce
 | 
				
			||||||
	acc.Nonce += 1
 | 
						acc.Nonce += 1
 | 
				
			||||||
	self.stateManager.TransState().UpdateStateObject(acc)
 | 
						self.blockManager.TransState().UpdateStateObject(acc)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tx.Sign(key.PrivateKey)
 | 
						tx.Sign(key.PrivateKey)
 | 
				
			||||||
	self.obj.TxPool().QueueTransaction(tx)
 | 
						self.obj.TxPool().QueueTransaction(tx)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ func (self *XEth) World() *World {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (self *World) State() *state.State {
 | 
					func (self *World) State() *state.State {
 | 
				
			||||||
	return self.pipe.stateManager.CurrentState()
 | 
						return self.pipe.blockManager.CurrentState()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (self *World) Get(addr []byte) *Object {
 | 
					func (self *World) Get(addr []byte) *Object {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user