code: func (ec *Client) EstimateGas(ctx context.Context, msg ethereum.CallMsg) (uint64, error) {
  	var hex hexutil.Uint64
  	err := ec.c.CallContext(ctx, &hex, "eth_estimateGas", toCallArg(msg))
  	if err != nil {
  		return 0, err
  	}
  	return uint64(hex), nil
  }
docs: // 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 true gas limit requirement as other transactions may be added or removed by miners,
  // but it should provide a basis for setting a reasonable default.