CYBEX的一大特色就是提供了原子交易。
那么原子交易到底是怎么回事呢, 我发现CYBEX的白皮书讲解的也是很学术,不容易理解。
另外昨天的一篇科普文章,则是逻辑不同。
我尽量用小白的语言,把它讲清楚。
说明之前,先推荐一个好用的搜索工具,即 https://www.bihubang.com/。
感谢作者为社区作出的贡献。(虽然推广的过程中,刷了很多垃圾评论)
原子交换想要解决什么问题
首先,我们假设有两个交易者,Alice 和 Bob。
Alice拥有BTC, Bob拥有CYB。他们希望互相交换一些BTC和CYB,并且不借助第三方。
如果Alice先发送BTC给Bob,那么Bob已经收到BTC了,那么他可以拒绝发送CYB给Alice。
同样,如果Bob先发送CYB给Alice,也会发生一样的问题。
我们希望的情况是,
在交易的过程,Alice和Bob必须,或者都遵守转账的承诺,或者都不执行转账。
从而可以保证,互相交换代币的两笔独立的交易,在逻辑上是一笔,或者成功或者失败。即所谓交易的原子性。
原子交换的解决办法
我们假设,为了互相交换代币,Alice 在BTC的链上创建了这样一个保险柜a,并且存入了BTC。
保险柜a,需要两把钥匙打开,一个是只有Alice知道的key,另一个是Bob的签名。
Bob在CYBEX的链上克隆了保险柜a得到了保险柜b,并且存入了CYB。
保险柜b,需要同样的(只有Alice知道的) Key和 Alice的签名,才能打开。
(签名可以简单的理解为笔迹,即保险柜可以验证签名确实是Alice或者Bob的)
在这个时刻,Alice其实已经可以打开保险柜b了,因为Alice拥有key 和自己的签名。
那么Alice可以作弊吗?答案是不行。
Alice打开b的这个操作,会向CYB的网络广播公开,原先只有Alice自己知道的key。
那么,一旦广播,Bob就能获取key,再加上自己的签名打开保险柜a了。
如果由于网络或者Alice拒绝公布等原因,交易并没有发起。
那么保险柜可以预先设定一个等待时间,比如24小时,之后创建者就可以自由取走各自的代币了。
这里的关键点在于,交易的发起方在选择交易的时刻,必须同时将密钥key公布出来。
从而使得,交易双方处在一个对等的位置。
实现
以上的保险柜,在各个链的实现层面上,就是 btc的脚本系统,eth的合约或者比特股多签账户等等。