評論2020年5月12日Bitcoin SV網絡上的用戶壓力測試

發表時間:2020年5月18日
信息來源:Bitcoinsv.io


在這裏插入圖片描述

背景

從5月12日起,一些用戶在Bitcoin SV網絡上發起了一個公開的壓力測試,並且表示此壓力測試將維持一週。在公開壓力測試的首日,有大約200萬筆低費率交易被廣播至Bitcoin SV網絡。這些交易中大多數交易的費率都在剛好在0.25聰/字節以上,即超過了轉發費率(relay fee)的默認值,這意味着這些交易可以在網絡中進行順利地傳播;但是卻低於交易接受費率(transaction acceptance fee),或可稱爲挖礦費率(mining fee)的0.5聰/字節,意味着絕大多數礦工將不會打包這些交易。這導致了交易在交易內存池不斷積壓,佔用了高達1.7GB的內存。在此請注意,Bitcoin SV節點軟件的默認內存池上限爲1GB,但是許多礦池已經將他們的內存池上限大幅調高了。

這次交易內存池的交易積壓事件剛好發生於BTC區塊獎勵減半後的第一天,減半後有許多BTC礦工轉移至了BSV,使得此前的BSV礦工的算力佔比被稀釋。我們推斷出這一點是因爲很明顯,在5月11日後,BSV網絡上出現了許多1MB的區塊,說明這些從BTC轉移過來的礦工依然使用着BTC挖礦的參數設置。在此情況下,一個我們先前知道的執行0.25聰/字節的交易接受費率的礦池——Mempool由於算力佔比下降,在5月11日之後的日子只挖出了不到1%的區塊,因此無法憑他們一己之力處理完所有積壓的交易。最後,5月12日內存池積壓的交易由TAAL清空,並挖出了一個309MB的大型區塊,創造了新的世界記錄。

網絡影響

Bitcoin SV節點團隊在主網上運行了許多bitcoind程序實例來監控網絡狀態。我們在比特幣全節點(bitcoin daemons)和許多礦工身上看到的情況十分令人鼓舞。在整個交易積壓事件過程中,Bitcoin SV節點軟件始終在操作範圍內運行性能良好。一些內存池默認爲1GB的程序實例沒有保留所有的交易,他們也無需這樣做,但是可以看到他們在觸及1GB上限的時候並沒有降速。我們對這一現象並不意外,因爲此次事件中出現的交易負載量比BSV擴容測試網(STN)上的每日負載低很多。

究意發生了什麼?——轉發費率 VS 交易接受費率

我們必須要瞭解比特幣節點軟件中兩種不同的可設置費率:

  • 轉發費率(relay fee):此費率決定了一個礦工是否接受這個交易進入內存池並向其他礦工廣播此交易。在Bitcoin SV節點軟件中,轉發費率默認設置爲25聰/字節。
  • 交易接受費率/挖礦費率(transaction acceptance (mining) fee):此費率決定了礦池是否接受這個交易並將其打包進入自己正在挖礦的區塊中,交易接受費率默認設置爲5聰/字節。

因此,0.25聰/字節的轉發費率低於0.5聰/字節的交易接受費率。在2019年年底之前,這兩種不同費率的默認值都爲1聰/字節,因此它們之間的功能差異還沒有顯現出來。此外,只要你的交易在發出時沒有被拒絕,那麼它就會被迅速地打包進入區塊。這與BTC網絡上的交易體驗相比有了很大的提升,但依然還有一個顯著的缺點,那就是它沒有給礦工們留下費率競爭的空間。

設想一下,如果大多數礦工將轉發費率和交易接受費率都設置爲1聰/字節,這時有一個礦工願意提供一個更低的費率——0.8聰/字節,礦工當然可以這樣做,但是作爲想利用這個低費率的比特幣用戶,你必須要注意以下兩點:

  • 由於其他礦工將會忽略這類低費率的交易,他們將無法檢測出之後的雙花交易,因此你將失去雙花保護;

  • 由於你的交易將不會被其他礦工轉發(因爲8聰/字節的轉發費率低於其他礦工設置的1聰/字節的轉發費率),所以如果要讓願意接受低費率的礦工得到此交易,你就必須得找到這個礦工的節點,並且使用比特幣的點對點協議直接把交易發送至這個節點。

上述的第二個問題可以用Miner ID和Merchant API解決,Miner ID可以幫助用戶找到礦工API端點,而Merchant API可以爲用戶探測費率並且將交易發送給接受折扣費率的礦工。上述的第一個問題更值得關注,因爲如果我們的出發點將使這種本來具有競爭力的費率下調由於迅速失去效用而失去其競爭力,這會在一開始就形成阻礙競爭的屏障。我們在BCH上就看到了這樣的惡果,BCH的費率在過去的兩年多裏依然一直停滯不前。

將這兩種費率區別開並且在它們中間設定一個差額,我們就可以讓費率競爭成爲可能。與此同時,任何礦工都可以把交易接受費率調至與轉發費率一樣低,這時交易依然會被完全傳播;礦工也可以隨時調低轉發費率以便搶佔市場,但是他們必須知曉這些交易只能由自己打包,而且必須要有一個能夠從內存池清空低費率交易的計劃,比如打包這些交易進入區塊。

但是,如果沒有任何一個礦工打包這些低費率交易,將會出現什麼情況?會不會這些交易堆積如山直至節點內存不足?

不會的!因爲Bitcoin SV節點軟件能夠優雅地處理這種情況:當交易內存池觸及配置的內存上限時,軟件將逐出低費率交易,給新的交易騰出空間。這不會使礦工付出多餘成本,因此他們可以一直維持這種狀態,同時仍然能夠接受符合他們費率要求的所有交易。這與BTC上交易擁堵時的情況截然不同,尤其是以下這一關鍵點:BSV並不會推動交易手續費上升,而是由礦工去設置費率的下限。 在真正的比特幣世界裏,競爭將驅動價格下降,而不是讓交易內存池擁堵,而且用戶應該始終有把握用已知的費率發出一筆可被網絡接受的交易。這可能會創造一個費率市場,鼓勵低費率的交易通過CPFP(Child Pays for Parent)來提升他們的交易手續費,但是費率的提升有一個已知上限,這與BTC上的費率市場是具有本質差異的,

內存池具有內存上限值僅僅是因爲最好不存在回退選擇,但這並不意味着這個上限會被觸及。內存上限被觸及將是極其罕見的情況,原因如下:

  • 礦工通常會有很大的內存池,目前大多數礦工都將內存池設置爲至少8GB,並且在必要的情況下,他們也能相對輕易地實時提升內存容量。

  • 如果你是一個交易發送者,你肯定希望能使用如Merchant API這類礦工服務來確定你發出的交易需要支付多少費用,不然你可能會面臨交易卡在交易內存池數天或者數星期的風險,這時你只能使用CPFP支付來把交易費推高超過費率最低標準,除此之外,你對這筆資產將無能爲力。一旦“費率發現”的操作普及起來或者可以被自動執行,我們應該就不會再看到此類交易在內存池壓積的現象了。屆時,低費率的交易一定是用戶人爲操作試圖進行市場測試或用戶不在意交易確認時長才會出現,而不是系統錯誤導致的。

  • 內存池默認對一筆交易最長的保留時間爲2周(14天),因此內存池不會持續被交易填滿。

  • 在交易內存池過滿的情況下,總會出現某個礦工願意將內存池裏的交易清空,就如同TAAL在5月12日挖出創紀錄的309MB區塊那樣。

  • 礦工們永遠可以強硬地提高轉發費率或拒絕所有低於他們挖礦費率的交易。雖然我們認爲礦工並不願意這樣做,但是如果礦工認爲有人在試圖用大量交易填滿他們的內存池以逼他們降低費率,他們就極有可能反其道而行之,通過提高費率來向攻擊者示範打包哪些交易完全是礦工的自由。

我們需要知道礦工留存這些交易並不是太大的負擔,這並不會導致CPU開銷過大,交易僅僅是在內存池裏靜靜地等着而已。只要礦工們有充足的內存(現在大多數礦工都可以做到這一點),他們就可以根據需要將交易長期留存在內存池裏。儘管如此,Bitcoin SV節點團隊依然有計劃對軟件進行改進,使礦工在此類場景下有更多的選擇。未來,首個選擇就是讓礦工可以將交易轉移至硬盤,而非留在內存中,這將使交易可以依照礦工的意願保留更長時間。其次在礦工的低費率交易逐出政策上,對於那些未達到自己挖礦費率門檻的交易,礦工可以選擇在將其逐出內存池之前保留一小段時間,比如一天。

這一次,爲什麼礦工要干預?

鑑於Bitcoin SV節點軟件終歸可以妥善地處理各類事務,你可能會提出疑問:爲什麼這次礦工不乾脆放任內存池積壓呢?Mempool應該可以最終將這些交易打包的,因爲他們執行着0.25聰/字節的挖礦費率。然而,此次礦工進行干預是因爲一些BSV應用服務開始報錯,於是TAAL決定將內存池清空。另外,BTC減半使很多BTC礦工開始關注BSV,這時也是一個礦工展示自身實力的好時機。

此外,礦工們也認識到逐漸將轉發費率和交易接受費率區分開,並且調整戶用行爲,將會不可避免地帶來“成長之痛”。在比特幣用戶(尤其是交易量大的用戶)能夠適應符合中本聰願景的網絡交互模式之前,必然還會發生一些小插曲,而礦工們則不希望比特幣網絡服務會遭受不必要的中斷。隨着BSV生態系統進一步專業化,我們期待礦工們都能夠依據以下原則更強硬地表明立場:“如果你維護着一個內存池,那麼你需要確保自己能夠處理好它。雖然我能夠做到,但是我沒有義務照顧你的內存池。”

點擊此處閱讀原文


Bitcoin SV節點項目爲比特幣協會所擁有,請前往Bitcoinsv.io網站獲取BSV節點的官方信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章