Skip to content

Commit 0905808

Browse files
authored
Merge branch 'main' into refactor/makefile
2 parents 9808ed7 + 55b828a commit 0905808

5 files changed

Lines changed: 45 additions & 31 deletions

File tree

cmd/node/app/app.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func StartUpChain(yuCfg *yuConfig.KernelConf, poaCfg *poa.PoaConfig, evmCfg *evm
6464

6565
ethrpc.StartupEthRPC(chain, evmCfg)
6666
if evmCfg.EnableBridge {
67-
StartupL1Watcher(evmCfg, db)
67+
// StartupL1Watcher(evmCfg, db)
6868
StartupRelayer(chain, evmCfg, db)
6969
StartupBridgeRpc(evmCfg, db)
7070
}
@@ -123,12 +123,12 @@ func StartupL1Watcher(cfg *evm.GethConfig, db *gorm.DB) {
123123
func StartupRelayer(chain *kernel.Kernel, cfg *evm.GethConfig, db *gorm.DB) {
124124
ctx := context.Background()
125125

126-
l1Client, err := ethclient.Dial(cfg.L1ClientAddress)
126+
l2Client, err := ethclient.Dial(cfg.L2ClientAddress)
127127
if err != nil {
128128
logrus.Fatal("failed to connect to L1 geth", "endpoint", cfg.L1ClientAddress, "err", err)
129129
}
130130

131-
l1Relayer, err := relayer.NewL1Relayer(ctx, cfg, l1Client, chain, db)
131+
l1Relayer, err := relayer.NewL1Relayer(ctx, cfg, l2Client, chain, db)
132132
if err != nil {
133133
logrus.Fatal("init bridge relayer failed: ", err)
134134
}

metrics/metrics.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ var (
191191
Name: "withdraw_message_nonce_gap",
192192
Help: "The gap between the current value of the bridge event nonce and the expected value.",
193193
},
194-
[]string{TypeLbl},
194+
[]string{TypeLbl, TypeStatusLbl},
195195
)
196196
)
197197

parallel/evm_process.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@ const (
2525

2626
type ParallelEVM struct {
2727
*tripod.Tripod
28-
cpdb *state.StateDB
29-
Solidity *evm.Solidity `tripod:"solidity"`
30-
statManager *BlockTxnStatManager
31-
objectInc map[common2.Address]int
32-
processor EvmProcessor
28+
cpdb *state.StateDB
29+
Solidity *evm.Solidity `tripod:"solidity"`
30+
statManager *BlockTxnStatManager
31+
objectInc map[common2.Address]int
32+
processor EvmProcessor
33+
blockTxnCtxList []*txnCtx
3334
}
3435

3536
func NewParallelEVM() *ParallelEVM {

parallel/evm_util.go

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -168,41 +168,23 @@ func (k *ParallelEVM) prepareTxnList(block *types.Block) ([]*txnCtx, map[common.
168168

169169
func (k *ParallelEVM) executeTxnCtxListInOrder(sdb *state.StateDB, list []*txnCtx, isRedo bool) []*txnCtx {
170170
for index, tctx := range list {
171-
nonExecuteSDB := sdb.Copy()
172171
if tctx.err != nil {
173172
list[index] = tctx
174173
continue
175174
}
175+
hasErr := false
176176
tctx.ctx.ExtraInterface = pending_state.NewPendingStateWrapper(pending_state.NewStateDBWrapper(sdb), pending_state.NewStateContext(false), int64(index))
177177
err := tctx.writing(tctx.ctx)
178178
if err != nil {
179+
hasErr = true
179180
tctx.err = err
180181
tctx.receipt = k.handleTxnError(err, tctx.ctx, tctx.ctx.Block, tctx.txn)
181-
list[index] = tctx
182-
sdb = nonExecuteSDB
183-
continue
184182
} else {
185183
tctx.receipt = k.handleTxnEvent(tctx.ctx, tctx.ctx.Block, tctx.txn, isRedo)
186-
tctx.ps = tctx.ctx.ExtraInterface.(*pending_state.PendingStateWrapper)
187-
sdb = tctx.ps.GetStateDB()
188184
}
185+
tctx.ps = tctx.ctx.ExtraInterface.(*pending_state.PendingStateWrapper)
189186
list[index] = tctx
190-
// only for check message nonce
191-
if tctx.req.Address != nil && *tctx.req.Address == testBridgeContractAddress {
192-
messageNonceSlot := sdb.GetState(testBridgeContractAddress, testStorageSlotHash)
193-
// logrus.Infof("testStorageSlotHash %s", testStorageSlotHash.String())
194-
// logrus.Infof("executeTxnCtxListInOrder index %d, messageNonceSlot %s", index, messageNonceSlot.String())
195-
currentMessageNonceSlot := new(big.Int).SetBytes(messageNonceSlot.Bytes())
196-
//logrus.Infof("lastMessageNonceSlot %s", lastMessageNonceSlot.String())
197-
if lastMessageNonceSlot.Cmp(big.NewInt(0)) != 0 {
198-
diff := new(big.Int).Sub(currentMessageNonceSlot, lastMessageNonceSlot)
199-
if diff.Cmp(big.NewInt(1)) > 0 {
200-
logrus.Warnf("Message nonce slot increased by more than 1: txhash %s, before %s, after %s, index %d ,diff %s,tctx.ctx.Block.Height %d", tctx.txn.TxnHash.String(), lastMessageNonceSlot.String(), currentMessageNonceSlot.String(), index, diff.String(), tctx.ctx.Block.Height)
201-
metrics.WithdrawMessageNonceGap.WithLabelValues("bridge").Inc()
202-
}
203-
}
204-
lastMessageNonceSlot.Set(currentMessageNonceSlot)
205-
}
187+
k.checkNonce(sdb, tctx, hasErr)
206188
}
207189
k.gcCopiedStateDB(nil, list)
208190
return list
@@ -215,3 +197,33 @@ func (k *ParallelEVM) gcCopiedStateDB(copiedStateDBList []*pending_state.Pending
215197
ctx.ps = nil
216198
}
217199
}
200+
201+
func (k *ParallelEVM) checkNonce(sdb *state.StateDB, tctx *txnCtx, hasErr bool) {
202+
if tctx.req.Address != nil && *tctx.req.Address == testBridgeContractAddress {
203+
messageNonceSlot := sdb.GetState(testBridgeContractAddress, testStorageSlotHash)
204+
currentMessageNonceSlot := new(big.Int).SetBytes(messageNonceSlot.Bytes())
205+
if lastMessageNonceSlot.Cmp(big.NewInt(0)) != 0 {
206+
diff := new(big.Int).Sub(currentMessageNonceSlot, lastMessageNonceSlot)
207+
if hasErr {
208+
if diff.Cmp(big.NewInt(0)) != 0 {
209+
logrus.Warnf("message nonce changed when error: txhash %s, before %s, after %s,diff %s,tctx.ctx.Block.Height %d", tctx.txn.TxnHash.String(), lastMessageNonceSlot.String(), currentMessageNonceSlot.String(), diff.String(), tctx.ctx.Block.Height)
210+
metrics.WithdrawMessageNonceGap.WithLabelValues("bridge", "err_increased").Inc()
211+
}
212+
} else {
213+
if diff.Cmp(big.NewInt(1)) > 0 {
214+
logrus.Warnf("message nonce slot increased by more than 1: txhash %s, before %s, after %s, diff %s,tctx.ctx.Block.Height %d", tctx.txn.TxnHash.String(), lastMessageNonceSlot.String(), currentMessageNonceSlot.String(), diff.String(), tctx.ctx.Block.Height)
215+
metrics.WithdrawMessageNonceGap.WithLabelValues("bridge", "more_increase").Inc()
216+
for _, eachTctx := range k.blockTxnCtxList {
217+
slot := sdb.GetState(testBridgeContractAddress, testStorageSlotHash)
218+
nonce := new(big.Int).SetBytes(slot.Bytes())
219+
logrus.Infof("txhash %s, message nonce %s, hasErr:%v", eachTctx.txn.TxnHash.String(), nonce.String(), eachTctx.err != nil)
220+
if eachTctx.txn.TxnHash == tctx.txn.TxnHash {
221+
break
222+
}
223+
}
224+
}
225+
}
226+
}
227+
lastMessageNonceSlot.Set(currentMessageNonceSlot)
228+
}
229+
}

parallel/serial_evm.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ func NewSerialEvmExecutor(evm *ParallelEVM) *SerialEvmExecutor {
2727
func (s *SerialEvmExecutor) Prepare(block *types.Block) {
2828
s.k.prepareExecute()
2929
s.txnCtxList, s.receipts = s.k.prepareTxnList(block)
30+
s.k.blockTxnCtxList = s.txnCtxList
3031
s.k.updateTxnObjInc(s.txnCtxList)
3132
}
3233

0 commit comments

Comments
 (0)