From 0d342c29c5ad4b0d2b27549a6acc55e1b1885f1a Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Wed, 25 Jun 2025 13:52:58 +0800 Subject: [PATCH 01/10] fix Signed-off-by: ReyisaRuby --- evm/eth.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/evm/eth.go b/evm/eth.go index 3431c49..ff6a8ff 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -506,7 +506,7 @@ func (s *Solidity) executeContractCall(ctx *context.WriteContext, txReq *TxReque ethState.SetNonce(txReq.Origin, ethState.GetNonce(txReq.Origin)+1) senderBalanceBefore := ethState.GetBalance(sender.Address()) code, leftOverGas, err := vmenv.Call(sender, *txReq.Address, txReq.Input, txReq.GasLimit, uint256.MustFromBig(txReq.Value)) - senderBalanceAferExecute := ethState.GetBalance(sender.Address()) + senderBalanceAfterExecute := ethState.GetBalance(sender.Address()) isPureTransferTxn := false if IsPureTransfer(sender, txReq, ethState) { isPureTransferTxn = true @@ -533,8 +533,8 @@ func (s *Solidity) executeContractCall(ctx *context.WriteContext, txReq *TxReque return gasUsed, err } senderBalanceAfterExtra := ethState.GetBalance(sender.Address()) - logrus.Printf("contract call balance before:%v ,after execute:%v, after extra:%v, isPure:%v, sender:%v", - senderBalanceBefore.Uint64(), senderBalanceAferExecute.Uint64(), senderBalanceAfterExtra.Uint64(), isPureTransferTxn, sender.Address().String()) + logrus.Printf("contract call balance before:%v ,after execute:%v, after extra:%v, isPure:%v, value:%v, sender:%v,", + senderBalanceBefore.Uint64(), senderBalanceAfterExecute.Uint64(), senderBalanceAfterExtra.Uint64(), isPureTransferTxn, txReq.Value.Uint64(), sender.Address().String()) _, err2 := emitReceipt(ctx, vmenv, txReq, code, common.Address{}, leftOverGas, err) // logrus.Printf("[Execute Txn] SendTx success. Oringin code = %v, Hex Code = %v, Left Gas = %v", code, hex.EncodeToString(code), leftOverGas) From c0756c2b171e271bf1a27b97c7924a0a40848eea Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Wed, 25 Jun 2025 13:56:44 +0800 Subject: [PATCH 02/10] fix Signed-off-by: ReyisaRuby --- evm/eth.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evm/eth.go b/evm/eth.go index ff6a8ff..04f025f 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -534,7 +534,7 @@ func (s *Solidity) executeContractCall(ctx *context.WriteContext, txReq *TxReque } senderBalanceAfterExtra := ethState.GetBalance(sender.Address()) logrus.Printf("contract call balance before:%v ,after execute:%v, after extra:%v, isPure:%v, value:%v, sender:%v,", - senderBalanceBefore.Uint64(), senderBalanceAfterExecute.Uint64(), senderBalanceAfterExtra.Uint64(), isPureTransferTxn, txReq.Value.Uint64(), sender.Address().String()) + senderBalanceBefore.String(), senderBalanceAfterExecute.String(), senderBalanceAfterExtra.String(), isPureTransferTxn, txReq.Value.String(), sender.Address().String()) _, err2 := emitReceipt(ctx, vmenv, txReq, code, common.Address{}, leftOverGas, err) // logrus.Printf("[Execute Txn] SendTx success. Oringin code = %v, Hex Code = %v, Left Gas = %v", code, hex.EncodeToString(code), leftOverGas) From c892b708b79b3f8f9d589c6f8cd0ea80c56c6a23 Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Wed, 25 Jun 2025 13:59:51 +0800 Subject: [PATCH 03/10] fix fee Signed-off-by: ReyisaRuby --- evm/eth.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/evm/eth.go b/evm/eth.go index 04f025f..6bd017a 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -514,7 +514,9 @@ func (s *Solidity) executeContractCall(ctx *context.WriteContext, txReq *TxReque if extraTransferGas > txReq.GasLimit { extraTransferGas = txReq.GasLimit } - ethState.SubBalance(sender.Address(), uint256.NewInt(extraTransferGas*txReq.GasPrice.Uint64()), tracing.BalanceChangeTransfer) + refundFee := new(big.Int).Mul(txReq.GasPrice, new(big.Int).SetUint64(extraTransferGas)) + refundFeeU256, _ := uint256.FromBig(refundFee) + ethState.SubBalance(sender.Address(), refundFeeU256, tracing.BalanceChangeTransfer) if leftOverGas >= extraTransferGas { leftOverGas -= extraTransferGas } else { From b849803fe54a3765d4421f4801600ee73840083c Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Wed, 25 Jun 2025 14:11:15 +0800 Subject: [PATCH 04/10] fix Signed-off-by: ReyisaRuby --- evm/eth.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/evm/eth.go b/evm/eth.go index 6bd017a..c1676b8 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -320,13 +320,13 @@ func (s *Solidity) ExecuteTxn(ctx *context.WriteContext) (err error) { gasUsed, err = s.executeContractCall(ctx, txReq, pd, txReq.Origin, coinbase, vmenv, sender, rules) } - if !rules.IsLondon { - // Before EIP-3529: refunds were capped to gasUsed / 2 - s.refundGas(vmenv.StateDB, txReq, gasUsed, params.RefundQuotient) - } else { - // After EIP-3529: refunds are capped to gasUsed / 5 - s.refundGas(vmenv.StateDB, txReq, gasUsed, params.RefundQuotientEIP3529) - } + //if !rules.IsLondon { + // // Before EIP-3529: refunds were capped to gasUsed / 2 + // s.refundGas(vmenv.StateDB, txReq, gasUsed, params.RefundQuotient) + //} else { + // // After EIP-3529: refunds are capped to gasUsed / 5 + // s.refundGas(vmenv.StateDB, txReq, gasUsed, params.RefundQuotientEIP3529) + //} ctx.ExtraInterface = pd From 323b81ed43b7a5a51feacbf1e6698fbaeb97b4ce Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Wed, 25 Jun 2025 14:11:58 +0800 Subject: [PATCH 05/10] fix Signed-off-by: ReyisaRuby --- evm/eth.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/evm/eth.go b/evm/eth.go index c1676b8..987496a 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -313,11 +313,11 @@ func (s *Solidity) ExecuteTxn(ctx *context.WriteContext) (err error) { } }() - var gasUsed uint64 + //var gasUsed uint64 if txReq.Address == nil { - gasUsed, err = s.executeContractCreation(ctx, txReq, pd, txReq.Origin, coinbase, vmenv, sender, rules) + _, err = s.executeContractCreation(ctx, txReq, pd, txReq.Origin, coinbase, vmenv, sender, rules) } else { - gasUsed, err = s.executeContractCall(ctx, txReq, pd, txReq.Origin, coinbase, vmenv, sender, rules) + _, err = s.executeContractCall(ctx, txReq, pd, txReq.Origin, coinbase, vmenv, sender, rules) } //if !rules.IsLondon { From d4919d692621853d56b75c63d52f43890920b94b Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Wed, 25 Jun 2025 14:24:23 +0800 Subject: [PATCH 06/10] fix Signed-off-by: ReyisaRuby --- evm/eth.go | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/evm/eth.go b/evm/eth.go index 987496a..01b0a72 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -28,7 +28,6 @@ import ( "github.com/yu-org/yu/core/tripod" yu_types "github.com/yu-org/yu/core/types" - "github.com/reddio-com/reddio/config" yuConfig "github.com/reddio-com/reddio/evm/config" "github.com/reddio-com/reddio/evm/pending_state" "github.com/reddio-com/reddio/metrics" @@ -493,7 +492,9 @@ func (s *Solidity) executeContractCreation(ctx *context.WriteContext, txReq *TxR code, address, leftOverGas, err := vmenv.Create(sender, txReq.Input, txReq.GasLimit, uint256.MustFromBig(txReq.Value)) if err != nil { gasUsed, _ := emitReceipt(ctx, vmenv, txReq, code, address, leftOverGas, err) - stateDB.SubBalance(sender.Address(), uint256.NewInt(gasUsed*txReq.GasPrice.Uint64()), tracing.BalanceChangeUnspecified) + fee := new(big.Int).Mul(txReq.GasPrice, new(big.Int).SetUint64(gasUsed)) + gasFeeU256, _ := uint256.FromBig(fee) + stateDB.SubBalance(sender.Address(), gasFeeU256, tracing.BalanceChangeUnspecified) logrus.Errorf("contract creation error, gasUsed:%v, gasLimit:%v, leftOver:%v, price:%v, address:%v", gasUsed, txReq.GasLimit, leftOverGas, txReq.GasPrice, sender.Address().String()) return txReq.GasLimit - leftOverGas, err } @@ -507,21 +508,9 @@ func (s *Solidity) executeContractCall(ctx *context.WriteContext, txReq *TxReque senderBalanceBefore := ethState.GetBalance(sender.Address()) code, leftOverGas, err := vmenv.Call(sender, *txReq.Address, txReq.Input, txReq.GasLimit, uint256.MustFromBig(txReq.Value)) senderBalanceAfterExecute := ethState.GetBalance(sender.Address()) - isPureTransferTxn := false - if IsPureTransfer(sender, txReq, ethState) { - isPureTransferTxn = true - extraTransferGas := config.GlobalConfig.ExtraBalanceGas - if extraTransferGas > txReq.GasLimit { - extraTransferGas = txReq.GasLimit - } - refundFee := new(big.Int).Mul(txReq.GasPrice, new(big.Int).SetUint64(extraTransferGas)) - refundFeeU256, _ := uint256.FromBig(refundFee) - ethState.SubBalance(sender.Address(), refundFeeU256, tracing.BalanceChangeTransfer) - if leftOverGas >= extraTransferGas { - leftOverGas -= extraTransferGas - } else { - leftOverGas = 0 - } + isPureTransferTxn := IsPureTransfer(sender, txReq, ethState) + if isPureTransferTxn { + leftOverGas = txReq.GasLimit } // logrus.Printf("after transfer: account %s balance %d \n", sender.Address(), ethState.GetBalance(sender.Address())) if err != nil { From 3a0d35603390bde6d667ce63782182e2d3198e49 Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Wed, 25 Jun 2025 14:31:21 +0800 Subject: [PATCH 07/10] remove log Signed-off-by: ReyisaRuby --- evm/eth.go | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/evm/eth.go b/evm/eth.go index 01b0a72..40d7bd7 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -495,7 +495,6 @@ func (s *Solidity) executeContractCreation(ctx *context.WriteContext, txReq *TxR fee := new(big.Int).Mul(txReq.GasPrice, new(big.Int).SetUint64(gasUsed)) gasFeeU256, _ := uint256.FromBig(fee) stateDB.SubBalance(sender.Address(), gasFeeU256, tracing.BalanceChangeUnspecified) - logrus.Errorf("contract creation error, gasUsed:%v, gasLimit:%v, leftOver:%v, price:%v, address:%v", gasUsed, txReq.GasLimit, leftOverGas, txReq.GasPrice, sender.Address().String()) return txReq.GasLimit - leftOverGas, err } _, err2 := emitReceipt(ctx, vmenv, txReq, code, address, leftOverGas, err) @@ -505,9 +504,7 @@ func (s *Solidity) executeContractCreation(ctx *context.WriteContext, txReq *TxR func (s *Solidity) executeContractCall(ctx *context.WriteContext, txReq *TxRequest, ethState *pending_state.PendingStateWrapper, origin, coinBase common.Address, vmenv *vm.EVM, sender vm.AccountRef, rules params.Rules) (uint64, error) { ethState.Prepare(rules, origin, coinBase, txReq.Address, vm.ActivePrecompiles(rules), nil) ethState.SetNonce(txReq.Origin, ethState.GetNonce(txReq.Origin)+1) - senderBalanceBefore := ethState.GetBalance(sender.Address()) code, leftOverGas, err := vmenv.Call(sender, *txReq.Address, txReq.Input, txReq.GasLimit, uint256.MustFromBig(txReq.Value)) - senderBalanceAfterExecute := ethState.GetBalance(sender.Address()) isPureTransferTxn := IsPureTransfer(sender, txReq, ethState) if isPureTransferTxn { leftOverGas = txReq.GasLimit @@ -520,13 +517,9 @@ func (s *Solidity) executeContractCall(ctx *context.WriteContext, txReq *TxReque if !isPureTransferTxn { ethState.SubBalance(sender.Address(), uint256.NewInt(0), tracing.BalanceChangeUnspecified) } - logrus.Errorf("contract call error, gasUsed:%v, gasLimit:%v, leftOver:%v, price:%v, isPureTransferTxn:%v, sender:%v", gasUsed, txReq.GasLimit, leftOverGas, txReq.GasPrice, isPureTransferTxn, sender.Address().String()) return gasUsed, err } - senderBalanceAfterExtra := ethState.GetBalance(sender.Address()) - logrus.Printf("contract call balance before:%v ,after execute:%v, after extra:%v, isPure:%v, value:%v, sender:%v,", - senderBalanceBefore.String(), senderBalanceAfterExecute.String(), senderBalanceAfterExtra.String(), isPureTransferTxn, txReq.Value.String(), sender.Address().String()) - + logrus.Infof("contract call balance gasLimit:%v,leftOver:%v,isPure:%v,sender:%v", txReq.GasLimit, leftOverGas, isPureTransferTxn, sender.Address().String()) _, err2 := emitReceipt(ctx, vmenv, txReq, code, common.Address{}, leftOverGas, err) // logrus.Printf("[Execute Txn] SendTx success. Oringin code = %v, Hex Code = %v, Left Gas = %v", code, hex.EncodeToString(code), leftOverGas) return txReq.GasLimit - leftOverGas, err2 From c1613310aaf6370ed9a1d4a1621b91dc4d29fb3f Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Wed, 25 Jun 2025 14:40:07 +0800 Subject: [PATCH 08/10] fix Signed-off-by: ReyisaRuby --- evm/eth.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/evm/eth.go b/evm/eth.go index 40d7bd7..380e5e8 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -492,9 +492,10 @@ func (s *Solidity) executeContractCreation(ctx *context.WriteContext, txReq *TxR code, address, leftOverGas, err := vmenv.Create(sender, txReq.Input, txReq.GasLimit, uint256.MustFromBig(txReq.Value)) if err != nil { gasUsed, _ := emitReceipt(ctx, vmenv, txReq, code, address, leftOverGas, err) - fee := new(big.Int).Mul(txReq.GasPrice, new(big.Int).SetUint64(gasUsed)) - gasFeeU256, _ := uint256.FromBig(fee) - stateDB.SubBalance(sender.Address(), gasFeeU256, tracing.BalanceChangeUnspecified) + //fee := new(big.Int).Mul(txReq.GasPrice, new(big.Int).SetUint64(gasUsed)) + //gasFeeU256, _ := uint256.FromBig(fee) + stateDB.SubBalance(sender.Address(), uint256.NewInt(0), tracing.BalanceChangeUnspecified) + logrus.Errorf("contract creation error, gasUsed:%v, gasLimit:%v, leftOver:%v,sender:%v", gasUsed, txReq.GasLimit, leftOverGas, sender.Address().String()) return txReq.GasLimit - leftOverGas, err } _, err2 := emitReceipt(ctx, vmenv, txReq, code, address, leftOverGas, err) @@ -517,6 +518,7 @@ func (s *Solidity) executeContractCall(ctx *context.WriteContext, txReq *TxReque if !isPureTransferTxn { ethState.SubBalance(sender.Address(), uint256.NewInt(0), tracing.BalanceChangeUnspecified) } + logrus.Errorf("contract call error, gasUsed:%v, gasLimit:%v, leftOver:%v, sender:%v", gasUsed, txReq.GasLimit, leftOverGas, sender.Address().String()) return gasUsed, err } logrus.Infof("contract call balance gasLimit:%v,leftOver:%v,isPure:%v,sender:%v", txReq.GasLimit, leftOverGas, isPureTransferTxn, sender.Address().String()) From d01f127b2c5bf75472932f7acfa7b18551069cd1 Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Wed, 25 Jun 2025 14:45:09 +0800 Subject: [PATCH 09/10] fix Signed-off-by: ReyisaRuby --- evm/eth.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evm/eth.go b/evm/eth.go index 380e5e8..cba1f5d 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -508,7 +508,7 @@ 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)) isPureTransferTxn := IsPureTransfer(sender, txReq, ethState) if isPureTransferTxn { - leftOverGas = txReq.GasLimit + leftOverGas = 0 } // logrus.Printf("after transfer: account %s balance %d \n", sender.Address(), ethState.GetBalance(sender.Address())) if err != nil { From e3f5859b58edc8641825b65a2701cb13c2a631f0 Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Wed, 25 Jun 2025 14:58:11 +0800 Subject: [PATCH 10/10] fix Signed-off-by: ReyisaRuby --- evm/eth.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/evm/eth.go b/evm/eth.go index cba1f5d..d36e18c 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -28,6 +28,7 @@ import ( "github.com/yu-org/yu/core/tripod" yu_types "github.com/yu-org/yu/core/types" + "github.com/reddio-com/reddio/config" yuConfig "github.com/reddio-com/reddio/evm/config" "github.com/reddio-com/reddio/evm/pending_state" "github.com/reddio-com/reddio/metrics" @@ -508,7 +509,7 @@ 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)) isPureTransferTxn := IsPureTransfer(sender, txReq, ethState) if isPureTransferTxn { - leftOverGas = 0 + leftOverGas = txReq.GasLimit - config.GlobalConfig.ExtraBalanceGas } // logrus.Printf("after transfer: account %s balance %d \n", sender.Address(), ethState.GetBalance(sender.Address())) if err != nil {