From deff645dbaf774ff409e3a814fba41172ea1138c Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Thu, 19 Mar 2015 02:08:07 -0700 Subject: [PATCH] some public convenience functions, extra debug errors on ExecTx --- config/config.go | 10 ++++++++-- daemon/daemon.go | 46 +++++++++++++++++++++++++++++++--------------- logger/log.go | 4 ++++ state/state.go | 7 +++++++ vm/native.go | 1 + 5 files changed, 51 insertions(+), 17 deletions(-) diff --git a/config/config.go b/config/config.go index 2910a2f46..0abb40d03 100644 --- a/config/config.go +++ b/config/config.go @@ -25,6 +25,12 @@ func App() *confer.Config { return app } +func SetApp(a *confer.Config) { + appMtx.Lock() + defer appMtx.Unlock() + app = a +} + // NOTE: If you change this, maybe also change initDefaults() var defaultConfig = `# This is a TOML config file. # For more information, see https://github.com/toml-lang/toml @@ -57,7 +63,7 @@ ListenAddr = "127.0.0.1:8081" # TODO: Document options ` -var defaultGenesis = ` +var DefaultGenesis = ` { "Accounts": [ { @@ -114,7 +120,7 @@ func Init(rootDir string) { // Write default config file if missing. checkWriteFile(configFile, defaultConfig) - checkWriteFile(genesisFile, defaultGenesis) + checkWriteFile(genesisFile, DefaultGenesis) // Initialize Config app = confer.NewConfig() diff --git a/daemon/daemon.go b/daemon/daemon.go index b6497b13d..72a615c20 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -123,6 +123,35 @@ func (n *Node) inboundConnectionRoutine(l p2p.Listener) { // cleanup } +func (n *Node) DialSeed() { + addr := p2p.NewNetAddressString(config.App().GetString("SeedNode")) + peer, err := n.sw.DialPeerWithAddress(addr) + if err != nil { + log.Error("Error dialing seed", "error", err) + //n.book.MarkAttempt(addr) + return + } else { + log.Info("Connected to seed", "peer", peer) + n.book.AddAddress(addr, addr) + } +} + +func (n *Node) StartRpc() { + rpc.SetRPCBlockStore(n.blockStore) + rpc.SetRPCConsensusState(n.consensusState) + rpc.SetRPCMempoolReactor(n.mempoolReactor) + rpc.SetRPCSwitch(n.sw) + rpc.StartHTTPServer() +} + +func (n *Node) ConsensusState() *consensus.ConsensusState { + return n.consensusState +} + +func (n *Node) MempoolReactor() *mempl.MempoolReactor { + return n.mempoolReactor +} + func Daemon() { // Create & start node @@ -133,25 +162,12 @@ func Daemon() { // If seedNode is provided by config, dial out. if config.App().GetString("SeedNode") != "" { - addr := p2p.NewNetAddressString(config.App().GetString("SeedNode")) - peer, err := n.sw.DialPeerWithAddress(addr) - if err != nil { - log.Error("Error dialing seed", "error", err) - //n.book.MarkAttempt(addr) - return - } else { - log.Info("Connected to seed", "peer", peer) - n.book.AddAddress(addr, addr) - } + n.DialSeed() } // Run the RPC server. if config.App().GetString("RPC.HTTP.ListenAddr") != "" { - rpc.SetRPCBlockStore(n.blockStore) - rpc.SetRPCConsensusState(n.consensusState) - rpc.SetRPCMempoolReactor(n.mempoolReactor) - rpc.SetRPCSwitch(n.sw) - rpc.StartHTTPServer() + n.StartRpc() } // Sleep forever and then... diff --git a/logger/log.go b/logger/log.go index d37fd67e2..62f898098 100644 --- a/logger/log.go +++ b/logger/log.go @@ -20,6 +20,10 @@ func getLevel(lvlString string) log15.Lvl { } func init() { + InitLog() +} + +func InitLog() { handlers := []log15.Handler{} // By default, there's a stdout terminal format handler. diff --git a/state/state.go b/state/state.go index c17c83730..4d1bfad8c 100644 --- a/state/state.go +++ b/state/state.go @@ -282,18 +282,22 @@ func (s *State) ExecTx(tx_ blk.Tx, runCall bool) error { // Validate input inAcc = s.GetAccount(tx.Input.Address) if inAcc == nil { + log.Debug("Can't find in account %X", tx.Input.Address) return blk.ErrTxInvalidAddress } // pubKey should be present in either "inAcc" or "tx.Input" if err := checkInputPubKey(inAcc, tx.Input); err != nil { + log.Debug("Can't find pubkey for %X", tx.Input.Address) return err } signBytes := account.SignBytes(tx) err := s.ValidateInput(inAcc, signBytes, tx.Input) if err != nil { + log.Debug("ValidateInput failed on %X:", tx.Input.Address) return err } if tx.Input.Amount < tx.Fee { + log.Debug("Sender did not send enough to cover the fee %X", tx.Input.Address) return blk.ErrTxInsufficientFunds } @@ -301,10 +305,12 @@ func (s *State) ExecTx(tx_ blk.Tx, runCall bool) error { if !createAccount { // Validate output if len(tx.Address) != 20 { + log.Debug("Destination address is not 20 bytes %X", tx.Address) return blk.ErrTxInvalidAddress } outAcc = s.GetAccount(tx.Address) if outAcc == nil { + log.Debug("Cannot find destination address %X", tx.Address) return blk.ErrTxInvalidAddress } } @@ -336,6 +342,7 @@ func (s *State) ExecTx(tx_ blk.Tx, runCall bool) error { } else { callee, err = appState.CreateAccount(caller) if err != nil { + log.Debug("Error creating account") return err } } diff --git a/vm/native.go b/vm/native.go index 467e0a022..359b679f8 100644 --- a/vm/native.go +++ b/vm/native.go @@ -4,6 +4,7 @@ import ( "code.google.com/p/go.crypto/ripemd160" "crypto/sha256" "github.com/tendermint/tendermint/vm/secp256k1" + "github.com/tendermint/tendermint/vm/sha3" . "github.com/tendermint/tendermint/common"