From 1206a755510a15bb1bc5d60e8c6fc1ff5073dfac Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Mon, 23 Jun 2025 14:41:36 +0800 Subject: [PATCH] fix Signed-off-by: ReyisaRuby --- evm/eth.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/evm/eth.go b/evm/eth.go index 5c80214..af5be2e 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -509,8 +509,15 @@ func (s *Solidity) executeContractCall(ctx *context.WriteContext, txReq *TxReque code, leftOverGas, err := vmenv.Call(sender, *txReq.Address, txReq.Input, txReq.GasLimit, uint256.MustFromBig(txReq.Value)) if IsPureTransfer(sender, txReq, ethState) { extraTransferGas := config.GlobalConfig.ExtraBalanceGas - ethState.SubBalance(sender.Address(), uint256.NewInt(extraTransferGas), tracing.BalanceChangeTransfer) - leftOverGas -= extraTransferGas * txReq.GasPrice.Uint64() + if extraTransferGas > txReq.GasLimit { + extraTransferGas = txReq.GasLimit + } + ethState.SubBalance(sender.Address(), uint256.NewInt(extraTransferGas*txReq.GasPrice.Uint64()), tracing.BalanceChangeTransfer) + if leftOverGas >= extraTransferGas { + leftOverGas -= extraTransferGas + } else { + leftOverGas = 0 + } } // logrus.Printf("after transfer: account %s balance %d \n", sender.Address(), ethState.GetBalance(sender.Address())) if err != nil {