Gas
退款機制 - 如何以 M$ 費用進行交易?
如此處所述,我目前的理解是,交易成功時將退還未使用的gas(否則已完全消耗)
最近我發現一篇關於一些費用錯誤的文章,導致僅在兩次交易中就花費了超過 500 萬美元的交易費用!
最終我想到了兩個問題:
- 為什麼額外的費用(totalFee - consumeGas)沒有發回給發送者?礦工似乎能夠保留一切。
- 與區塊 Gas 限制相比,如何包含 250 萬美元的交易費?
謝謝
我認為您可能混淆了兩個不同的概念:gas price和gas limit。讓我們澄清一下。
氣體限制
氣體限制是您允許執行交易消耗的最大氣體量。在許多情況下,這可以簡單地留下一個非常大的數字,因為剩餘的氣體(通常)被返回。但是,例如,如果您不信任您使用的某些合約,那麼您可以限制 gas 的數量——這樣惡意/有缺陷的合約就不會花費太多寶貴的 gas。
交易和區塊都有gas限制;您只能影響交易的 gas 限制。區塊氣體限制目前約為 1000 萬,並且只能受礦工影響 - 它不會經常變化。
區塊的gas限制不關心gas價格,它只限制gas的使用量。所以它被用來限制計算量,而不是用於gas的乙太幣總量。因此,如果限制是例如 50 並且您的交易使用 40 天然氣但天然氣價格非常高,則該交易適合在一個區塊內。交易的gas limit也是如此:它只限制計算量,並不關心gas價格。
天然氣價格
Gas 價格是您願意為計算交易所消耗的每單位 Gas 支付的價格。這個數字越高,您為同一筆交易支付的費用就越多。但數字越高,礦工就越有可能將您的交易包含在他們的下一個區塊中,因為礦工可以自己保留這筆費用。因此,在您的範例中,發件人只是使用了非常高的汽油價格。
通常,如果在交易結束時還有多餘的氣體,它會被退回給發送者。但如果交易拋出異常,則不會消耗任何氣體。例外情況應該很少見。可以在此處找到更多資訊:為什麼 Solidity throw 會消耗所有氣體?