StarkNet Alpha 在幾週前登陸了主網,上線初期並沒有應用費用機制,而與L1 交互的gas 成本實際上是由StarkWare 補貼的。我們針對目前StarkNet Alpha 版本提出了一種估算和收取交易費用的方式。
隨著網絡的不斷升級,我們認為網絡計算和收取費用的方式也相應地更新。我們在這裡提出了一個初步的費用計算和收費方法,目的是隨著StarkNet 的發展對其進行完善。了解這些參數有助於構建者在設計他們的StarkNet dApp 時更好地進行規劃。
StarkNet 的交易成本
通常來說,一筆交易的成本由幾個因素決定:
1、數據—— 發送至L1 的數據量:
-
1.1 狀態差異信息
-
1.2 L2 → L1 信息的數量
-
1.3 已消耗的L1 → L2 信息
這些數據都會在不同的StarkNet L1 交易中以call data 的形式發送到L1。
2、計算成本—— 這是針對跟踪步驟(trace steps) 的計費,包括操作系統(OS) 步驟(如係統調用)。包括:
-
L1 證明驗證
-
L2 計算成本(SHARP)
3、存儲成本:在交易執行期間需要進行多少讀/寫操作。
4、交易的L2 網絡傳輸成本:它的調用數據和發出的事件。
目前的費用機制
概括來講,目前的解決方案是讓用戶/應用程序使用定序者(Sequencer) 來估算接受“交易” 所需要花費的成本:
用戶要求一個新的服務(“gas 估算服務,estimate gas service”) 來估算在當前狀態下運行給定“交易” 所需的費用。該服務根據下文中的公式進行估算。這項服務由Sequencer 公開。在內部,它將嘗試根據當前的StarkNet 狀態估算處理該交易所消耗的資源。
正如下文所解釋的,這個估算值將是交易成本的首個粗略的近似值。費用本身將以ETH (支付貨幣) 來指定,而gas 價格作為估算服務的參數提供。
在這一點上,用戶可以選擇是否接受所估算的費用,或標記更高/更低的費用。然後,用戶確定其願意支付的費用並進行簽名,這個簽名也作為交易的一部分被發送到Sequencer 中,以便執行這筆交易並添加到未來的區塊中。
成本公式
對於費用的首個近似值,我們考慮了服務提供商(sequencer 定序者+ prover 證明者) 支付的一些外部成本,如用於數據和計算的L1 gas (上述的第1 和2.1 項)。計算的費用可能包括一個加價,以補償L1 gas 成本的波動。在這一點上,我們忽略了證明創建、存儲操作和網絡的L2 成本(上述的第2.2、3、4 項)。
因此,在這個階段,計算費用的公式將是:
其中:
1、gas_price 是服務中配置的gas 價格,每gas 單位使用多少ETH。這個價格以後可以通過API 查詢。
2、gas_per_byte 是存儲調用數據時單個字節的gas 成本,目前為每個字節16 gas。
3、♯(msgs) 是交易從L2 到L1 發送的信息數量。
4、bytes_per_msg 是消息的字節數。當然,每個消息的字節數都可以不同,所以我們可以使用所有消息的平均消息字節大小。額外的5000 gas 是用來更新一個內部計數器的。
5、♯(state_dif f_items) 是該交易所做的狀態差異的數量。 2⋅31 分別代表每次存儲寫入時需寫入兩個字段元素,每個字段元素由31 個字節組成。
6、gas_per_step 是(L1 上) 單步驗證的一個常數定價。 stepstxn 是該函數執行的步驟數。
注意:該交易費成本的大頭在於L1 數據部分。這包括狀態差異和消息。換句話說,與在L1 上發布數據的成本相比,計算成本可以忽略不計。 (gas_per_step << gas_per_byte)
未來的計劃
這個機制在未來可能會有幾種變化。
首先,我們希望進行一些優化以減少成本。具體來說,當幾筆交易共享相同的證明時,它們也共享一些開銷,因此會降低生產區塊和驗證的成本。在這種情況下,可以對原始交易的估算費用進行一些削減。
引入volition 用於數據可用性(即鏈下數據可用性),從而可以提供另一個節約成本的方式,我們希望將其納入成本估算的因素。為基於L2 的數據所做的存儲修改可能會產生不同的成本。
當網絡變得去中心化時,我們會採用其他機制和市場設計,其中細節目前正在研究中。一個例子是使用“費用拍賣” 模式—— 用戶可以使用不同成本組成的某種線性組合進行付費,並允許sequencer 挑選付費最高的交易。
最後,引入費用抽象將允許網絡參與者使用ETH 以外的代幣進行付費。
來源| community.starknet.io
作者| Lior Schejter