Зависит ли количество газа по конкретному txn от майнера блока?

Вопрос выше. В реальности я вижу некоторые (небольшие) колебания. Однако, почитав документы, я думаю, что газ должен быть постоянным, при условии, что сделка точно такая же. Что является правдой? Я что-то пропустил?

Ответы (2)

Количество газа зависит от размера данных tx. High gasPrice tx имеет приоритет для майнинга, и майнер будет отбрасывать нелокальные транзакции по своей собственной минимально приемлемой цене на газ. Количество газа будет вычислено методом IntrinsicGas исходного файла st_transaction.go следующим образом:

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
}

Надеюсь, это поможет ~

Как насчет функций с циклами? Тогда как газ представлен в данных txn? Возможно, это просто собственный газ, и есть еще одна стоимость газа по txn?
Да, ты прав. Для каждой инструкции типа vm существует разная стоимость газа. вы можете просмотреть «Сборку» для контракта, составленного на ремиксе . В исходном файле api.go метод EstimateGas оценивает стоимость газа, вы можете просмотреть логику оценки. Стоимость каждой операции виртуальной машины была определена в файле jump_table.go. Например, добавление операции будет стоить 3 газа.

Количество газа для конкретной транзакции фиксировано, поскольку стоимость основана на операциях виртуальной машины Ethereum (EVM), выполняемых в транзакции, и это детерминировано . Однако за использованный газ необходимо заплатить, и эта сумма зависит от отправителя. Количество на единицу газа известно как цена газа . Таким образом, цена конкретной транзакции равна цене газа x использованный газ . То есть стоимость транзакции, даже при выполнении одного и того же кода, может варьироваться в определенных пределах (см. ниже) и устанавливается отправителем транзакции.

Майнер выбирает, какую транзакцию (транзакции) включить в блок, и одна из эвристик, на которую он может положиться, — это цена на газ; предположительно, чем выше цена на газ, тем больше вероятность того, что сделка будет включена. Если цена газа для конкретной транзакции слишком низкая, майнер может просто проигнорировать ее. Таким образом, существует практическая нижняя граница цены сделки. Я все еще ищу ответ на вопрос, существует ли верхний предел цены на газ .

Я думаю, что нет реализованного верхнего предела. Практический верхний предел существует, он основан на клиентах (через контракты) и майнерах (через отбрасывание транзакций с подозрительно высокой ценой на газ).