
中繼鏈交易費用和各區塊交易限額
資源使用的限制
設置交易費用
根據時間調整交易費用
前情提要:
前情提要:
在前文Web3研究系列|Polkadot通證經濟學(上),我們詳細闡述了
二級標題
二級標題
正文
中繼鏈交易費用和各區塊交易限額
我們希望在中繼鏈交易上實現的一些屬性如下:
1. 每個中繼鏈區塊都應當給予一定資源,使得塊上請求得到有效處理,即便在功能較弱的節點上也是如此,以避免生成區塊反應時出現的延遲。
2. 中繼鏈狀態(relay chain states)的增長率是受限的。 2'. 如果中繼鏈狀態的絕對大小受限,那就更好了。
3. 每個區塊對具有一定數量都的操作保證了的可用性和高優先級的交易(例如不當行為報告。)
4. 區塊通常遠未被填滿,因此可以有效地處理活動的峰值,而且擁有較短的包含時間。
5. 費用的變化速度足夠緩慢,因此可以在幾分鐘的時間內準確預測特定交易tx的費用
6. 對於任何交易,其交易費用水平要嚴格大於區塊的生產者為運行它而獲得的獎勵。否則,將激勵區塊生產者使用偽造的交易填充區塊。
7. 對於任何交易,足夠高的運行獎勵是區塊生產者的共識,且其獎勵足以激勵包含該交易入塊,但又不足以激勵區塊生產者創建分叉並竊取上一個區塊的交易。
實際上,這意味著由於包含額外交易而感到邊際報酬高於處理它的相應邊際成本,然而,生成完整區塊的總報酬並不比生成空塊的報酬大多少(即使將tips計算在內)。
目前,我們專注於滿足屬性1至6(不包含2'),並保留屬性2'和7進行進一步更新。同時我們還需要對屬性2進行更多分析。
我們可以通過兩種方式來調節中繼鏈塊中處理的交易量:施加限制和調整交易費用水平。我們通過對資源使用施加嚴格的限制來確保滿足上面的屬性1到3,而屬性4到6是通過調整費用來實現的。以下兩個小節分別介紹了這兩種技術。
資源使用的限制
我們確定了處理交易時可能消耗的四種資源:
1.長度:中繼鏈塊中tx的數據大小(以字節為單位),
2. 時間:導入時間(i / o和cpu),
3. 內存:在必要時需運行的內存量
4. 狀態:增加的狀態存儲量。
請注意,與僅消耗一次的其他三個資源不同,狀態存儲在網絡上具有永久成本。因此,對於狀態存儲,我們可以租用或使用其他運行機制,以更好地將費用與交易的實際成本相匹配,並確保狀態大小不受限制。這需要進一步考慮。我們還可以考慮另一種機制,該機制不會對狀態增長施加硬性限制,而是通過收費來控制它;但是,我們(WEB3基金會)更喜歡增加健全的限制制度,以避免狀態變得無法控制的極端情況出現。
可調參量:目前,我們建議在處理區塊時對資源使用進行以下限制。這些參數將通過就目前而言,我們建議在處理塊時對資源使用情況進行以下限制。這些參數將通過基於實際數據或更複雜的機制的治理來進一步調整。
1. 長度:5MB,
2. 時間:2s
3. 內存:10GB
4. 狀態:1MB 增長
原則上,一個交易會消耗其後三個資源的一定數量,具體取決於它的長度,類型,輸入參數和當前狀態。但是,為簡單起見,我們決定針對每種交易類型僅考慮最壞情況的狀態以及其輸入參數的字節長度。因此,我們根據長度,類型和參數長度對交易進行分類,並運行測試(基於最壞情況)以檢查其典型資源使用情況。
目前,我們正在研究一個模型,區塊都能按順序處理每個交易。因此,為了確保上面區塊的內存限制,足以確保每個交易都遵守內存限制。我們確保這一切會如實發生。但是,將來我們可能會考慮並行性。
為了進一步簡化模型,我們將定義交易權重作為一個參數來捕捉交易的佔用時間和狀態增加。具體來說,我們將交易權重定義為其典型時期和狀態使用量的最大值,每個權重均按相應區塊限制的一部分進行衡量。然後,給定一個交易的集合,我們將一方面求它們的長度之和,另一方面求和它們的權重,並且只有在同時遵守兩個限制的情況下,才允許它們在同一塊內。這是對資源使用的硬性約束,必須在每個塊中都要遵守。
我們在資源使用上增加了進一步的限制。我們將“正常”的交易和“可操作” 交易區別開來,後者屬於釣魚人(fisherman)報告的高優先級交易。僅當其長度之和與權重之和均低於相應限制的75%時,才允許在同一塊內收集打包正常交易。這是為了確保每個區塊都有用於可操作交易的保證空間(至少留有25%的資源)。
為有關交易建立的典型資源使用細節。通過審查,長度很容易確定。對於時間和內存的使用,我們為中繼鏈準備了最壞的狀態(導入該交易類型的時間和內存要求應為最大的狀態)。對於給定的交易類型,我們用該狀態下需要花費最長的導入時間來生成1萬筆交易,並且在Wasm環境中測量資源使用的均值和標準差。如果標準差大於平均值的10%,我們將樣本空間增加到10k以上。最後,根據最壞情況的大量交易樣本並通過檢查來提高狀態。
設置交易費用
根據上述模型,我們根據三個參數設置交易費用:交易類型,交易時間長度和權重(已在上文中定義的參數)。這種費用差異用於反映每筆交易產生的資源成本的不同,以此為依據,決定並鼓勵或不鼓勵某些交易市場行為。
如前所述,一部分交易費需要交給區塊生產者,以鼓勵包容性,但不是全部,因此,不鼓勵區塊生產者用虛假的交易填充區塊。為簡單起見,我們最初建議將每筆交易費用的20%交給區塊的生產者,其餘80%交給財政庫。我們注意到,可以為銷毀(burning)設置一個較小的值,但我們選擇不這樣做是為了更好地控制通貨通脹率。將來,我們可以調整該百分比,並且可以由交易類型而定,以鼓勵區塊生產者打包特定的交易類型,而無需調整費用。
其中
其中是與交易無關的參數,它會隨著時間的流逝而變化,具體取決於網絡流量;我們將在下一部分中解釋此參數。參數
僅取決於事務類型;特別是對於業務交易,我們目前將
設置為零。
直觀地說,涵蓋了區塊生產者的處理成本,而
,
涵蓋了正在區塊內處理一筆交易的機會成本而不是在區塊內的另一筆交易。
根據時間調整交易費用
在區塊鏈上,交易需求通常非常不規則。一方面,交易在一天中的數小時或一個月中的數天具有活動高峰。另一方面,存在長期趨勢。考慮到這些因素,我們需要一種能夠隨著時間的推移而自動更新交易費用的機制。根據供求定律,提高費用應減少需求,反之亦然。
為了應對活動高峰,我們需要在迅速提高交易費用或潛在地延長交易包含時間之間進行權衡,這都是不利的影響。我們提出兩種機制。第一個非常迅速地調整價格,其速度與活動的高峰和低谷相同。第二個是按照長期趨勢緩慢調整,並使用小費給用戶提供控制高峰時段等待時間的可能性。我們建議使用帶有提示的慢速調整機制,但要提供兩種機制的完整性的詳細信息。
迅速調整價格
在這種機制下,交易費用會隨時間變化很大,但每個區塊的所有用戶都是固定的(無小費)。
回想一下,我們對塊上允許的所有交易的長度和權重之和設置了硬性限制。我們還設置了第二個硬性限制,這一次是“正常” 交易(非操作性交易)的長度和權重之和,等於第一個限制的75%。
定義:我們將區塊的飽和度水平(相對於正常交易)定義為介於0到1之間的小數s,它描述了正常交易的極限與飽和的距離。明確地說,塊B的飽和度在
的正常長度區間內,正常交易的區塊長度限制為總長度限制的75%,正常權重限制為總權重限制的75%。
可調參量:令s*表示目標區塊飽和度。這是我們預期的區塊飽和度水平的長期平均值(相對於正常交易)。我們最初建議s* = 0.25,以使區塊平均充滿25%,並且系統可以處理的突發峰值高達正常交易平均數量的4倍。可以根據高峰期間觀察到的交易量與平均交易量進行調整,並且通常會在高峰期間會在較高的平均費用,和更長的交易包含時間之間進行權衡。
回想一下,交易費用的計算方式為
與交易無關的。令s為當前區塊的飽和度。如果s> s∗,我們會稍微增加流量,如果s
可調參量:令v為交易費用的變異係數,它控制交易費用調整的速度。我們將從一個區塊更新為如下所示:
的模擬,後者又具有以下屬性:
假設v的值很小,則參數
的相對變化大約與差(ss∗)成正比,即
如果有一段時間內產生了k個區塊,並且平均飽和度是
,則在此期間
參數的相對變化大約與k乘以差值(average-s∗)成正比。
可得
如果有一段時間內產生了k個區塊,並且平均飽和度是
,則在此期間
參數的相對變化大約與k乘以差值(average-s∗)成正比。
可得
例如,假設我們檢測到在高峰時段某些交易必須等待最多k = 20個區塊,如果在此期間費用增加了5%(p = 0.05),我們認為這對用戶並不公平。如果s* = 0.25,則上式給出
在這種機制下,費用在短期內幾乎保持不變,僅適應長期趨勢。我們需要接受這樣一個事實,即在峰值期間,包含時間會很長,並且允許交易包含提示,以建立優先包含的市場。
我們使用與上述相同的公式來更新每個區塊中的交易費用,即
除非我們選擇較小的變異係數v。例如,假設我們希望費用每天最多變化30%,並且一天中產生大約k = 14000個區塊。如果s ∗ = 0.25,那麼我們得到
交易費用被視為基本價格。交易中會有一個不同的字段,稱為“小費(tip)”,用戶可以隨意在其中放入任何數量的通證或將其保留為零。區塊生產者除了獲得標準的20%的費用外,還可以獲得100%的小費,因此,他們有動力將富含大筆小費的交易收之囊中。這種情況下應該有一款軟件可以根據市場情況和交易規模為用戶提供有關小費的實時建議。但大多數情況下,應該沒有提示。
財政庫
該系統需要不斷籌集資金,我們稱之為財政庫(treasury)。這些資金用於支付提供軟件更新,應用全民投票決定的任何更改,調整參數並通常保持系統平穩運行的開發人員的費用。
財政庫資金以兩種方式籌集:
通過鑄造新的通證,但會導致通貨通脹
通過從取消交易費用和罰沒(slashing)通證,否則將被設置為銷毀(burning)。
值得注意的是,這些籌集資金的方法模仿了政府籌集資金的傳統方式:鑄造通貨並以稅收和罰款控制通貨通脹。
我們可以僅通過鑄造新的通證來籌集資金,但是我們認為將來自交易費和罰沒(slashing)的通證重新導流到財政庫是有意義的,否則將被銷毀:
通過這樣做,我們減少了實際銷毀質押(stake burning)的數量,這使我們可以更好地控制通貨通脹率(注意,質押銷毀stake burning會導致通縮,而我們無法控製或預測導致燃燒的事件)
在發生導致大量質押罰沒(stake slashing)的事件之後,如果代碼中存在錯誤或存在有情可原的情況,通常會希望部分償還被罰沒(slashing)的股份。因此,在財政庫中使用DOT,比先銷毀再鑄幣更有意義。
假設有一段時間,由於不當行為或交易費用,導致大量罰沒質押(stake burning)。這個事實表明系統存在問題,需要修復。因此,這恰好是我們需要更多財政資金來支付開發費用並解決問題的時期。
編譯/ 潛行之堯
原文/ WEB3 foundation