位置:编程技术网 > 研发管理 > 正文 >

跨区块链原子互换(Atomic swap)

2019年02月23日 20:50来源:未知手机版

总裁别再追我了,深圳自贸区概念股,兖矿集团网,30万左右的越野车,什么是dns服务器,王佳佳

Atomic swap:不经由第三方完成的安全可靠的跨区块链交易

因为加密货币交易所不时传出被骇客攻击、被冻结、甚至卷款倒闭的事情,人们开始意识到把钱放在交易所的大金库其实是不太安全的,也有一些去中心化交易所的方案被提出来,试着在保障使用者资产安全的前提下交易。

然而,这些基于以太坊智慧合约实现的去中心化交易所,都有一个最大的局限,就是它们只能交易Ether本身和存在以太坊主链上的token,比起传统交易所能处理Bitcoin, Ethereum, Monero, Zcash 之间的各种币/币交易,去中心化交易所的功能显得阳春许多。

因为区块链创造的安全交易机制,作用范围终究只限于同一条链上,目前要做跨链交易就只能把钱交由第三方保管,完成互换后再发还给拥有者。所以我们想试着找到一个方法,能够达成

只要双方互相约定,就能安全的达成跨链的资产交易

这乍看之下好像很简单,就是一手交钱一手交货嘛。但实际上,我们在日常生活中之所以能实现所谓的付钱取货,其实仰赖了很多东西,比方说信任,比方说法律,比方说监视器和防盗门。而场景一旦换到网路世界,事情就变得没那么单纯。

比方说小时候玩的线上游戏吧,有些人会用点数卡序号去跟其他玩家换游戏币,但永远都存在一个无解的问题:先给点数还是先给币?我怎么知道如果先给了对方会不会直接跑掉?

加密货币交易也有同样的问题,当你的交易对手是某个网路上不具名的人,你们要如何相信彼此能完成一笔交易而不被对方骗?或者说,怎么保证只要对方只要拿了我的钱就一定会给我货?

交易的原子性

所谓的原子性(Atomic) 指的是一笔交易应该像原子一样,被视为最小的,不可再分割(虽然原子好像可以) 的单位。也就是说,我给你钱你给我货这两件事情呢,必须要同时发生,否则就同时不发生。

为了创造这样的特性,我们会用上一些区块链的神奇黑魔法,以Bitcoin来说是杂凑函数和时间锁;至于Ethereum的话就是智慧合约。

交易的过程大致上是这样子的,假设我和一位匿名网友达成共识,要用我持有的10 BTC交换他的100 ETH。首先我们需要知道彼此的收付款地址,为了后续说明方便,这里假设它们分别是:

BTC_in

BTC_out

ETH_in

ETH_out

再来,为了完成这笔交易,我需要为这笔交易创造一个秘密,具体来说会是一段只有我自己知道的字串,并算出这个秘密的杂凑值。

这里我选用的秘密是:早安我的朋友

接着,我发送一笔交易,将我的10 BTC从BTC_out转出到一个特殊的暂存位置( P2SH ),并且规定这笔钱有两种方式可以转走:一种是如果出示那个可以被Hash变成46f34 8f4的秘密,就把钱交给BTC_in;另一种是如果钱放了两个小时还没被领走,那BTC_out就可以把钱领回去。

对方也要做类似的事情,把100 ETH 从ETH_out 转到暂存的智慧合约,规定只要ETH_in 向合约出示能变成46f34 8f4 的正确秘密就可以把钱领走,否则一小时后ETH_out 可以把钱拿回去。

等这些设定都完成了之后,我就可以对合约说「早安我的朋友」,然后把对方的100 ETH 领走,同时因为区块链资料是公开的,对方看得到我用来领钱的秘密,当然也就来把我的10 BTC 拿走,交易就算顺利完成啦。

这里有两个值得注意的小细节,第一个是领钱的规则,并不是任何知道秘密的人都可以领,要是指定的交易对手说出秘密才可以。这是因为区块链上的资讯人人可见,所以当我在广播交易的同时,所有人都会看到早安我的朋友,甚至有可能抢先在我的交易被确认之前,用同个秘密去把钱偷走,所以不能只认秘密,要同时限制收款人才行。

第二个是两人的提款时限是不一样的,因为即便双方都用同一组杂凑,一开始却只有我单方面知道秘密,所以当前面的设置完成之后,什么时候执行交易的主动权握在我手上。若是两边的时限一样,我就可以在到期前不久打出领ETH 的指令,并趁对方来得及反应之前把本来的BTC 抽走。所以通常对方会把时限订得比拥有秘密的人设定的时限再早一点,确保就算被压死线也还有足够的时间拿到应得的钱。

本文地址:http://www.reviewcode.cn/yanfaguanli/33548.html 转载请注明出处!

今日热点资讯