写 Celestia 脚本后有感:Cosmos 很多工作没搞好

ForesightNews

Cosmos 的 Github 文档都没写好、CosmJS 库很多地方没有优化,我的体验不是很顺畅。

撰文:雾月,极客 Web3

12 月 17 日时,我知道 Celestia 上要出铭文 CIAS,打算临时赶工写一个刷铭文的脚本。现在,对于 Celestia 及其所在的 Cosmos 生态,还有 CIAS 这个活动本身,我都有挺多想吐槽的。

其实,**写一个刷铭文的脚本不难,主要分为三个模块:钱包构建、连接节点、泛洪交易。**前两步只需要在目标公链的开发者文档里,就能找到快速实现的方法。

我先去 Celestia 官网和 Github 看了一圈,并没有面向开发者 build 用户场景的用例,主要都是节点运行等相关的文档。当然这可以理解,**因为 Celestia 并不是一个 ToC 的区块链。**Celestia 只是在一个不起眼的地方,提到自己是基于 Cosmos 的,用 CosmJS 就可以与其主网交互。

于是我就直奔 CosmJS。**但 Cosmos 怎么说呢,连文档都做不好。**我直接去的 Github,按常理说,一般这种 JS 都会在 Github 上有使用用例。但它的教程隐藏在一个二级页面里,而且点进去以后,按照它的配置做一通,最后报错。

**这报错还不是环境问题,是因为它的教程没有跟随教程版本更新,**经常这个类名字改了那个调不了等等。我在老的教程版本上切换了 npm 库的版本,依然有些用例跑不通,折腾了一会就放弃了。

于是又谷歌了一下,**结果发现正确的文档在官网而不是 Github 上,这有点不符合常理。**再次,Github 的 readme 更新一下教程指向官网不好吗?

拿到正确的教程后,我迅速完成了钱包构建、连接节点这两个步骤,**开始构建泛洪交易模块。这个模块说简单了就是一个处理交易签名 + 网络请求的 for 循环。**但这里却又碰上一些问题:

CosmJS 库里所有的交易方法,都只暴露出了交易本身的参数,但它的 sequence 却没有暴露出来(sequence 类比于以太坊里的 nonce,是为了防止重放攻击而设置的交易计数器,每笔交易发出后,nonce 和 sequence 都自动 +1)。

Sequence 居然是它在 sign 签名的时候去连接网络获取(chainId 等也是),要经过 sendTokens() -> signAndBroadCast -> sign()。**每次提交交易都去网络请求等待返回会影响刷的速度,也会增加没用的网络请求,**对于泛洪是不利的,当然也不利于加速 / 取消某笔交易。

我们可以回顾下以太坊 Web3JS 的发送交易的方法,其中你可以自己指定 nonce。但 CosmJS 里不可以。**我还是觉得以太坊的设计要合理很多,可以直接指定 nonce 用于取消 / 加速交易,**如果一笔交易卡住了,你可以自定义一个 nonce 相同的交易去替代卡住的交易,当然也可以用于我们的泛洪攻击。

由于时间很紧张,还有其他几个需要修改的库里的函数,我决定不使用 Proxy 去 hook 重写了,而是直接在 CosmJS 库里修改。

**脚本触发泛洪交易的思路是,**通过 for 循环不断的发起交易并生成签名,发送给 RPC 节点,发起一笔交易后 sequence/nonce 就 +1,发起 20 笔交易后,再重新循环一个周期。

Sequence 只在每次泛洪周期开始前,拉取到本地,**不必像 CosmJS 库默认的那样,每次交易后都向节点重新请求一遍 sequence。**而 chainId 则写成固定的值,不必反复向节点请求。(编者注:这里的循环次数设置的比较低,显然作者还没那么暴力。某人在打 Conflux 铭文时,曾将每个周期的循环次数改为 1000,每分钟差不多发出去 200 笔不同的交易)

最终,我得到了一个简陋的 Celestia 脚本,12 月 17 日当晚 CIAS 拔网线后,我简单测试了一下这个脚本,发出去了几百笔交易。在 12 月 19 日凌晨 CIAS 继续开打后,我确实打到了一些 CIAS(大概 1800 个)。但还是有其他要吐槽的地方:

  • **12 月 17 日,Celestia 的 RPC 节点出现了数据严重不同步的问题,**不同 RPC 节点的区块高度差异很大,你向节点请求自己账户的 Sequence 时,返回的结果基本不一致,让人很痛苦。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 网络,暂时性的经受住了考验,但不知道以后还会不会有什么别的坑。

Disclaimer: The information on this page may come from third parties and does not represent the views or opinions of Gate. The content displayed on this page is for reference only and does not constitute any financial, investment, or legal advice. Gate does not guarantee the accuracy or completeness of the information and shall not be liable for any losses arising from the use of this information. Virtual asset investments carry high risks and are subject to significant price volatility. You may lose all of your invested principal. Please fully understand the relevant risks and make prudent decisions based on your own financial situation and risk tolerance. For details, please refer to Disclaimer.
Comment
0/400
No comments