【#區(qū)塊鏈# #寫Celestia腳本后有感:Cosmos很多工作沒搞好#】
作者:霧月,極客Web3
12月17日時,我知道Celestia上要出銘文CIAS,打算臨時趕工寫一個刷銘文的腳本?,F在,對于Celestia及其所在的Cosmos生態(tài),還有CIAS這個活動本身,我都有挺多想吐槽的。
其實,寫一個刷銘文的腳本不難,主要分為三個模塊:錢包構建、連接節(jié)點、泛洪交易。前兩步只需要在目標公鏈的開發(fā)者文檔里,就能找到快速實現的方法。
我先去Celestia官網和Github看了一圈,并沒有面向開發(fā)者build用戶場景的用例,主要都是節(jié)點運行等相關的文檔。當然這可以理解,因為Celestia并不是一個ToC的區(qū)塊鏈。Celestia只是在一個不起眼的地方,提到自己是基于Cosmos的,用CosmJS就可以與其主網交互。
于是我就直奔CosmJS。但Cosmos怎么說呢,連文檔都做不好。我直接去的Github,按常理說,一般這種JS都會在Github上有使用用例。但它的教程隱藏在一個二級頁面里,而且點進去以后,按照它的配置做一通,最后報錯。
這報錯還不是環(huán)境問題,是因為它的教程沒有跟隨教程版本更新,經常這個類名字改了那個調不了等等。我在老的教程版本上切換了npm庫的版本,依然有些用例跑不通,折騰了一會就放棄了。
于是又谷歌了一下,結果發(fā)現正確的文檔在官網而不是Github上,這有點不符合常理。再次,Github的readme更新一下教程指向官網不好嗎?
拿到正確的教程后,我迅速完成了錢包構建、連接節(jié)點這兩個步驟,開始構建泛洪交易模塊。這個模塊說簡單了就是一個處理交易簽名+網絡請求的for循環(huán)。但這里卻又碰上一些問題:
CosmJS庫里所有的交易方法,都只暴露出了交易本身的參數,但它的sequence卻沒有暴露出來(sequence類比于以太坊里的nonce,是為了防止重放攻擊而設置的交易計數器,每筆交易發(fā)出后,nonce和sequence都自動+1)。
Sequence居然是它在sign簽名的時候去連接網絡獲取(chainId等也是),要經過sendTokens() -> signAndBroadCast -> sign()。每次提交交易都去網絡請求等待返回會影響刷的速度,也會增加沒用的網絡請求,對于泛洪是不利的,當然也不利于加速/取消某筆交易。
我們可以回顧下以太坊Web3JS的發(fā)送交易的方法,其中你可以自己指定nonce。但CosmJS里不可以。我還是覺得以太坊的設計要合理很多,可以直接指定nonce用于取消/加速交易,如果一筆交易卡住了,你可以自定義一個nonce相同的交易去替代卡住的交易,當然也可以用于我們的泛洪攻擊。
由于時間很緊張,還有其他幾個需要修改的庫里的函數,我決定不使用Proxy去hook重寫了,而是直接在CosmJS庫里修改。
腳本觸發(fā)泛洪交易的思路是,通過for循環(huán)不斷的發(fā)起交易并生成簽名,發(fā)送給RPC節(jié)點,發(fā)起一筆交易后sequence/nonce就+1,發(fā)起20筆交易后,再重新循環(huán)一個周期。
Sequence只在每次泛洪周期開始前,拉取到本地,不必像CosmJS庫默認的那樣,每次交易后都向節(jié)點重新請求一遍sequence。而chainId則寫成固定的值,不必反復向節(jié)點請求。(編者注:這里的循環(huán)次數設置的比較低,顯然作者還沒那么暴力。某人在打Conflux銘文時,曾將每個周期的循環(huán)次數改為1000,每分鐘差不多發(fā)出去200筆不同的交易)
最終,我得到了一個簡陋的Celestia腳本,12月17日當晚CIAS拔網線后,我簡單測試了一下這個腳本,發(fā)出去了幾百筆交易。在12月19日凌晨CIAS繼續(xù)開打后,我確實打到了一些CIAS(大概1800個)。但還是有其他要吐槽的地方:
12月17日,Celestia的RPC節(jié)點出現了數據嚴重不同步的問題,不同RPC節(jié)點的區(qū)塊高度差異很大,你向節(jié)點請求自己賬戶的Sequence時,返回的結果基本不一致,讓人很痛苦。Celestia區(qū)塊瀏覽器也不可用,基本抓瞎。可以說,此時Celestia網絡雖然沒宕機,還能出塊,但估計也快到極限了。
當天,CIAS銘文官方眼見Celestia快扛不住,臨時宣布48460號區(qū)塊高度后上鏈的銘文鑄造交易全部無效,頗有“交易所拔網線”之風。而且CIAS自己的網站也崩了。
有人認為Cosmos鏈原生的共識協(xié)議,在區(qū)塊的共識方面做的很差,對此不作置評,但顯然昨晚CIAS拔網線的目的耐人尋味。
12月17日時,你很難選中一個同步數據最快的節(jié)點,因為幾乎所有的RPC節(jié)點都被擠爆了,經常無響應。我后來嘗試寫了一些自動切換節(jié)點的代碼。
CIAS本身的銘文格式,和其他銘文不太一致,比如brc-20的json里,所有數字都是字符串,而cia-20里的卻是一個數字。
CIAS銘文的成本昨晚最高時,飆漲到了每張1.5~2U,甚至有人付出了80U打了一張銘文。這么高的手續(xù)費反映的就是TPS有限,Celestia創(chuàng)始人自稱,每秒可以處理10k筆交易,顯然是在扯淡。
總體下來,12月17日當晚的體驗就是一句話:Celestia當時肯定沒做好應對大規(guī)模流量的舉措,在RPC節(jié)點配置方面也很敷衍(很難想象1小時就能打炸幾十號RPC節(jié)點)。
19號當晚這種情況好了很多,除了gas費飆漲之外,其他方面倒沒什么太大問題,只能說Celestia作為一個專門給輕節(jié)點分發(fā)數據的DA網絡,暫時性的經受住了考驗,但不知道以后還會不會有什么別的坑。
相關推薦
相關文章
更多>>資訊排行
同類軟件下載
熱門標簽