From 257db93fe47184cfffc7a4495df8d70d7ccb2bba Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Tue, 24 Jun 2025 10:19:56 +0800 Subject: [PATCH 1/4] fix Signed-off-by: ReyisaRuby --- evm/eth.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/evm/eth.go b/evm/eth.go index af5be2e..875abee 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -493,8 +493,18 @@ 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 { + extraTransferGas := config.GlobalConfig.ExtraBalanceGas + if extraTransferGas > txReq.GasLimit { + extraTransferGas = txReq.GasLimit + } + stateDB.SubBalance(sender.Address(), uint256.NewInt(extraTransferGas*txReq.GasPrice.Uint64()), tracing.BalanceChangeUnspecified) + if leftOverGas >= extraTransferGas { + leftOverGas -= extraTransferGas + } else { + leftOverGas = 0 + } _ = emitReceipt(ctx, vmenv, txReq, code, address, leftOverGas, err) - return 0, err + return leftOverGas, err } return txReq.GasLimit - leftOverGas, emitReceipt(ctx, vmenv, txReq, code, address, leftOverGas, err) From a16aa007963cb2d1e1bdefd11cad8ace7045b259 Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Tue, 24 Jun 2025 11:33:12 +0800 Subject: [PATCH 2/4] fix Signed-off-by: ReyisaRuby --- evm/eth.go | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/evm/eth.go b/evm/eth.go index 875abee..1034781 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -493,21 +493,12 @@ 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 { - extraTransferGas := config.GlobalConfig.ExtraBalanceGas - if extraTransferGas > txReq.GasLimit { - extraTransferGas = txReq.GasLimit - } - stateDB.SubBalance(sender.Address(), uint256.NewInt(extraTransferGas*txReq.GasPrice.Uint64()), tracing.BalanceChangeUnspecified) - if leftOverGas >= extraTransferGas { - leftOverGas -= extraTransferGas - } else { - leftOverGas = 0 - } - _ = emitReceipt(ctx, vmenv, txReq, code, address, leftOverGas, err) + gasUsed, _ := emitReceipt(ctx, vmenv, txReq, code, address, leftOverGas, err) + logrus.Infof("gasUsed:%v, leftOver:%v, gasLimit:%v", gasUsed, leftOverGas, txReq.GasLimit) return leftOverGas, err } - - return txReq.GasLimit - leftOverGas, emitReceipt(ctx, vmenv, txReq, code, address, leftOverGas, err) + _, err2 := emitReceipt(ctx, vmenv, txReq, code, address, leftOverGas, err) + return txReq.GasLimit - leftOverGas, err2 } 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) { @@ -533,11 +524,12 @@ func (s *Solidity) executeContractCall(ctx *context.WriteContext, txReq *TxReque if err != nil { // byt, _ := json.Marshal(txReq) // logrus.Printf("[Execute Txn] SendTx Failed. err = %v. Request = %v", err, string(byt)) - _ = emitReceipt(ctx, vmenv, txReq, code, common.Address{}, leftOverGas, err) + _, _ = emitReceipt(ctx, vmenv, txReq, code, common.Address{}, leftOverGas, err) return 0, err } + _, 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, emitReceipt(ctx, vmenv, txReq, code, common.Address{}, leftOverGas, err) + return txReq.GasLimit - leftOverGas, err2 } func IsPureTransfer(sender vm.AccountRef, txReq *TxRequest, ethState *pending_state.PendingStateWrapper) bool { @@ -778,16 +770,16 @@ func (s *Solidity) GetReceipts(ctx *context.ReadContext) { ctx.JsonOk(&ReceiptsResponse{Receipts: want}) } -func emitReceipt(ctx *context.WriteContext, vmEmv *vm.EVM, txReq *TxRequest, code []byte, contractAddr common.Address, leftOverGas uint64, err error) error { +func emitReceipt(ctx *context.WriteContext, vmEmv *vm.EVM, txReq *TxRequest, code []byte, contractAddr common.Address, leftOverGas uint64, err error) (uint64, error) { evmReceipt := makeEvmReceipt(ctx, vmEmv, code, ctx.Txn, ctx.Block, contractAddr, leftOverGas, err) var buf bytes.Buffer encodeErr := json.NewEncoder(&buf).Encode(evmReceipt) if encodeErr != nil { logrus.Errorf("Receipt marshal err: %v. Tx: %s", encodeErr, txReq.Hash.String()) - return encodeErr + return 0, encodeErr } ctx.EmitExtra(buf.Bytes()) - return nil + return evmReceipt.GasUsed, nil } // endregion ---- Tripod Api ---- From 6ec49fd4c8468ab20e9f49a886cb99d07873bc01 Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Tue, 24 Jun 2025 12:05:41 +0800 Subject: [PATCH 3/4] 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 1034781..c54f387 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -494,7 +494,8 @@ 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) - logrus.Infof("gasUsed:%v, leftOver:%v, gasLimit:%v", gasUsed, leftOverGas, txReq.GasLimit) + stateDB.SubBalance(sender.Address(), uint256.NewInt(gasUsed*txReq.GasPrice.Uint64()), tracing.BalanceChangeUnspecified) + logrus.Infof("gasUsed:%v, leftOver:%v, gasLimit:%v, price:%v", gasUsed, leftOverGas, txReq.GasLimit, txReq.GasPrice) return leftOverGas, err } _, err2 := emitReceipt(ctx, vmenv, txReq, code, address, leftOverGas, err) From 11f90fda1de795b8a83007583a92b5f449e99cac Mon Sep 17 00:00:00 2001 From: ReyisaRuby Date: Tue, 24 Jun 2025 12:13:45 +0800 Subject: [PATCH 4/4] fix Signed-off-by: ReyisaRuby --- evm/eth.go | 1 - 1 file changed, 1 deletion(-) diff --git a/evm/eth.go b/evm/eth.go index c54f387..fccb1b8 100644 --- a/evm/eth.go +++ b/evm/eth.go @@ -495,7 +495,6 @@ func (s *Solidity) executeContractCreation(ctx *context.WriteContext, txReq *TxR if err != nil { gasUsed, _ := emitReceipt(ctx, vmenv, txReq, code, address, leftOverGas, err) stateDB.SubBalance(sender.Address(), uint256.NewInt(gasUsed*txReq.GasPrice.Uint64()), tracing.BalanceChangeUnspecified) - logrus.Infof("gasUsed:%v, leftOver:%v, gasLimit:%v, price:%v", gasUsed, leftOverGas, txReq.GasLimit, txReq.GasPrice) return leftOverGas, err } _, err2 := emitReceipt(ctx, vmenv, txReq, code, address, leftOverGas, err)