hao86下載站:值得大家信賴的游戲下載站!

首頁 > 區(qū)塊鏈 > 寫 Celestia 腳本后有感:Cosmos 很多工作沒搞好

寫 Celestia 腳本后有感:Cosmos 很多工作沒搞好

時間:2023-12-19 21:49:11
來源:hao86下載
區(qū)塊鏈

【#區(qū)塊鏈# #寫 Celestia 腳本后有感:Cosmos 很多工作沒搞好#】

Cosmos 的 Github 文檔都沒寫好、CosmJS 庫很多地方?jīng)]有優(yōu)化,我的體驗不是很順暢。


撰文:霧月,極客 Web3


12 月 17 日時,我知道 Celestia 上要出銘文 CIAS,打算臨時趕工寫一個刷銘文的腳本?,F(xiàn)在,對于 Celestia 及其所在的 Cosmos 生態(tài),還有 CIAS 這個活動本身,我都有挺多想吐槽的。


其實,寫一個刷銘文的腳本不難,主要分為三個模塊:錢包構(gòu)建、連接節(jié)點、泛洪交易。前兩步只需要在目標(biāo)公鏈的開發(fā)者文檔里,就能找到快速實現(xiàn)的方法。


我先去 Celestia 官網(wǎng)和 Github 看了一圈,并沒有面向開發(fā)者 build 用戶場景的用例,主要都是節(jié)點運行等相關(guān)的文檔。當(dāng)然這可以理解,因為 Celestia 并不是一個 ToC 的區(qū)塊鏈。Celestia 只是在一個不起眼的地方,提到自己是基于 Cosmos 的,用 CosmJS 就可以與其主網(wǎng)交互。


于是我就直奔 CosmJS。但 Cosmos 怎么說呢,連文檔都做不好。我直接去的 Github,按常理說,一般這種 JS 都會在 Github 上有使用用例。但它的教程隱藏在一個二級頁面里,而且點進(jìn)去以后,按照它的配置做一通,最后報錯。


這報錯還不是環(huán)境問題,是因為它的教程沒有跟隨教程版本更新,經(jīng)常這個類名字改了那個調(diào)不了等等。我在老的教程版本上切換了 npm 庫的版本,依然有些用例跑不通,折騰了一會就放棄了。


于是又谷歌了一下,結(jié)果發(fā)現(xiàn)正確的文檔在官網(wǎng)而不是 Github 上,這有點不符合常理。再次,Github 的 readme 更新一下教程指向官網(wǎng)不好嗎?


拿到正確的教程后,我迅速完成了錢包構(gòu)建、連接節(jié)點這兩個步驟,開始構(gòu)建泛洪交易模塊。這個模塊說簡單了就是一個處理交易簽名 + 網(wǎng)絡(luò)請求的 for 循環(huán)。但這里卻又碰上一些問題:


CosmJS 庫里所有的交易方法,都只暴露出了交易本身的參數(shù),但它的 sequence 卻沒有暴露出來(sequence 類比于以太坊里的 nonce,是為了防止重放攻擊而設(shè)置的交易計數(shù)器,每筆交易發(fā)出后,nonce 和 sequence 都自動 +1)。



Sequence 居然是它在 sign 簽名的時候去連接網(wǎng)絡(luò)獲取(chainId 等也是),要經(jīng)過 sendTokens() -> signAndBroadCast -> sign()。每次提交交易都去網(wǎng)絡(luò)請求等待返回會影響刷的速度,也會增加沒用的網(wǎng)絡(luò)請求,對于泛洪是不利的,當(dāng)然也不利于加速 / 取消某筆交易。



我們可以回顧下以太坊 Web3JS 的發(fā)送交易的方法,其中你可以自己指定 nonce。但 CosmJS 里不可以。我還是覺得以太坊的設(shè)計要合理很多,可以直接指定 nonce 用于取消 / 加速交易,如果一筆交易卡住了,你可以自定義一個 nonce 相同的交易去替代卡住的交易,當(dāng)然也可以用于我們的泛洪攻擊。



由于時間很緊張,還有其他幾個需要修改的庫里的函數(shù),我決定不使用 Proxy 去 hook 重寫了,而是直接在 CosmJS 庫里修改。


腳本觸發(fā)泛洪交易的思路是,通過 for 循環(huán)不斷的發(fā)起交易并生成簽名,發(fā)送給 RPC 節(jié)點,發(fā)起一筆交易后 sequence/nonce 就 +1,發(fā)起 20 筆交易后,再重新循環(huán)一個周期。


Sequence 只在每次泛洪周期開始前,拉取到本地,不必像 CosmJS 庫默認(rèn)的那樣,每次交易后都向節(jié)點重新請求一遍 sequence。而 chainId 則寫成固定的值,不必反復(fù)向節(jié)點請求。(編者注:這里的循環(huán)次數(shù)設(shè)置的比較低,顯然作者還沒那么暴力。某人在打 Conflux 銘文時,曾將每個周期的循環(huán)次數(shù)改為 1000,每分鐘差不多發(fā)出去 200 筆不同的交易)



最終,我得到了一個簡陋的 Celestia 腳本,12 月 17 日當(dāng)晚 CIAS 拔網(wǎng)線后,我簡單測試了一下這個腳本,發(fā)出去了幾百筆交易。在 12 月 19 日凌晨 CIAS 繼續(xù)開打后,我確實打到了一些 CIAS(大概 1800 個)。但還是有其他要吐槽的地方:


  • 12 月 17 日,Celestia 的 RPC 節(jié)點出現(xiàn)了數(shù)據(jù)嚴(yán)重不同步的問題,不同 RPC 節(jié)點的區(qū)塊高度差異很大,你向節(jié)點請求自己賬戶的 Sequence 時,返回的結(jié)果基本不一致,讓人很痛苦。Celestia 區(qū)塊瀏覽器也不可用,基本抓瞎。可以說,此時 Celestia 網(wǎng)絡(luò)雖然沒宕機,還能出塊,但估計也快到極限了。
  • 當(dāng)天,CIAS 銘文官方眼見 Celestia 快扛不住,臨時宣布 48460 號區(qū)塊高度后上鏈的銘文鑄造交易全部無效,頗有「交易所拔網(wǎng)線」之風(fēng)。而且 CIAS 自己的網(wǎng)站也崩了。



  • 有人認(rèn)為 Cosmos 鏈原生的共識協(xié)議,在區(qū)塊的共識方面做的很差,對此不作置評,但顯然昨晚 CIAS 拔網(wǎng)線的目的耐人尋味。
  • 12 月 17 日時,你很難選中一個同步數(shù)據(jù)最快的節(jié)點,因為幾乎所有的 RPC 節(jié)點都被擠爆了,經(jīng)常無響應(yīng)。我后來嘗試寫了一些自動切換節(jié)點的代碼。
  • CIAS 本身的銘文格式,和其他銘文不太一致,比如 brc-20 的 json 里,所有數(shù)字都是字符串,而 cia-20 里的卻是一個數(shù)字。



  • CIAS 銘文的成本昨晚最高時,飆漲到了每張 1.5~2U,甚至有人付出了 80U 打了一張銘文。這么高的手續(xù)費反映的就是 TPS 有限,Celestia 創(chuàng)始人自稱,每秒可以處理 10k 筆交易,顯然是在扯淡。



總體下來,12 月 17 日當(dāng)晚的體驗就是一句話:Celestia 當(dāng)時肯定沒做好應(yīng)對大規(guī)模流量的舉措,在 RPC 節(jié)點配置方面也很敷衍(很難想象 1 小時就能打炸幾十號 RPC 節(jié)點)。


19 號當(dāng)晚這種情況好了很多,除了 gas 費飆漲之外,其他方面倒沒什么太大問題,只能說 Celestia 作為一個專門給輕節(jié)點分發(fā)數(shù)據(jù)的 DA 網(wǎng)絡(luò),暫時性的經(jīng)受住了考驗,但不知道以后還會不會有什么別的坑。

小編推薦下載

相關(guān)文章

更多>>

同類軟件下載