首页 > 其他分享 >为什么跨链这么麻烦

为什么跨链这么麻烦

时间:2022-12-14 09:00:22浏览次数:43  
标签:为什么 网关 跨链 链上 麻烦 中心化 区块 节点

跨链听上去是一个简单的事情

跨链最基础的目标是,某一条链上发生的交易在另一条链上被认可,也就是链二同意链一上发的交易确实发生,然后以此为基础做一些操作,实际上就是链二能接受链一上产生的交易数据。

就单纯的用数据库来说,只需要链二提供接口给链一的客户端查询就可以了,就像支付宝能查到你银行卡里面还有多少钱一样。(当然这个实现得应该也挺复杂的,需要多层的身份认证--支付宝需要认证用户身份,银行需要认证支付宝身份,支付宝还不能拥有用户的银行身份),不过总归是有一个合理的实现。但是,对于区块链就不一样了。

为什么链间的信息交互这么难?

在我看来,原因大概只有一个,区块链是一个去中心化,去信任的机构。

区块链内部本身就是节点间相互不可信的(当一个集体中相互之间都不信任,这时候少数服从多数就是一个很明智的共识,人越多,互不信任的越强,系统就越安全,当然区块链也设计了很多方案防止有个别人注册大量账户,冲大头),所以区块链的信任取决于而大多数节点真实的判断。

如果没有做出真实的判断就有可能受到共识算法中设计的惩罚,所以更多的节点愿意向组织提供真实的数据(这个涉及到区块链的奖励机制),除非有人提供超过奖励机制的钱给大多数节点,形成一个独权结构产生错误的结果。

所以区块链本生是不相信任何单点信息的,也就是说我们大可以在链上设计节点做 spv 验证,但是,来自少数节点的 spv 认证不会被大多数仍可,当然也可以设计成其他节点默认认可,但这将导致少数几个节点成为攻击的对象。

总结一下也就是:最终决定不能是少数节点认可的。

于是乎,最简单的解决方案就是让链上的大多数节点都能作为 spv 验证节点,来解决这个问题,但这样一方面会导致链上节点过于庞大,并且对于收费链来说也将消耗大量代币,

第一个解决方案 btc relay

想法很简单,只要一条链上拥有另外一条链上的全部区块头,那么在链上认证时只需要验证一下默克尔树就可以了,这样每个节点都可以非常简单的认证区块信息。

但这有存在一个问题,谁来提供这个区块头,是一个人提供吗,如果是这不又是单点信任问题了吗?

实际上这个项目最终真的是只有一个人在提供区块头(刚开始的时候人比较多,能在一定程度上做判断,如果有而已提供者也能发现出来),但是是每次向etc写入区块头都要消耗gas(钱),很多relayer放弃。所以在最近两年,最后一个relayer下线,btc relay dead。

btc relay的尝试向我们展示了跨链到底有多难,但他也慢慢暗示了区块链跨链比较大的可能性。

简单分析一下btc relay 给我们什么提示了。

  • 链间不依赖中间方的信息传递几乎是不可能的。

  • 跨连通信并不需要某条链对另外一条链的交易达成共识,只需要一个能证明交易发生的数据即可。但这个数据又有可能存在单点信任问题。

  • 要解决上面提到的单点信任问题,那么向链提供数据的结构就得是个去中心化的机构。

套娃跨链:因为去中心化的去信任关系,那么,这个去中心化的机构与链的数据交互就又需要一个去中心化的机构做桥。

 

网关+中继链

网关+中继的方案是目前比较普遍的方案,向bitxhub就是典型网关+中继,这里目前不做展开,但感觉还是有点问题,如何保证网关不会出现问题呢,如果黑客入侵了某个网关,制作虚假的信息,中继链好像也是判断不出来。

 

预言机跨链

 

后面两部分等我了解更多再写。

但目前可以大概总结一下我的观点

如果能加入网关,那么将会省很多事,网关几乎可以完成所有的链上操作。但网关将会带来一个极大的不确定性,并且网关存在中心化的风险。

我认为网关需要保留,即使他的短板很明显,目前我个人感觉需要处理的是削弱网关的权力,减少网关拥有的权限,比如说对交易进行hash锁定,可以防止网关恶意篡改交易信息。另外还需要增加机制校验网关的忠诚,我个人感觉预言机在这方面可能有用武之地。

 

标签:为什么,网关,跨链,链上,麻烦,中心化,区块,节点
From: https://www.cnblogs.com/bighuyspa/p/16981172.html

相关文章

  • 为什么不建议使用std::thread及解决方法
     使用std::thread创建线程,代码逻辑如果存在某些异常,。这时候程序会产生coredump,但是分析coredump,会发现调用栈是缺失的,造成定位问题困难;问题描述:源码:1#inc......
  • 为什么JAVA文件中只能含有一个Public类?
    为什么JAVA文件中只能含有一个Public类?java程序是从一个public类的main函数开始执行的,(其实是main线程),就像C程序是从main()函数开始执行一样。只能有一个pu......
  • 为什么实例化class报错segmentation fault而指针不会
    问题做单元测试的时候遇到一个奇怪的问题classEvaluator{public:explicitEvaluator(){};//...}Evaluatoreval;//segmentationfalutstd::unique_p......
  • React StrictMode 生命周期为什么会执行两次?
    什么是React.StrictMode?React.StrictMode是在2018年的16.3.0版本中引入的组件。一开始,它只用在类组件中,而在16.8.0中,它对hook同样适用。就像在版本说明中提及......
  • 为什么电脑的时间总是快2分钟
    由于工作需要,今天领到一台新的笔记本,轻轻地抚摸"新伙伴"的同时,发现笔记本的时间,快了2分钟,o((⊙﹏⊙))o表情~~明明已经联网了,为啥还是快两分钟呢?于是我就一顿操作猛如虎,结果一......
  • 为什么总是应该考虑给定 List 的初始大小
    在.Net技术中,使用List<>来存储数据是很常见的。List<>是一个可以动态增长的泛型集合类型,可以存储任何类型的数据。但是,在实际使用中,很多人并不注意给定List<>的初......
  • 为什么感觉自己代码质量变高了
    说一下自己不喜欢的代码是什么样的 1.分层混乱,没有分层概念或者不关注每个层之间的解耦合,没有建立数据模型在每个层级,比如持久化层的模型直接被用到了表现层,然后为了隐......
  • 我们为什么使用Docker
    求生专家贝尔·格里尔斯需要盖一个房子,于是他搬石头、砍木头、画图纸、盖房子。一顿操作,终于把这个房子盖好了。结果,住了一段时间,心血来潮想搬到海边捕捉海牛请亲友吃烧烤......
  • 为什么要学Java并发编程?
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师韦恩001你好,我是韦恩,在Java领域混迹9年有余。相信每一位Java工程师对Java......
  • 圆桌实录 | 为什么不约而同选择了大 Kernel
    在3.19日的“LargeKernelMakesCNNGreatAgain”专题Meetup中,我们组织了一次圆桌讨论,希望能通过讨论一些比较有共性的问题,碰撞出更多新想法。本篇为文字实录,enjoy......