99ri日韩国产,日韩国产欧美另类,亚洲ⅴa在线va天堂va,青青青亚洲视频

    
    

    <th id="crsrf"><progress id="crsrf"><listing id="crsrf"></listing></progress></th>
    當(dāng)前位置:區(qū)塊鏈 >區(qū)塊鏈 > 寫Celestia腳本后有感:Cosmos很多工作沒搞好

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

    更新時(shí)間:2023-12-19 22:25:59 | 作者:佚名
    作者:霧月,極客Web3 12月17日時(shí),我知道Celestia上要出銘文CIAS,打算臨時(shí)趕工寫一個(gè)刷銘文的腳本?,F(xiàn)在,對(duì)于Celestia及其所在的Cosmos生態(tài),還有CIAS這個(gè)活動(dòng)本身,我都有挺多想吐槽的。 其實(shí),寫一個(gè)刷銘文的腳本不難,主要分為三個(gè)模塊:錢包構(gòu)建、連接節(jié)點(diǎn)、泛洪交易。前兩步只需要在目標(biāo)公鏈的開發(fā)者文檔里,就能找到快速實(shí)現(xiàn)的方法。...

    作者:霧月,極客Web3

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

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

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

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

    這報(bào)錯(cuò)還不是環(huán)境問題,是因?yàn)樗慕坛虥]有跟隨教程版本更新,經(jīng)常這個(gè)類名字改了那個(gè)調(diào)不了等等。我在老的教程版本上切換了npm庫的版本,依然有些用例跑不通,折騰了一會(huì)就放棄了。

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

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

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

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

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

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

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

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

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

    • 12月17日,Celestia的RPC節(jié)點(diǎn)出現(xiàn)了數(shù)據(jù)嚴(yán)重不同步的問題,不同RPC節(jié)點(diǎn)的區(qū)塊高度差異很大,你向節(jié)點(diǎn)請求自己賬戶的Sequence時(shí),返回的結(jié)果基本不一致,讓人很痛苦。Celestia區(qū)塊瀏覽器也不可用,基本抓瞎。可以說,此時(shí)Celestia網(wǎng)絡(luò)雖然沒宕機(jī),還能出塊,但估計(jì)也快到極限了。

    • 當(dāng)天,CIAS銘文官方眼見Celestia快扛不住,臨時(shí)宣布48460號(hào)區(qū)塊高度后上鏈的銘文鑄造交易全部無效,頗有“交易所拔網(wǎng)線”之風(fēng)。而且CIAS自己的網(wǎng)站也崩了。

    • 有人認(rèn)為Cosmos鏈原生的共識(shí)協(xié)議,在區(qū)塊的共識(shí)方面做的很差,對(duì)此不作置評(píng),但顯然昨晚CIAS拔網(wǎng)線的目的耐人尋味。

    • 12月17日時(shí),你很難選中一個(gè)同步數(shù)據(jù)最快的節(jié)點(diǎn),因?yàn)閹缀跛械腞PC節(jié)點(diǎn)都被擠爆了,經(jīng)常無響應(yīng)。我后來嘗試寫了一些自動(dòng)切換節(jié)點(diǎn)的代碼。

    • CIAS本身的銘文格式,和其他銘文不太一致,比如brc-20的json里,所有數(shù)字都是字符串,而cia-20里的卻是一個(gè)數(shù)字。

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

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

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

    本站提醒:投資有風(fēng)險(xiǎn),入市須謹(jǐn)慎,本內(nèi)容不作為投資理財(cái)建議。