Hängt die Menge an Gaskosten durch einen bestimmten TXN vom Miner des Blocks ab?

Die Frage steht oben. In Wirklichkeit sehe ich einige (kleine) Schwankungen. Beim Lesen der Dokumente denke ich jedoch, dass das Gas konstant sein sollte, vorausgesetzt, die Transaktion ist genau gleich. Was wahr ist? Verpasse ich etwas?

Antworten (2)

Die Gasmenge hängt von der Größe der Daten von tx ab. Der hohe gasPrice tx hat Priorität, abgebaut zu werden, und der Miner wird nicht-lokale Transaktionen unter seinem eigenen minimal akzeptierten Gaspreis fallen lassen. Die Gasmenge wird durch die IntrinsicGas-Methode der Quelldatei st_transaction.go wie folgt berechnet:

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
}

Hoffe das hilft ~

Wie wäre es mit Funktionen mit Schleifen? Wie wird dann das Gas in den txn-Daten dargestellt? Vielleicht ist dies nur das intrinsische Gas, und es gibt eine andere Menge an Gaskosten durch den TXN?
Ja, du hast recht. Für jede Art vm-Anweisung gibt es unterschiedliche Gaskosten. Sie können 'Assembly' für den auf Remix zusammengestellten Vertrag anzeigen . In der api.go- Quelldatei würde die EstimateGas-Methode die Gaskosten schätzen, Sie können die Schätzungslogik anzeigen. Die VM-Operationskosten für jede Anweisung wurden in der Datei jump_table.go definiert . Beispielsweise kostet das Hinzufügen einer Operation 3 Gas.

Die Gasmenge für eine bestimmte Transaktion ist festgelegt, da die Kosten auf den Operationen der Ethereum Virtual Machine (EVM) basieren, die in der Transaktion durchgeführt werden, und dies ist deterministisch . Allerdings muss man für das verbrauchte Gas bezahlen und diese Menge ist Sache des Absenders. Der Betrag pro Gaseinheit wird als Gaspreis bezeichnet . Somit ist der Preis einer bestimmten Transaktion Gaspreis x verbrauchtes Gas . Das heißt, die Kosten der Transaktion können, selbst wenn derselbe Code ausgeführt wird, innerhalb von Grenzen (siehe unten) variieren und werden vom Sender der Transaktion festgelegt.

Der Miner wählt aus, welche Transaktion(en) in einen Block aufgenommen werden sollen, und eine Heuristik, auf die er sich verlassen kann, ist der Gaspreis; Vermutlich wird die Transaktion umso wahrscheinlicher aufgenommen, je höher der Gaspreis ist. Wenn der Gaspreis für eine bestimmte Transaktion zu niedrig ist, kann der Miner ihn einfach ignorieren. Somit gibt es eine praktische Untergrenze für den Transaktionspreis. Ich suche immer noch nach einer Antwort, ob es eine Obergrenze für den Gaspreis gibt .

Ich denke, es gibt keine implementierte Obergrenze. Es gibt eine praktische Obergrenze, die auf Kunden (durch Verträge) und Bergleuten (durch Verwerfen von TXNs mit verdächtig hohen Gaspreisen) basiert.