Prior to this change, eth_call changed the balance of the sender account in the EVM environment to 2^256 wei to cover the gas cost of the call execution. We've had this behavior for a long time even though it's super confusing. This commit sets the default call gasprice to zero instead of updating the balance, which is better because it makes eth_call semantics less surprising. Removing the built-in balance assignment also makes balance overrides work as expected.
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							0734c4b820
						
					
				
				
					commit
					39f502329f
				
			@@ -23,7 +23,6 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/ethereum/go-ethereum/accounts"
 | 
						"github.com/ethereum/go-ethereum/accounts"
 | 
				
			||||||
	"github.com/ethereum/go-ethereum/common"
 | 
						"github.com/ethereum/go-ethereum/common"
 | 
				
			||||||
	"github.com/ethereum/go-ethereum/common/math"
 | 
					 | 
				
			||||||
	"github.com/ethereum/go-ethereum/core"
 | 
						"github.com/ethereum/go-ethereum/core"
 | 
				
			||||||
	"github.com/ethereum/go-ethereum/core/bloombits"
 | 
						"github.com/ethereum/go-ethereum/core/bloombits"
 | 
				
			||||||
	"github.com/ethereum/go-ethereum/core/rawdb"
 | 
						"github.com/ethereum/go-ethereum/core/rawdb"
 | 
				
			||||||
@@ -191,7 +190,6 @@ func (b *EthAPIBackend) GetTd(blockHash common.Hash) *big.Int {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (b *EthAPIBackend) GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header) (*vm.EVM, func() error, error) {
 | 
					func (b *EthAPIBackend) GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header) (*vm.EVM, func() error, error) {
 | 
				
			||||||
	state.SetBalance(msg.From(), math.MaxBig256)
 | 
					 | 
				
			||||||
	vmError := func() error { return nil }
 | 
						vmError := func() error { return nil }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	context := core.NewEVMContext(msg, header, b.eth.BlockChain(), nil)
 | 
						context := core.NewEVMContext(msg, header, b.eth.BlockChain(), nil)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,10 +47,6 @@ import (
 | 
				
			|||||||
	"github.com/tyler-smith/go-bip39"
 | 
						"github.com/tyler-smith/go-bip39"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					 | 
				
			||||||
	defaultGasPrice = params.GWei
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// PublicEthereumAPI provides an API to access Ethereum related information.
 | 
					// PublicEthereumAPI provides an API to access Ethereum related information.
 | 
				
			||||||
// It offers only methods that operate on public data that is freely available to anyone.
 | 
					// It offers only methods that operate on public data that is freely available to anyone.
 | 
				
			||||||
type PublicEthereumAPI struct {
 | 
					type PublicEthereumAPI struct {
 | 
				
			||||||
@@ -808,7 +804,7 @@ func DoCall(ctx context.Context, b Backend, args CallArgs, blockNrOrHash rpc.Blo
 | 
				
			|||||||
		log.Warn("Caller gas above allowance, capping", "requested", gas, "cap", globalGasCap)
 | 
							log.Warn("Caller gas above allowance, capping", "requested", gas, "cap", globalGasCap)
 | 
				
			||||||
		gas = globalGasCap.Uint64()
 | 
							gas = globalGasCap.Uint64()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	gasPrice := new(big.Int).SetUint64(defaultGasPrice)
 | 
						gasPrice := new(big.Int)
 | 
				
			||||||
	if args.GasPrice != nil {
 | 
						if args.GasPrice != nil {
 | 
				
			||||||
		gasPrice = args.GasPrice.ToInt()
 | 
							gasPrice = args.GasPrice.ToInt()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,6 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/ethereum/go-ethereum/accounts"
 | 
						"github.com/ethereum/go-ethereum/accounts"
 | 
				
			||||||
	"github.com/ethereum/go-ethereum/common"
 | 
						"github.com/ethereum/go-ethereum/common"
 | 
				
			||||||
	"github.com/ethereum/go-ethereum/common/math"
 | 
					 | 
				
			||||||
	"github.com/ethereum/go-ethereum/core"
 | 
						"github.com/ethereum/go-ethereum/core"
 | 
				
			||||||
	"github.com/ethereum/go-ethereum/core/bloombits"
 | 
						"github.com/ethereum/go-ethereum/core/bloombits"
 | 
				
			||||||
	"github.com/ethereum/go-ethereum/core/rawdb"
 | 
						"github.com/ethereum/go-ethereum/core/rawdb"
 | 
				
			||||||
@@ -168,7 +167,6 @@ func (b *LesApiBackend) GetTd(hash common.Hash) *big.Int {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (b *LesApiBackend) GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header) (*vm.EVM, func() error, error) {
 | 
					func (b *LesApiBackend) GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header) (*vm.EVM, func() error, error) {
 | 
				
			||||||
	state.SetBalance(msg.From(), math.MaxBig256)
 | 
					 | 
				
			||||||
	context := core.NewEVMContext(msg, header, b.eth.blockchain, nil)
 | 
						context := core.NewEVMContext(msg, header, b.eth.blockchain, nil)
 | 
				
			||||||
	return vm.NewEVM(context, state, b.eth.chainConfig, vm.Config{}), state.Error, nil
 | 
						return vm.NewEVM(context, state, b.eth.chainConfig, vm.Config{}), state.Error, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user