mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-16 18:00:46 +00:00
parent
8679a9fc4f
commit
db50cdd311
1 changed files with 29 additions and 3 deletions
|
|
@ -646,9 +646,13 @@ func (ec *Client) FeeHistory(ctx context.Context, blockCount uint64, lastBlock *
|
||||||
}
|
}
|
||||||
|
|
||||||
// EstimateGas tries to estimate the gas needed to execute a specific transaction based on
|
// EstimateGas tries to estimate the gas needed to execute a specific transaction based on
|
||||||
// the current pending state of the backend blockchain. There is no guarantee that this is
|
// the current state of the backend blockchain. There is no guarantee that this is the
|
||||||
// the true gas limit requirement as other transactions may be added or removed by miners,
|
// true gas limit requirement as other transactions may be added or removed by miners, but
|
||||||
// but it should provide a basis for setting a reasonable default.
|
// it should provide a basis for setting a reasonable default.
|
||||||
|
//
|
||||||
|
// Note that the state used by this method is implementation-defined by the remote RPC
|
||||||
|
// server, but it's reasonable to assume that it will either be the pending or latest
|
||||||
|
// state.
|
||||||
func (ec *Client) EstimateGas(ctx context.Context, msg ethereum.CallMsg) (uint64, error) {
|
func (ec *Client) EstimateGas(ctx context.Context, msg ethereum.CallMsg) (uint64, error) {
|
||||||
var hex hexutil.Uint64
|
var hex hexutil.Uint64
|
||||||
err := ec.c.CallContext(ctx, &hex, "eth_estimateGas", toCallArg(msg))
|
err := ec.c.CallContext(ctx, &hex, "eth_estimateGas", toCallArg(msg))
|
||||||
|
|
@ -658,6 +662,28 @@ func (ec *Client) EstimateGas(ctx context.Context, msg ethereum.CallMsg) (uint64
|
||||||
return uint64(hex), nil
|
return uint64(hex), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EstimateGasAtBlock is almost the same as EstimateGas except that it selects the block height
|
||||||
|
// instead of using the remote RPC's default state for gas estimation.
|
||||||
|
func (ec *Client) EstimateGasAtBlock(ctx context.Context, msg ethereum.CallMsg, blockNumber *big.Int) (uint64, error) {
|
||||||
|
var hex hexutil.Uint64
|
||||||
|
err := ec.c.CallContext(ctx, &hex, "eth_estimateGas", toCallArg(msg), toBlockNumArg(blockNumber))
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return uint64(hex), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// EstimateGasAtBlockHash is almost the same as EstimateGas except that it selects the block
|
||||||
|
// hash instead of using the remote RPC's default state for gas estimation.
|
||||||
|
func (ec *Client) EstimateGasAtBlockHash(ctx context.Context, msg ethereum.CallMsg, blockHash common.Hash) (uint64, error) {
|
||||||
|
var hex hexutil.Uint64
|
||||||
|
err := ec.c.CallContext(ctx, &hex, "eth_estimateGas", toCallArg(msg), rpc.BlockNumberOrHashWithHash(blockHash, false))
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return uint64(hex), nil
|
||||||
|
}
|
||||||
|
|
||||||
// SendTransaction injects a signed transaction into the pending pool for execution.
|
// SendTransaction injects a signed transaction into the pending pool for execution.
|
||||||
//
|
//
|
||||||
// If the transaction was a contract creation use the TransactionReceipt method to get the
|
// If the transaction was a contract creation use the TransactionReceipt method to get the
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue