From 3827a30b81801fb0e681e4c5d30c74077e34064f Mon Sep 17 00:00:00 2001 From: Lawliet-Chan <1576710154@qq.com> Date: Tue, 19 Nov 2024 21:46:48 +0800 Subject: [PATCH 1/4] add order txpool --- evm/eth.go | 4 ++++ evm/tx_order.go | 36 ++++++++++++++++++++++++++++++++++++ go.mod | 2 +- go.sum | 4 ++-- 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 evm/tx_order.go diff --git a/evm/eth.go b/evm/eth.go index a345f74..64f681c 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -145,6 +145,10 @@ func (s *Solidity) InitChain(genesisBlock *yu_types.Block) { } genesisBlock.StateRoot = yu_common.Hash(genesisStateRoot) + + // sort by geth Nonce + txOrdered := NewTxOrdered(ethState) + s.Pool.SetPackFilter(txOrdered.PackOrder) } func NewSolidity(gethConfig *GethConfig) *Solidity { diff --git a/evm/tx_order.go b/evm/tx_order.go new file mode 100644 index 0000000..967e348 --- /dev/null +++ b/evm/tx_order.go @@ -0,0 +1,36 @@ +package evm + +import ( + "github.com/ethereum/go-ethereum/common" + "github.com/yu-org/yu/core/types" +) + +type TxOrdered struct { + packingNonces map[common.Address]uint64 + state *EthState +} + +func NewTxOrdered(state *EthState) *TxOrdered { + return &TxOrdered{ + packingNonces: make(map[common.Address]uint64), + state: state, + } +} + +func (to *TxOrdered) PackOrder(tx *types.SignedTxn) bool { + req := new(TxRequest) + err := tx.BindJson(req) + if err != nil { + return false + } + nonce, ok := to.packingNonces[req.Origin] + if !ok { + to.packingNonces[req.Origin] = to.state.GetNonce(req.Origin) + } + + if req.Nonce == nonce+1 { + to.packingNonces[req.Origin]++ + return true + } + return false +} diff --git a/go.mod b/go.mod index ac154d8..5944998 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/sourcegraph/conc v0.3.0 github.com/stretchr/testify v1.9.0 github.com/tendermint/tendermint v0.34.24 - github.com/yu-org/yu v1.2.7 + github.com/yu-org/yu v1.2.8 golang.org/x/time v0.5.0 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index d3e6853..de1746a 100644 --- a/go.sum +++ b/go.sum @@ -680,8 +680,8 @@ github.com/wlynxg/anet v0.0.3 h1:PvR53psxFXstc12jelG6f1Lv4MWqE0tI76/hHGjh9rg= github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= -github.com/yu-org/yu v1.2.7 h1:/PQLTZGj0HJWdlY3YwvNvfnTij3wxMEEyJG0gY3B3/4= -github.com/yu-org/yu v1.2.7/go.mod h1:LHBLDJ2fakzuFiUi1KFhdMCCgo2RZzSwDgjxTZlJPDo= +github.com/yu-org/yu v1.2.8 h1:JjFw3SVcWgmmvjl23OzBHpLliuQiyCHqAW5j7s3vLJg= +github.com/yu-org/yu v1.2.8/go.mod h1:LHBLDJ2fakzuFiUi1KFhdMCCgo2RZzSwDgjxTZlJPDo= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= From 8becb65adedd3d9bea3d64c6b1acf5e293496c18 Mon Sep 17 00:00:00 2001 From: Lawliet-Chan <1576710154@qq.com> Date: Tue, 19 Nov 2024 22:06:00 +0800 Subject: [PATCH 2/4] add log --- evm/tx_order.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/evm/tx_order.go b/evm/tx_order.go index 967e348..6701be9 100644 --- a/evm/tx_order.go +++ b/evm/tx_order.go @@ -2,6 +2,7 @@ package evm import ( "github.com/ethereum/go-ethereum/common" + "github.com/sirupsen/logrus" "github.com/yu-org/yu/core/types" ) @@ -21,6 +22,7 @@ func (to *TxOrdered) PackOrder(tx *types.SignedTxn) bool { req := new(TxRequest) err := tx.BindJson(req) if err != nil { + logrus.Fatalf("PackOrder BindJson txRequest(%s): %v", tx.TxnHash.String(), err) return false } nonce, ok := to.packingNonces[req.Origin] @@ -28,6 +30,8 @@ func (to *TxOrdered) PackOrder(tx *types.SignedTxn) bool { to.packingNonces[req.Origin] = to.state.GetNonce(req.Origin) } + logrus.Infof("PackOrder Address(%s), Nonce(%d)", req.Address.String(), nonce) + if req.Nonce == nonce+1 { to.packingNonces[req.Origin]++ return true From e24a0d0567c00cb56df3bdb9adde92995d83b919 Mon Sep 17 00:00:00 2001 From: Lawliet-Chan <1576710154@qq.com> Date: Tue, 19 Nov 2024 22:11:46 +0800 Subject: [PATCH 3/4] add log --- evm/tx_order.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evm/tx_order.go b/evm/tx_order.go index 6701be9..0096666 100644 --- a/evm/tx_order.go +++ b/evm/tx_order.go @@ -30,7 +30,7 @@ func (to *TxOrdered) PackOrder(tx *types.SignedTxn) bool { to.packingNonces[req.Origin] = to.state.GetNonce(req.Origin) } - logrus.Infof("PackOrder Address(%s), Nonce(%d)", req.Address.String(), nonce) + logrus.Infof("PackOrder Address(%s), current Nonce(%d), request tx Nonce(%d)", req.Address.String(), nonce, req.Nonce) if req.Nonce == nonce+1 { to.packingNonces[req.Origin]++ From 78fb0a512eb642fe47a1187dc9fddfb9ad8a907e Mon Sep 17 00:00:00 2001 From: Lawliet-Chan <1576710154@qq.com> Date: Tue, 19 Nov 2024 22:55:32 +0800 Subject: [PATCH 4/4] fix --- evm/tx_order.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/evm/tx_order.go b/evm/tx_order.go index 0096666..450c625 100644 --- a/evm/tx_order.go +++ b/evm/tx_order.go @@ -25,14 +25,14 @@ func (to *TxOrdered) PackOrder(tx *types.SignedTxn) bool { logrus.Fatalf("PackOrder BindJson txRequest(%s): %v", tx.TxnHash.String(), err) return false } - nonce, ok := to.packingNonces[req.Origin] + oldNonce, ok := to.packingNonces[req.Origin] if !ok { to.packingNonces[req.Origin] = to.state.GetNonce(req.Origin) } - logrus.Infof("PackOrder Address(%s), current Nonce(%d), request tx Nonce(%d)", req.Address.String(), nonce, req.Nonce) + logrus.Infof("PackOrder Address(%s), current Nonce(%d), request tx Nonce(%d)", req.Address.String(), oldNonce, req.Nonce) - if req.Nonce == nonce+1 { + if req.Nonce == oldNonce { to.packingNonces[req.Origin]++ return true }