Sort transactions based on the nonce
* Added a transaction sorter
This commit is contained in:
parent
73761f7af6
commit
9988b1a047
|
@ -147,22 +147,6 @@ func (tx *Transaction) RlpValueDecode(decoder *ethutil.Value) {
|
||||||
if len(tx.Recipient) == 0 {
|
if len(tx.Recipient) == 0 {
|
||||||
tx.contractCreation = true
|
tx.contractCreation = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// If the list is of length 10 it's a contract creation tx
|
|
||||||
if decoder.Len() == 10 {
|
|
||||||
tx.contractCreation = true
|
|
||||||
tx.Init = decoder.Get(6).Bytes()
|
|
||||||
|
|
||||||
tx.v = byte(decoder.Get(7).Uint())
|
|
||||||
tx.r = decoder.Get(8).Bytes()
|
|
||||||
tx.s = decoder.Get(9).Bytes()
|
|
||||||
} else {
|
|
||||||
tx.v = byte(decoder.Get(6).Uint())
|
|
||||||
tx.r = decoder.Get(7).Bytes()
|
|
||||||
tx.s = decoder.Get(8).Bytes()
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tx *Transaction) String() string {
|
func (tx *Transaction) String() string {
|
||||||
|
@ -228,3 +212,15 @@ func (self *Receipt) String() string {
|
||||||
self.PostState,
|
self.PostState,
|
||||||
self.CumulativeGasUsed)
|
self.CumulativeGasUsed)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Transaction slice type for basic sorting
|
||||||
|
type Transactions []*Transaction
|
||||||
|
|
||||||
|
func (s Transactions) Len() int { return len(s) }
|
||||||
|
func (s Transactions) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
||||||
|
|
||||||
|
type TxByNonce struct{ Transactions }
|
||||||
|
|
||||||
|
func (s TxByNonce) Less(i, j int) bool {
|
||||||
|
return s.Transactions[i].Nonce < s.Transactions[j].Nonce
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"github.com/ethereum/eth-go/ethchain"
|
"github.com/ethereum/eth-go/ethchain"
|
||||||
"github.com/ethereum/eth-go/ethutil"
|
"github.com/ethereum/eth-go/ethutil"
|
||||||
"github.com/ethereum/eth-go/ethwire"
|
"github.com/ethereum/eth-go/ethwire"
|
||||||
|
"sort"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Miner struct {
|
type Miner struct {
|
||||||
|
@ -12,7 +13,7 @@ type Miner struct {
|
||||||
ethereum ethchain.EthManager
|
ethereum ethchain.EthManager
|
||||||
coinbase []byte
|
coinbase []byte
|
||||||
reactChan chan ethutil.React
|
reactChan chan ethutil.React
|
||||||
txs []*ethchain.Transaction
|
txs ethchain.Transactions
|
||||||
uncles []*ethchain.Block
|
uncles []*ethchain.Block
|
||||||
block *ethchain.Block
|
block *ethchain.Block
|
||||||
powChan chan []byte
|
powChan chan []byte
|
||||||
|
@ -132,6 +133,8 @@ func (self *Miner) mineNewBlock() {
|
||||||
self.block.SetUncles(self.uncles)
|
self.block.SetUncles(self.uncles)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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
|
// Accumulate all valid transaction and apply them to the new state
|
||||||
receipts, txs := stateManager.ApplyTransactions(self.block.State(), self.block, self.txs)
|
receipts, txs := stateManager.ApplyTransactions(self.block.State(), self.block, self.txs)
|
||||||
self.txs = txs
|
self.txs = txs
|
||||||
|
|
Loading…
Reference in New Issue