作為處理區塊鏈交易的 DApp 開發者,有效估算簡單和複雜交易的交易費用至關重要。以下是基於提供的文章的專業簡潔摘要,重點關注 TON 區塊鏈,但也涉及 Ethereum:

Ethereum vs TON Gas 管理

  • Ethereum:

    • 低 Gas: 如果 gas 太低,交易會回退,gas 不會退還。
    • 足夠 Gas: 實際成本自動計算並扣除。
  • TON:

    • Gas 不足: 部分交易執行。
    • 過量 Gas: 開發者有責任退還。
    • 非同步性質: TON 無法自動計算,因為交易完成可能延遲且使用者餘額波動。

在 TON 中估算 Gas

  1. 識別入口點: 檢查訊息流的入口點。
  2. 處理器成本估算: 估算每個處理器的成本。
  3. 檢查 msg_value: 確保入口點的 msg_value 足夠。
  4. 避免過度需求: 不要統一要求高 gas(例如 1 TON);根據預期操作按比例分配 gas。

Gas 估算的複雜性

  • 開發變更: 如果您的合約的訊息發送行為發生變化,請更新 gas 需求。

退還過量 Gas

  • 資金累積: 未退還的過量 gas 會在合約中累積。
  • 標準做法: 實作一個函數來退還過量(例如 TON Jetton 中的 op::excesses)。

TON 中的機制

  • 轉發剩餘 Gas: 對於線性訊息流使用 SEND_MODE_CARRY_ALL_REMAINING_MESSAGE_VALUE
  • 例外情況: 在以下情況下避免使用此模式:
    • 合約操作減少餘額,而非 msg_value
    • storage_fee 耗盡合約餘額。
    • 發送事件或為訊息附加價值會減少合約餘額。

在 TON 中計算 Gas 成本

  • 來自 TON Wallet 的範例:
    • 考慮 storage_feeconst::gas_consumption
    • 調整 msg_value 以支付這些費用和轉發 ton 金額。
    • 退還剩餘的 msg_value 以防止部分執行。

總結

  • 開發者責任: 主動管理 gas,考慮整個交易過程。
  • 成本潛在增加: 監控「無界資料結構」的使用。
  • 退還過量: 對於有效的 gas 管理至關重要。
  • 部分執行風險: 如果 gas 耗盡,這是一個關鍵問題。

區塊鏈交易費用

  • 經濟模型: 驗證者以區塊鏈的代幣獲得補償(例如 TON 區塊鏈中的 TON coin)。
  • Gas 類比: 交易執行所必需的,類似於汽車的燃料。
  • 使用者交易: 需要支付 gas,透過錢包簽名授權。
方面 Ethereum TON (The Open Network)
低 Gas 時的 Gas 管理 交易回退,gas 不會退還。 交易部分執行。
足夠 Gas 時的 Gas 管理 實際成本自動計算並扣除。 必須退還過量 gas;責任在於開發者。
自動 Gas 計算 由於同步性質而自動。 由於非同步性質和波動的使用者餘額而不是自動的。
估算 Gas 成本 對合約開發者來說不是主要問題;使用者承擔責任。 開發者需要估算每個處理器的成本並檢查入口點 msg_value 的充足性。
Gas 過量管理 不適用,因為過量 gas 會自動處理。 如果不退還,過量 gas 會在合約中累積;建議實踐退還過量。
特殊機制 不適用於處理 gas 過量。 用於線性訊息流的 SEND_MODE_CARRY_ALL_REMAINING_MESSAGE_VALUE,但有例外。
Gas 扣除 從使用者提供的 gas 中扣除。 在某些操作中從合約餘額扣除(例如發送事件、為訊息附加價值)。
處理複雜交易 由於同步執行和自動 gas 計算而簡化。 需要仔細規劃和根據合約行為變化進行調整。
部分執行風險 不適用,因為交易要麼完全完成要麼回退。 一個關鍵問題;如果 gas 耗盡可能發生。

總之,在 TON 中估算交易費用需要仔細評估訊息流、處理器成本,以及考慮區塊鏈的非同步和分散性質來主動管理 gas。確保有效使用 gas 和退還過量是最佳合約運作的關鍵實踐。