aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ethchain/asm.go2
-rw-r--r--ethchain/block_chain.go2
-rw-r--r--ethchain/state_transition.go16
-rw-r--r--ethchain/types.go2
-rw-r--r--ethminer/miner.go11
-rw-r--r--peer.go4
6 files changed, 25 insertions, 12 deletions
diff --git a/ethchain/asm.go b/ethchain/asm.go
index 277326ff9..c267f9b55 100644
--- a/ethchain/asm.go
+++ b/ethchain/asm.go
@@ -28,7 +28,7 @@ func Disassemble(script []byte) (asm []string) {
if len(data) == 0 {
data = []byte{0}
}
- asm = append(asm, fmt.Sprintf("0x%x", data))
+ asm = append(asm, fmt.Sprintf("%#x", data))
pc.Add(pc, big.NewInt(a-1))
}
diff --git a/ethchain/block_chain.go b/ethchain/block_chain.go
index 8cede2403..19b5248d7 100644
--- a/ethchain/block_chain.go
+++ b/ethchain/block_chain.go
@@ -55,6 +55,8 @@ func (bc *BlockChain) NewBlock(coinbase []byte) *Block {
nil,
"")
+ block.MinGasPrice = big.NewInt(10000000000000)
+
if bc.CurrentBlock != nil {
var mul *big.Int
if block.Time < lastBlockTime+42 {
diff --git a/ethchain/state_transition.go b/ethchain/state_transition.go
index a080c5602..5ded0cddd 100644
--- a/ethchain/state_transition.go
+++ b/ethchain/state_transition.go
@@ -131,14 +131,21 @@ func (self *StateTransition) TransitionState() (err error) {
return NonceError(tx.Nonce, sender.Nonce)
}
- // Increment the nonce for the next transaction
- sender.Nonce += 1
-
// Pre-pay gas / Buy gas of the coinbase account
if err = self.BuyGas(); err != nil {
return err
}
+ // XXX Transactions after this point are considered valid.
+
+ defer func() {
+ self.state.UpdateStateObject(sender)
+ self.state.UpdateStateObject(receiver)
+ }()
+
+ // Increment the nonce for the next transaction
+ sender.Nonce += 1
+
// Get the receiver (TODO fix this, if coinbase is the receiver we need to save/retrieve)
receiver = self.Receiver()
@@ -187,9 +194,6 @@ func (self *StateTransition) TransitionState() (err error) {
remaining := new(big.Int).Mul(self.gas, tx.GasPrice)
sender.AddAmount(remaining)
- self.state.UpdateStateObject(sender)
- self.state.UpdateStateObject(receiver)
-
return nil
}
diff --git a/ethchain/types.go b/ethchain/types.go
index ee70a8d28..d89fad147 100644
--- a/ethchain/types.go
+++ b/ethchain/types.go
@@ -226,7 +226,7 @@ var opCodeToString = map[OpCode]string{
func (o OpCode) String() string {
str := opCodeToString[o]
if len(str) == 0 {
- return fmt.Sprintf("Missing opcode 0x%x", int(o))
+ return fmt.Sprintf("Missing opcode %#x", int(o))
}
return str
diff --git a/ethminer/miner.go b/ethminer/miner.go
index d05405391..30b7ef35d 100644
--- a/ethminer/miner.go
+++ b/ethminer/miner.go
@@ -136,11 +136,18 @@ func (self *Miner) mineNewBlock() {
// Sort the transactions by nonce in case of odd network propagation
sort.Sort(ethchain.TxByNonce{self.txs})
+
// Accumulate all valid transaction and apply them to the new state
- receipts, txs := stateManager.ApplyTransactions(self.block.Coinbase, self.block.State(), self.block, self.txs)
- self.txs = txs
+ // Error may be ignored. It's not important during mining
+ receipts, txs, unhandledTxs, err := stateManager.ProcessTransactions(self.block.Coinbase, self.block.State(), self.block, self.block, self.txs)
+ if err != nil {
+ ethutil.Config.Log.Debugln("[MINER]", err)
+ }
+ self.txs = append(txs, unhandledTxs...)
+
// Set the transactions to the block so the new SHA3 can be calculated
self.block.SetReceipts(receipts, txs)
+
// Accumulate the rewards included for this block
stateManager.AccumelateRewards(self.block.State(), self.block)
diff --git a/peer.go b/peer.go
index 4434715fb..9da2ed002 100644
--- a/peer.go
+++ b/peer.go
@@ -19,7 +19,7 @@ const (
// Current protocol version
ProtocolVersion = 20
// Interval for ping/pong message
- pingPongTimer = 30 * time.Second
+ pingPongTimer = 1 * time.Second
)
type DiscReason byte
@@ -270,7 +270,7 @@ out:
// Ping timer
case <-pingTimer.C:
timeSince := time.Since(time.Unix(p.lastPong, 0))
- if p.pingStartTime.IsZero() == false && timeSince > (pingPongTimer+10*time.Second) {
+ if !p.pingStartTime.IsZero() && p.lastPong != 0 && timeSince > (pingPongTimer+10*time.Second) {
ethutil.Config.Log.Infof("[PEER] Peer did not respond to latest pong fast enough, it took %s, disconnecting.\n", timeSince)
p.Stop()
return