区块链接口的去中心化设计探讨
区块链公链,无论是完全去中心化还是有效去中心化,都是设计成基本可信的分布式结构。理论上任何人都无法篡改公链的数据。
公链数据展示方面有没有缺陷呢?能否保证展示出来的数据就是公链可信的数据呢?
这个担忧来自某公链前不久一次接口服务器故障。
为了说明这个问题,先讲一部电影,好像是香港的电影,里面有段内容赌球,刘德华主演,几个人看电视观看比赛结果,然后一个人输了。但其实他们在一起看的电视是被提前做了手脚,并不是真正的现场比赛。现场比赛是正规的比赛,没有人搞假球。
如何保证你看到的比赛就是现场比赛情况呢?这也就是我今天想要说的。
公链数据无法篡改,是真实可靠的。但我用钱包、浏览器(水表)、各种DAPP看到的信息是公链的可信的信息吗?这些应用采集的信息是公链可信的数据吗?
这个公链节点故障,让我认识到公链展示方面需要解决两个问题:1,接口调用的可靠性保障;2,接口调用数据的真实性保障。
先说下接口的可靠性保障,众所周知,区块链的一个特点是不会因某个或某几个节点故障而受影响。通过这次公链故障,了解到该公链接口调用仅仅指向了一个可信节点,这个节点故障后,导致无法读取公链数据。在以往中心化系统中,这种情况是通过切换到热备节点(服务器),保障不会因主节点(主服务器)而影响应用。
所幸的是,该公链设计上的优势,本次故障仅仅影响历史数据展示。几个相关应用也迅速调整策略,改为类似中心化探测故障自动切换正常可信节点的方式得以解决。
然而引申出我第二个担心,就是接口调用数据的真实性保障。
用类似中心化那种热切换方式,可以保证避开故障节点,但如何确保该节点是否可信呢?如果接口调用节点和热切换节点都被黑客攻破,那么是否存在一些隐患呢?攻破区块链51%的节点理论上不可行,但同时攻破两个节点就容易了。
我个人估计所有的区块链还未考虑到这部分,现在还是区块链底层优化阶段。接口这方面还不是目前区块链最重要的部分,所以,我也不班门弄斧了,简单说下我个人不成熟的解决方法作为本文结尾吧:
1,接口调用节点的随机性和热切换的随机性;
2,接口调用采用随机调用多个节点(比如三个),再进行比对方式;
3,接口调用多个节点的策略采用区块链底层的高效率共识方式,比如随机拜占庭。