12月17日時,作者在Celestia上要出銘文CIAS,在此臨時趕工寫一個刷銘文的腳本。任務難在資訊難以取得的庫,並對Celestia和其所屬的Cosmos生態以及CIAS的活動有所質疑。然而,面對Cosmos的文檔不全和環境設定問題,作者在當晚簡單測試劇本。雖然取得一些CIAS,但對Celestia網絡的同步問題和銘文成本漲價仍不滿。整體而言,Celestia對高流量和RPC節點配置的問題有疏忽,但在19號出現改善。 Celestia因為是專門為輕節點分散式資料的DA網絡,還未知是否會出現其他問題。
作者:霧月,極客Web3
12月17日時,我知道Celestia上要出銘文CIAS,打算臨時趕工寫一個刷銘文的腳本。現在對於Celestia及其所屬的Cosmos生態,還有CIAS這個本身的活動,我都有挺多想吐槽的。
其實,寫一個快速腳本的腳本並不難,主要分為三個模組:錢包建置、連接節點、泛洪交易。前兩步只需要在目標公鏈的開發者文件裡,就能找到實現的方法。
我先去Celestia官網和Github看了一圈,並沒有針對開發者建立使用者場景的例子,主要都是節點運行等相關的文檔。當然這可以理解,因為Celestia不是ToC的區塊鏈。 Celestia只是在一個不起眼的地方,提到自己是基於Cosmos的,用CosmJS就可以和主網互動。
於是我就直奔CosmJS。但Cosmos也罷,連文檔都做不好。我直接去的Github,照常理說,一般這種JS都會在Github上有使用範例。但它的教程隱藏在一個二中級別頁面裡,並且點進去以後,按照它的配置做一通,最後報錯。
這個報錯還不是環境問題,是因為它的教學沒有緊接著教學版本更新,這個類別名字改了那個調不了等等。我在舊的教學版本上切換了npm函式庫的版本,還是有些例子跑不通,折騰一會就放棄了。
於是又谷歌一番,結果發現正確的文檔在官網而不是Github上,這有點不符合常理。再一次,Github的自述文件更新一下教學指向官網不好嗎?
拿到完成的正確教學後,我迅速完成了錢包建置、連接節點這兩個步驟,開始建立泛洪交易模組。這個模組說簡單了就是一個處理交易簽章+網路請求的循環。但這裡又遇到了衝突上一些問題:
CosmJS庫裡所有的交易方法,都只引發了公開交易本身的參數,但它的序列卻沒有暴露出來(序列類比於以太坊裡的nonce,是為了防止重播攻擊而設定的交易粒子,每筆交易發行後,nonce和sequence都自動+1)。
順序其實是在簽章簽章的速度去連接網路取得(chainId等也是),要經過sendTokens() ->signAndBroadCast ->sign()。每次提交交易都去網路請求等待返回會影響刷的,也會增加沒用的網路請求,對於泛洪是不利的,當然也不利於加速/取消某筆交易。
我們可以回顧下以太坊Web3的發送交易的方法,其中你可以自己指定nonce。但是CosmJS裡不可以。我還是覺得以太坊的設計要合理很多可以,直接指定nonce用於取消/加速交易,如果一筆交易卡住了,你可以自訂一個nonce相同的交易去替代卡住的交易,當然也可以用於我們的泛洪攻擊。
由於修改時間很緊張,還有其他幾個需要修改的庫裡的函數,我決定不使用Proxy去hook重寫了,而是直接在CosmJS庫裡。
腳本觸發泛洪交易的想法是,透過循環不斷的發起交易並產生簽名,發送給RPC節點,發起發起交易後sequence/nonce就+1,發起20筆交易後,再重新循環一個週期。
序列只在每次泛洪週期開始之前,拉取到本地,不一定像CosmJS庫預設的那樣,每次交易後都向節點重新請求迭代序列。而chainId則寫成固定的值,不一定要重複向節點請求。 (編按:這裡的循環次數設定的比較低,顯然還沒有那麼暴力。有人在打Conflux銘文時,曾將每個週期的循環次數改為1000,每分鐘大約發出200筆去不同的交易)
最終,我得到了一個簡陋的Celestia 劇本,12月17日當晚CIAS 拔網後,我簡單地測試了這個劇本,發行了幾筆交易。在12月19日凌晨CIAS 繼續開打後,我確實打到了一些CIAS(大概1800個)。但還是有其他要吐槽的地方:
12月17日,Celestia的RPC節點出現了資料嚴重不同步的問題,不同RPC節點的區塊高度差異很大,當你向節點請求自己帳戶的序列時,回傳的結果基本上不一致,讓人很痛苦。 Celestia區塊瀏覽器也不可用,基本上抓瞎。可以說,此時Celestia網路雖然沒宕機,還能出塊,但估計也快到極限了。當天,CIAS銘文官方眼見Celestia快哭不住了,臨時宣布48460號區塊高度後上鍊的銘文鑄造交易全部無效,頗有“交易所拔網線”之風。而且CIAS自己的網站也崩盤了。
有人認為Cosmos鏈最初的輿論協議,在區塊鏈的輿論方面做的很差,對此不作投資評測,但顯然昨晚CIAS拔網線的目的耐人尋味。 12月17日時,你很難選取一個同步資料最快的節點,因為幾乎所有的RPC節點都被擠爆了,而且經常無回應。我後來嘗試寫了一些自動切換節點的程式碼。 CIAS本身的銘文格式,和其他銘文不太一致,例如brc-20的json裡,所有數字都是字串,而cia-20裡的卻是一個數字。
CIAS銘文的成本昨晚最高時速,漲到了每張1.5~2U,甚至有人懶了80U打了一張銘文。這麼高的手續費反映的就是TPS有限,Celestia創辦人自稱,每秒鐘可以處理10k筆交易,顯然是在談淡。
整體下來,12月17日當晚的體驗就是一句話:Celestia當時肯定沒有應付大規模流量的節奏,在RPC節點配置方面也很敷衍(很難想像1小時能打炸幾十號RPC節點) )。
19號當晚這種情況好了很多,除了gas費飆升之外,其他方面倒沒什麼問題,只能說Celestia作為一個專門給輕節點分佈式數據的DA網絡,暫時性的經受住了考驗,但不知道以後還會不會有什麼其他坑。
資訊來源:0x資訊編譯自網際網路。版權歸作者極客Web3所有,未經許可,不得轉載