¿La cantidad de gas que cuesta por un txn específico depende del minero del bloque?

La pregunta está arriba. En realidad, veo algunas (pequeñas) fluctuaciones. Sin embargo, al leer los documentos, creo que el gas debe ser constante, siempre que la transacción sea exactamente la misma. ¿Cual es verdad? ¿Echo de menos algo?

Respuestas (2)

La cantidad de gas depende del tamaño de los datos de tx. El gasPrice tx alto tiene prioridad para ser extraído, y el minero eliminará las transacciones no locales por debajo de su propio precio de gas mínimo aceptado. La cantidad de gas se calculará mediante el método IntrinsicGas del archivo fuente st_transaction.go, de la siguiente manera:

func IntrinsicGas(data []byte, contractCreation, homestead bool) *big.Int {
  igas := new(big.Int)
  if contractCreation && homestead {
    igas.SetUint64(params.TxGasContractCreation)
  } else {
    igas.SetUint64(params.TxGas)
  }
  if len(data) > 0 {
    var nz int64
    for _, byt := range data {
      if byt != 0 {
        nz++
      }
    }
    m := big.NewInt(nz)
    m.Mul(m, new(big.Int).SetUint64(params.TxDataNonZeroGas))
    igas.Add(igas, m)
    m.SetInt64(int64(len(data)) - nz)
    m.Mul(m, new(big.Int).SetUint64(params.TxDataZeroGas))
    igas.Add(igas, m)
  }
  return igas
}

Espero que esto ayude ~

¿Qué hay de las funciones que tienen bucles? Entonces, ¿cómo se representa el gas en los datos de txn? ¿Quizás esto es solo el gas intrínseco, y hay otra cantidad de costo de gas por txn?
Sí, tiene usted razón. Para cada instrucción de tipo vm, hay un costo de gas diferente. puede ver 'Asamblea' para el contrato compilado en remix . En el archivo fuente api.go , el método de estimación de gas estimaría el costo del gas, puede ver la lógica de estimación. El costo de operación de cada instrucción de máquina virtual se definió en el archivo jump_table.go. Por ejemplo, agregar operación costará 3 gasolina.

La cantidad de gas para una transacción en particular es fija ya que el costo se basa en las operaciones de la máquina virtual Ethereum (EVM) realizadas en la transacción y esto es determinista . Sin embargo, uno debe pagar por el gas utilizado y esta cantidad depende del remitente. La cantidad por unidad de gas se conoce como precio del gas . Por lo tanto, el precio de una transacción particular es el precio del gas x el gas usado . Es decir, el costo de la transacción, incluso con el mismo código ejecutado, puede variar, dentro de los límites (ver más abajo), y lo establece el remitente de la transacción.

El minero elige qué transacciones incluir en un bloque y una heurística en la que pueden confiar es el precio del gas; presumiblemente, cuanto mayor sea el precio del gas, más probable será que se incluya la transacción. Si el precio del gas para una transacción en particular es demasiado bajo, el minero puede simplemente ignorarlo. Por lo tanto, existe un límite inferior práctico para el precio de transacción. Todavía estoy buscando una respuesta sobre si hay un límite superior en el precio del gas .

Creo que no hay un límite superior implementado. Existe un límite superior práctico, se basa en los clientes (a través de contratos) y los mineros (a través del descarte de txns que tienen un precio de gas sospechosamente alto).