Merge branch 'blockchain_aware'

This commit is contained in:
Jae Kwon
2016-03-06 15:08:52 -08:00
3 changed files with 51 additions and 2 deletions

View File

@ -2,6 +2,7 @@ package proxy
import ( import (
tmspcli "github.com/tendermint/tmsp/client" tmspcli "github.com/tendermint/tmsp/client"
tmsp "github.com/tendermint/tmsp/types"
) )
type AppConn interface { type AppConn interface {
@ -18,4 +19,7 @@ type AppConn interface {
InfoSync() (info string, err error) InfoSync() (info string, err error)
FlushSync() error FlushSync() error
CommitSync() (hash []byte, log string, err error) CommitSync() (hash []byte, log string, err error)
InitChainSync(validators []*tmsp.Validator) (err error)
BeginBlockSync(height uint64) (err error)
EndBlockSync() (changedValidators []*tmsp.Validator, err error)
} }

View File

@ -100,6 +100,33 @@ func (app *localAppConn) CommitSync() (hash []byte, log string, err error) {
return hash, log, nil return hash, log, nil
} }
func (app *localAppConn) InitChainSync(validators []*tmsp.Validator) (err error) {
app.mtx.Lock()
if bcApp, ok := app.Application.(tmsp.BlockchainAware); ok {
bcApp.InitChain(validators)
}
app.mtx.Unlock()
return nil
}
func (app *localAppConn) BeginBlockSync(height uint64) (err error) {
app.mtx.Lock()
if bcApp, ok := app.Application.(tmsp.BlockchainAware); ok {
bcApp.BeginBlock(height)
}
app.mtx.Unlock()
return nil
}
func (app *localAppConn) EndBlockSync() (changedValidators []*tmsp.Validator, err error) {
app.mtx.Lock()
if bcApp, ok := app.Application.(tmsp.BlockchainAware); ok {
changedValidators = bcApp.EndBlock()
}
app.mtx.Unlock()
return changedValidators, nil
}
//------------------------------------------------------- //-------------------------------------------------------
func (app *localAppConn) callback(req *tmsp.Request, res *tmsp.Response) *tmspcli.ReqRes { func (app *localAppConn) callback(req *tmsp.Request, res *tmsp.Response) *tmspcli.ReqRes {

View File

@ -77,16 +77,34 @@ func (s *State) execBlockOnProxyApp(evsw *events.EventSwitch, proxyAppConn proxy
} }
proxyAppConn.SetResponseCallback(proxyCb) proxyAppConn.SetResponseCallback(proxyCb)
// Run next txs in the block and get new AppHash // Begin block
err := proxyAppConn.BeginBlockSync(uint64(block.Height))
if err != nil {
log.Warn("Error in proxyAppConn.BeginBlock", "error", err)
return err
}
// Run txs of block
for _, tx := range block.Txs { for _, tx := range block.Txs {
proxyAppConn.AppendTxAsync(tx) proxyAppConn.AppendTxAsync(tx)
if err := proxyAppConn.Error(); err != nil { if err := proxyAppConn.Error(); err != nil {
return err return err
} }
} }
// End block
changedValidators, err := proxyAppConn.EndBlockSync()
if err != nil {
log.Warn("Error in proxyAppConn.EndBlock", "error", err)
return err
}
// TODO: Do something with changedValidators
log.Info("TODO: Do something with changedValidators", changedValidators)
// Commit block, get hash back
hash, logStr, err := proxyAppConn.CommitSync() hash, logStr, err := proxyAppConn.CommitSync()
if err != nil { if err != nil {
log.Warn("Error computing proxyAppConn hash", "error", err) log.Warn("Error in proxyAppConn.CommitSync", "error", err)
return err return err
} }
if logStr != "" { if logStr != "" {