作者:Sam,独立开发者 来源:X(原推特)@0xmetazen
听了Ordinals的Space,发现不少人对indexer的风险在何处不是很明白,我在这里举个简单的例子:
假设有个黑客,他想要你手上的token A,同时你只接受tokenB来换tokenA,但他又没有tokenB,此时他正好有能力黑掉那个唯一的indexer,并且有能力控制它1个小时,在这一小时里,他先给自己凭空增加了tokenB,然后把tokenB转给你,你在浏览器上也能看到自己有了tokenB,于是放心的把tokenA转给了他,在一个小时结束后,indexer发现机器被入侵,于是重新同步了数据,此时你刷新浏览器发现tokenB没了,tokenA当然也没了。
为什么会发生这种事?原因如下:
1:黑客和你接入了同样的indexer服务器,你和他看到的前端数据始终是一样的,包括被黑前后和被黑的过程
2:黑客给你转的tokenB并未发生在比特币链上(第3条会说另一种情况),它只发生在indexer服务器里,可以是改数据库里面的数据,也可以拦截查询请求,因为此时你是信任这个indexer的,所以看到indexer浏览器更新的数据便认为tokenB的交易已经完成
3:你认为自己是个很谨慎并且很懂链上交易的人,看不到链上实际交易就不会放心,嗯,这个的确比一般人强,但黑客完全可以发一笔链上转tokenB的交易让你去查,并且你去比特币浏览器也能查到,此时你可能会有所疑问,黑客手上都没有tokenB,为什么这笔交易能发成功?原因是比特币网络不同于以太坊,它是不会去执行交易的,只是记录了一个数据,整个合法性校验完全是靠indexer来完成的,而此时indexer已经被黑客控制了,即便黑客根本没有tokenB,他也可以让整个网络看起来这笔交易被合法执行了
4:你发给黑客的tokenA的交易也在链上发生了,并且因为你确实有这么多的tokenA,所以即便indexer发现被黑后进行回滚,你的这笔交易还是会被成功执行
5:看到这里你也许就明白风险点在哪了,就是indexer太少了呗,如果有100个indexer,黑客根本不知道你会用哪个indexer,即便知道了,你也可以随时切换到其它indexer去验证,此时他想黑你的难度就会直线上升,成本高到他不会去想这个事
6:上面说100个indexer只是一种假设,实际会有多少indexer在运行,这要取决于indexer运营商做这件事利润,利润够高自然会去运行,而利润从哪来?给indexer发币作为奖励似乎是可以的,但这个就要起一条新的链了,如果链一下子没有呢,似乎只能靠indexer用流量来覆盖运营成本了,而流量往往聚集在头部,理论上就不可能让100家利益均沾,所以最终还是少数几家会运营indexer,而这让黑客攻击成本也大大降低
7:indexer的问题不是只有比特币有,很多evm链也存在,当链一直运行下去,节点会面临状态爆炸的问题,需要不断添加硬件资源,一旦过了盈亏平衡点,运营商就会关闭节点,以太坊社区为了解决这个问题已经诞生很多项目了
8:因为比特币生态和以太坊生态并不存在冲突关系,所以以太坊上的优秀实践也许今后也能被比特币生态借鉴,当然,这只是可能性,因为两者底层能力完全不同,上层建筑能否照搬是需要深入分析的
以上,仅作技术探讨,如有错误,欢迎指正,不甚感激!