摘要
簡查看驗證者選擇工具(詳情請參見:
https://w3f.github.io/validator-selection-tool/),這是第一個使用Polkadot-API(詳情請參見:
https://github.com/paritytech/polkadot-api)構建的輕客戶端DApp,基於@jonas領導的獲獎研究(詳情請參見:
https://twitter.com/GehrleinJonas/status/1731971892104311068)。如果你參與在波卡上驗證者的提名,那么這個工具將改變遊戲規則。請繼續閱讀,了解這一成就爲何比最初看起來更有意義。
起源
大約9個月前,Web3基金會的@jonas在Matrix頻道上尋求幫助,計劃开發一款DApp。目標是將他團隊研究的結果轉化爲實際應用程序。我被這個項目的要點所吸引,於是熱切地自告奮勇,但有一個條件:DApp必須專門使用輕客戶端。盡管@jonas滿懷激動,但還是謹慎地告訴我未來會面臨巨大挑战,尤其是需要從區塊鏈中獲取大量數據。我們一致認爲,如果我們能夠在後台高效處理這些數據,同時允許用戶專注於選擇其驗證者偏好,這將是可行的。
我們的計劃就這樣开始了,很幸運Daniel Kalman加入了我們,他在提升用戶體驗(UX)設計方面發揮了關鍵作用。除他之外,我們還得到了研究團隊Grzegorz Miebs的寶貴支持。Grzegorz在處理更爲復雜的任務方面功不可沒,他一絲不苟地开發和構建了必要的數據模型和文件,這個關鍵過程使得我們可以將這些組件無縫集成到DApp中。
面對艱難的數據收集任務,我嘗試了許多策略。即使使用集中式RPC服務器也很有挑战性,但使用輕客戶端則完全是另一種折磨,因爲它存在幾個問題:
1. 最初,在集中式RPC節點上使用Polkadot JS(PJS)還能應付一些問題,但嘗試在輕客戶端提供程序(ScProvider)上復制這種方法卻是一個死胡同。盡管我們嘗試了自定義解決方案,但還是沒有成功。
2. 我很好奇問題是否源自PJS不支持新的JSON-RPC API,於是我轉向了CAPI。難過的是,CAPI不僅與新的JSON-RPC API不兼容,而且即使使用集中式RPC,也無法實現及時的數據收集。盡管我做了很多努力,也咨詢了核心开發人員,但使用CAPI的可行解決方案仍然遙不可及。
3. 通過深入研究輕客戶端的局限性,我發現了smoldot1中的一個bug(詳情請參見:
https://github.com/smol-dot/smoldot/issues/692),阻礙了計算驗證者投票所需的Staking.Nominators關鍵條目的下載。
4. 此外,smoldot的最新API更新允許在WebWorker上運行,但尚未集成到@substrate/connect包中,因此錯過了潛在的改進。
5. 而@substrate/connect擴展由於smoldot不再在後台/服務工作腳本中運行而表現不佳,使得這些工作變得更加復雜。
加上這些挑战,大約八個月前我們面臨了一些困難,努力將“Validator Selector”DApp作爲輕客戶端MVP提供。
以上這些各種各樣的困難基本上就是我們八個月前的狀態,當時我們正努力將"驗證者選擇器"DApp作爲輕客戶端最小化可行產品(MVP)交付。
初版MVP
盡管面臨諸多挑战,我堅持使用輕客戶端與smoldot創建一個真正的去中心化應用程序的決心沒有動搖。爲了證明這一可能性,我使用當時正在探索的實驗性庫unstoppablejs制定了一個臨時解決方案。這種方法雖然更像是一種變通辦法,但卻證明了,只要有適當的工具,基於輕客戶端的全功能DApp是可以實現的。
我們的努力最終促成了這個DApp的一個不錯MVP,並且由@jonas在2023年Polkadot Decoded大會上進行了展示(詳情請參見:
https://www.youtube.com/watch?v=RlYTtC7jIzI)。
這一成就意義重大,但我清楚地意識到,我們還遠遠沒有爲普通的DApp开發者提供制作真正去中心化DApp所需的工具。主要限制包括:
1. 由於smoldot中的錯誤,DApp必須“作弊”以獲取提名者列表,依賴於集中式RPC服務器。
2. 爲了性能優化,我繞過了@substrate/connect包,直接在我的自定義解決方案中將smoldot與WebWorker集成。
3. 該DApp尚未使用來自運行時的動態編解碼器,這限制了它在檢索存儲項目時確定與當前運行時兼容的能力。
4. 應用程序尚未利用新的JSON-RPC API。
5. 允許用戶根據DApp的建議,創建一個extrinsic來更新他們的提名人,這一理想功能尚不可行。
6. 總體而言,整個收集驗證者數據的整個過程都是一個臨時解決方案,其目的更多是作爲概念驗證,而非最終產品。
不過,這一發展階段爲我們开發更完善、真正去中心化的DApp奠定了基礎。
如今
自Decoded2023大會以來,情況發生了巨大變化。活動結束後不久,Parity給到我一個機會,帶領一個包括@matias和@ryan在內的小而專注的團隊。我們的任務雄心勃勃:开發一個以輕客戶端爲先的PJS替代方案。盡管這個機會令人激動,但也意味着我不得不暫停參與“驗證者選擇器”工具的开發。
我之前分享過關於我的團隊在Polkadot-API方面取得的進展的更新(詳情請參見:
https://forum.polkadot.network/t/polkadot-api-2023-q4-update/5318)。不過,我也希望展示一些實實在在的東西,展示過去幾個月我們取得的進展...
最近,我終於騰出時間將“驗證者選擇器”工具的最初的、有點“被遺忘”的MVP遷移到Polkadot-API。就在幾天前完成遷移,這次的結果令人振奮。
遷移的主要亮點包括:
簡化代碼庫:從臨時解決方案過渡到Polkadot-API使代碼庫更易於維護和理解,這一點可以從調整源代碼的提交中得到證明(詳情請參見:
https://github.com/w3f/validator-selection-tool/commit/3c4c9b6162d0420be2cea176eb7772f7bd8e0201)(新增166條,刪除547條)。
- 真正的去中心化:DApp現在完全依賴輕客戶端收集所有數據,消除了以前的臨時解決方法。
- 新的JSON-RPC API集成:所有與輕客戶端的交互現在都通過新的JSON-RPC API進行。
- 動態編解碼器和運行時兼容性:DApp適應運行時變化並驗證與當前運行時的兼容性。
- 爲未來升級做准備:DApp可以爲未來的運行時升級做好准備,就像我們一直做的那樣(詳情請參見:
https://github.com/w3f/validator-selection-tool/commit/3c4c9b6162d0420be2cea176eb7772f7bd8e0201#diff-f1c2d04782f90dd1c903bf15fd7991c1c40165f988fd6530adda49e6aa2e6bc6R7-R17),爲Identity pallet(目前在Rococo可用)的更新進入波卡中繼鏈做好准備。這也使DApp目前與兩個運行時兼容。
- 增強的@substrate/connect利用率:通過對@substrate/connect的改進,現在可以與新的WebWorker API集成,即使在沒有@substrate/connect擴展的情況下,也能確保比過去更好的性能。
- 卓越的开發體驗和性能:類型系統和开發體驗非常先進。軟件包的大小非常緊湊,Lighthouse性能分數前所未有,尤其是對於沒有@substrate/connect擴展的用戶需要額外下載的情況下,這是一項顯著的成就。
- 易於功能集成:在同一個DApp中爲用戶添加更新驗證者提名的新功能現在非常簡單,我計劃很快就實現這一功能。
Lighthouse報告展示了這一顯著的改進:
桌面報告(不含@substrate/connect擴展):
移動報告(不含@substrate/connect擴展名):
這次遷移到Polkadot-API不僅增強了DApp,還幫助發現了Polkadot-SDK節點的JSON-RPC服務器實現中的一個bug(詳情請參見:
https://github.com/paritytech/polkadot-sdk/issues/2992)。這一發現是在與集中式RPC服務器比較數據加載速度時偶然發現的,突顯了我們新方法穩健性和可靠性。
尚待改進
然而,並非一切都完美,有幾個方面仍需改進:
無擴展時的數據加載時間:目前,當未安裝@substrate/connect擴展時,加載所有必要的數據以向用戶呈現結果可能超過一分鐘。實際上,如果用戶完全參與了調查問題,這個時間段可能與他們的完成時間一致。不過,優化這一流程以提高效率的可能性還是很大的。
處理大量數據傳輸:我們遇到一個意想不到挑战是,smoldot在一條信息中爲大約50,000名提名者提供數據。這種方法與預期的漸進式數據交付不同,會導致DApp在同步解碼所有這些提名者時暫時凍結。爲了解決這個問題,我們需要在PAPI中實現更爲優雅的數據處理。此外,我們將與smoldot聯系,討論漸進式傳遞大數據集的可行性,以防止此類問題的發生。
更新驗證者列表:更新驗證者列表的功能仍在开發中。盡管我已經在本地分支上开發了一個原型,但其用戶體驗目前尚不理想。我將會不斷完善這個功能,一旦它達到我們的用戶體驗標准,我將立即用更好的版本更新DApp。
未來可期
項迄今爲止,我們走過了一段非同尋常的旅程。我深信,我們正在通過這些开發工作創造出更好的成果。不過,我發現穩定這些API並提供全面的文檔才是迫切需要。我們充滿活力的社區有必要盡早有機會嘗試這些工具。因此,我們在第一季度末的主要目標是發布@polkadot-api/client的首個Beta版本。此版本將包含基本文檔,使生態系統中的其他人能夠开始探索和使用它。
請幫助我們推動這項工作
正如我在之前的更新中提到的,加速开發Polkadot-API的信心堅定不移。這份信心促使我做出了一個重要的決定:我將在本月底離开Parity。之後我將於與另一位優秀的开發人員Victor Oliva一起,專注於推進Polkadot-API的發展。我們目前正在准備一份OpenGov提案,計劃很快提交。一旦提案准備就緒,我將在這裏與大家分享。你們的支持對我們來說至關重要--因此,我懇請大家對提案投贊成票,以幫助我們維持並推進這項重要工作。
想參與到本文的討論,歡迎到論壇中發表自己的意見:
https://forum.polkadot.network/t/papi-is-coming-showcasing-the-validator-selector-tool-dapp/5756
關於如何參與到論壇的討論中,請參看我們推出的波卡論壇使用指南:
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。