首页 资讯 正文

技术视点丨从“萌芽”到“大树”,KMD和原子互换之间不得不说的纠葛

头等仓 2019年07月19日 03:17

导言:本文的目标读者是那些想要了解原子互换历史的研究人员、分析专家等。本文中的研究内容由Komodo团队整理,加入评注便于读者个人调查取证。

image.png

去中心化交易所和原子互换简介

那些熟悉区块链、去中心化交换和原子互换概念的读者,可以直接跳过此部分。

Komodo白皮书第一章:区块链技术入门

对于那些对区块链技术完全不了解的人,Komodo白皮书的第一章用了30页的笔墨描述了区块链技术,以及它引发行业关注的原因。

原子互换的发展史

发展到今天的原子互换不仅仅归功某一个人,也不归于某一个时机。有很多学者在公共论坛交换意见、征求反馈、测试概念以及质疑他人观点。

幸运地是这些努力都被网络论坛一一记录在案,大家可以追踪到具有创新点的那个帖子。BitcoinTalk.org是孵化期阶段最受欢迎的在线讨论网站,这个网站都有附上有效时间与用户资料,研究人员可以有序地浏览用户发帖的整个历史记录,此外,大火的GitHub.com代码存储库中也有时间戳与有效的元数据。

Sergio·Damien·Lerner:已知的第一个原子互换提议者

第一个已知的有关“原子互换”的发帖人来自Sergio Damien Lerner。他将原子互换的概念发到BitcoinTalk.org (BTT)上:

今天给大家介绍一种新型P2P协议,我在一个替代币中用这种协议作为概念性证明(Proof of Concept)。

这种协议可以在没有中心点的情况下跨币进行P2P交易,在我看来,它就是替代币的“圣杯”。它可以给加密货币系统带来全新改变,所有币可以彼此互换。它的优势无可比拟:无需交易网站,可以自动交易比特币。也就意味着替代币非常依赖于比特币,他们需要比特币才能加入加密货币游戏。

简单地解释一下:

假设有两种加密货币XC和BTC,两个货币都有自己的区块链和客户端。用户A有一些XC,他想用XC买一些BTC,而用户B则恰恰相反。双方找到彼此(通过中心目录或P2P协议),确认交易价格(A支付“a数量”的XC,B支付“b数量”的BTC)。发生两笔支付,A支付给B(用XC),B支付给A(用BTC)。我们分别称之为第一笔付款和第二笔支付。两位用户在XC系统和Bitcoin系统都有一个地址。

原子互换协议的工作原理如下:

1.用户A向XC系统中用户B的地址提交“a数量”的XC作为第一笔付款。这是一笔带有“合同”性质的特殊付款,如果某个特定“证明”在交易后的有限时间内公布,则“合同”自动执行。

2.用户B按照标准,通过Bitcoin系统发送b数量的BTC给A,这是第二笔支付。

合同规定,将比特币(的一个分叉)复制到一个名为“证明”的特殊交易中,证明第二笔支付实实在在完成。

协议还规定:

· 分叉链的大小(N),取决于打包第二笔支付的区块得到的确认数多少。

· 分叉的区块哈希开始应该源自根块,应选择过去一些区块作为根块,避免选择被竞争分叉链遗弃的区块。例如,假设当前区块为BLK,过去的区块为Prev(BLK),双方可以选择 Prev^3(BLK)中的一个作为根块,长度至少在9个区块(在当前区块后得到6个区块确认)。

· 第二笔支付出现在根块后最大块数,之所以最大是为了防止XC合约超期,因此交易只能单向进行。

当证明交易(与合约匹配)在XC区块中公布时,客户端自动接受第一次付款,从A支付a数量XC给B。

我设计了一款概念性证明协议,当一切就绪时我会公布协议代码。该系统能理解所有替代币和未知货币合同。用户指定一个针对第二笔支付的“模版”,并约定数值(货币数量、接受者公钥等),以及一个区块格式模版(链接字段、哈希算法等)。

诚挚地问候,

Sergio

备注:我将协议命名为P2P TradeX,因为我在google上没有搜索到这个词。

Sergio说他设计了一个概念性证明,但并没有公布代码链接,我们无法联系上他作解释说明。

从他寥寥几句话中,我们无法确认其代码的可靠性。由于技术上的难点,比如比特币的“时间锁”和“prevout”, 他也似乎没有打算当时直接在比特币上实现。于是,Sergio创造了另一种独立货币,如果不满足合同条件,则可以退款。

撇开在原子互换中使用比特币的种种限制不说,Sergio可能是最早的一批尝试者,即时不是,也对后世影响深远。

Sergio发起的帖子并没有激发社区多大热情,只活跃了一年左右。可能只是当时社区还未认识到这个想法的价值。

针对Sergio在BitcoinTalk讨论,用户@ripper234在2013年5月21日发表了最后一条评论,也就是在Sergio发帖整整一年之后。@ripper234告诉我们他收集了Sergio和Tier Nolan的提议,在比特币维基上创建了一个新页面。

查看该比特币维基页面的创建时间可以确认它确实诞生于2013年。

@ripper234还在Sergio的讨论帖子上表示,原子互换的想法在2013年只是一个提议,目前还没有人发布比特币的工作原型。

比特币维基后来成了Komodo开发负责人James Lee(又称@JL777)的灵感来源,他在2014年构想出第一个原子互换证明概念。

帖子中的另一位用户@XertroV,2013年6月21日帖子讨论尾声的时候,评论他们正在构建一个与原子互换相兼容的去中心化交易所,他们还给出了论文与代码证明。

和Sergio一样,XertroV的早期尝试也没有得到社区的积极响应,而且XertroV对项目的热情也似乎在2014年停止了。

Sergio Damien Lerner对原子互换的兴趣似乎自发帖后便递减了。目前他可能已经转为安全审计工作,以及支持RSK区块链。

Tier Nolan:原子互换冠军

2013年4月,用户开始意识到区块链技术的真正价值,政府也很快会在这一领域发挥积极作用。这将BitcoinTalk.org上的讨论引向了去中心化交易所的概念,每天都有关于去中心化交易所如何交换和工作的新讨论。

一位名叫@TierNolan的精通技术的用户对这个话题产生了兴趣,一个月后他发布了著名的原子互换方案。

在得到用户@iddo和@gmaxwell关于比特币“锁定时间”功能的建议后,Tier创建了原子互换的基本架构,与目前的原子互换非常相似(包括Komodo自用的原子互换交易所技术)。

A选择一个随机数x

A创建交易1:“如果已知H(x)中的x或B已签名,或者A或B已签名,则支付w数量的BTC给B的地址。

A创建交易2:“从交易1支付w数量的BTC给A的地址,锁定48小时,由A签署。”

A发送交易2给B

B签署交易2后,将交易2返回给A

1)A向网络提交交易1

B创建交易3:“如果A知道H(x)中的x,且签署了交易,或者A或B签署了交易,则将v数量的替代币支付给A的地址。”

B创建交易4:“从交易3中支付v数量的替代币给B的地址,锁定24小时,由B签署。”

B发送交易4给A

A签署交易4后,将交易4发回给B

2)B向网络提交交易3

3)A给出x花费交易3

4)B给出x花费交易1

这就是原子互换,如果交易过程中出现停止,随时可以逆转。

在交易1之前:没有任何公开的广播,所以没有任何交集

交易1和交易2之间:A在48小时后用可以申请退款交易把钱取回

在交易2到交易3之间:B在24小时后可以申请退款。A要再等24小时才能退款

交易3后:在交易2之前完成

A必须在24小时内消费完他的新货币,否则B可以要求退款并保留自己的货币

B必须在48小时内消费完他的新货币,否则A可以要求退款并保留自己的货币

为了安全起见,两人都应该在截止日期前花时间完成整个流程。

如今,原子互换的公式可以更加精简,以下摘自Komodo的博客。

步骤0

Bob在去中心化交易所上发起一笔订单,此为第0步,因为这步不属于原子互换的范畴,但原子互换前必须有这一步。

步骤1

Alice看到Bob的订单,接受了。她支付交易总额的0.15%作为原子互换手续费,手续费是确保Alice和其他用户不向网络发送垃圾邮件。Bob无需为交易支付任何费用。

此外,手续费必须是一个独立于Alice与Bob的交易之外的UTXO。了解更多,请阅读Komodo的UTXO概述。

一旦Alice支付了费用,原子互换就正式启动。

步骤2

Bob发送一笔订金到一个安全的地址,原子互换的去中心化确保了交易结束之前,任意一方,无论是Bob、Alice还是任何第三方管理人员——都无法获得这些资金。

Bob的订金必须是他最初发出订单金额的112%。如果Bob是一个诚实的执行者,无论交易成功与否,订金会原路返回给他。订金只是防止Bob作弊。

与Alice的手续费一样,Bob的订金必须是一个单独的UTXO。 

步骤3

Alice将自己的KMD发送到第二个安全地址。同样,在互换结束之前,Bob、Alice、甚至Komodo平台管理员都无法接触这些资金。

若出于某种原因,此步骤交易失败,便会暂停并取消原子互换。此刻Bob的BTC订金将返还给他,Alice的KMD也将返回给她。

步骤4

Bob将自己的BTC付款发送给Alice,完成自己这部分交易。这部分BTC订金不包括步骤2中的BTC订金。只有Alice才能认领Bob的BTC订金。

步骤5

现在Alice可以接受Bob的BTC付款。一旦Alice认领了Bob的BTC付款,Bob就能够获得Alice的KMD付款。

步骤6

Bob接受Alice的KMD付款。此刻,双方都获得了他们希望交易的资金。原子互换成功。

步骤7

既然双方完成资金互换,此时Bob便可以取回自己的BTC订金了,原子互换流程结束。

步骤7是用来激励双方继续下一步交易。它也是一个原子互换,按照字面理解:(a)原子互换完全在Bob和Alice的意愿上进行;(b)不发生互换,Bob和Alice的资金各自退还给他们(除了原子互换手续费)。

也就是这样,用户@ripper234总结了原子互换的概念,并把这个概念发布到比特币维基页面上。

2013年8月2日,Nolan宣称将用自己独创的方式证明原子互换,这是社区最早尝试用基于比特币的区块链进行原子互换。

在Nolan在尝试原子互换的过程中,用户@socrates1024吸收了Tier Nolan和Sergio Damien Lerner提出的概念,并在比特币维基页面上优化了这些概念。

Sergio Damien Lerner这时候出现了(2013年10月),并表示@socrates1024提出的优化版本没有任何缺陷。

2014年2月13日,当被问及原子互换是否有何进展时,Nolan表示,遇到了阻碍。一个被称之为“交易延展性”的问题阻断了进展。简而言之,比特币协议同意在交易提交到网络处理与打包进区块之前这段时间,更改交易。这样一来,恶意用户可以发起攻击。因此即使可以在BTC链上执行“伪”原子互换,但在其他链行不通。

2014年3月,@k99提出了一个可以缓解该问题的想法,这个想法得到了Tier Nolan的认可。

引用自:k99 2014年3月22日,03:11:37 

我认为解决交易延展性问题可以通过Bob支付押金的方式来解决。   

双方支付相同的金额,Alice支付给Bob资金,交易后Bob取回自己的订金。

交易1:

交易1输入:Alice拿出x数量的BTC

交易2输入:Bob拿出x数量的BTC

输出:

if子句:MultiSig

else子句:2x BTC to Bobs address and redeemer needs to solve H(x)

Bob签署交易1,然后将交易1发送给Alice,Alice签署交易。

Alice选择自己拥有的x数量代币作为交易1输出,然后发送给Bob。

Bob创建交易,签署后发送回给Alice。

Alice签署交易后,得到哈希值。

Alice创建一个退款交易。

输入

Alice签署2x的交易1,锁定24小时。

输出

x给Bob

x给Alice

Bob签署交易,并将交易发送给Alice

现在Alice收到一个退款交易

然后她可以发布交易1

如果这步Alice暂停了,她可以用Bob的资金作为赎金。

最糟糕的情况,Alice24小时后才能取回自己的资金。

Alice的手开始颤抖起来,她的xBTC此时被锁定了。

“Alice是揭露密钥的偿还者,因此她决定交易是否执行或取消(退款),可能还要另外的保护措施(支付手续费、声誉系统等等?)。”

小额支付自动交易也是一个办法(将大额交易拆分为小额交易)。

这可能是针对延展性问题的一个常规解决方案。如果你以前与某人交易过,你会信任那些一方交易1%或总交易额1%的小额交易。

@k99提出的概念增加了安全性,如果Alice与Bob在区块链以外建立信任,那么自建立信任起,可以对将来的交易赋予一些信任。虽然这个概念相当有效,但它仍未完全满足基于原子互换的去中心化交易所的要求。

讨论之后,Nolan得出结论:比特币需要部署新功能才能完成原子互换。于是他起草了一份正式文案“比特币改进提案”(BIP)。

BIP的核心理念非常简单:Bitcoin协议中需要有一种将资金锁定一段时间的函数,当满足特定规则和条件时便执行脚本。该脚本可以验证发送到等待池中的交易是否与打包进区块的交易一致,从而破除攻击载体。

虽然Nolan提出的BIP没有被比特币协议接受,但给其他比特币爱好者创建BIP(OP_CHECKLOCKTIMEVERIFY ,简称CLTV)带来了灵感。

CLTV BIP的贡献者们非常出色,有Peter Todd、@Luke-Jr以及其他区块链技术先驱。

将CLTV BIP添加到比特币协议中需要硬分叉升级,在结束原子互换介绍之际,一起来看看Komodo为原子互换做出的努力。

JL777:原子互换去中心化交易所软件先驱

James Lee,又称JL777或James,原子互换技术的早期先驱,Komodo的首席开发人员,他为了将原子互换技术带给大众做了不懈努力,最后他成功了。JL777最初在2013年发起区块链项目,2014年着手原子互换,2015年他执行了首个不安全的跨链原子互换,2016年初CLTV BIP发布后,他执行了第一次安全的原子互换,到年底他创建了一款自动执行原子互换的软件。2017年8月至2018年1月,他的软件为上百位用户在开源互联网上执行1.2万次原子互换。大多数的用户没有技术经验,而是下载指南文件,按照交易步骤一步一步执行。还没有其他原子互换先驱取得与JL777同样的成绩.

2013年末,James首次接触区块链技术。当前大家对James知之甚少,出于安全考虑,他选择了匿名。“James·Lee”只是一个代称,并非他真名。在他向公众透露的基础信息中,他有约20年的C编程语言经验,专长是编写GPU核心代码,以及为金融部门编写代码。最初加入区块链是因为对投机NXT和XRP,以及网关服务感兴趣。到了2014年1月,他转为对区块链软件开发感兴趣,2014年2月他已经是去中心化交易所的技术先驱。

2014年4月,James准备公布他的第一个去中心化交易所,他称之为InstantDEX。在当时,去中心化交易所是颠覆性的概念,激发了Nolan创建原子互换理论的激情,但无果而终。同时,XertroV也进行了尝试,但并未向社区证明其理念的可行性,他的理念与原子互换的关系至今仍不明朗。

但是,虽然“InstantDEX”已淡出人们视线,但它的大部分代码仍活跃在Komodo的技术之中,造就了Komodo成为DEX先驱之一。比如,BitShare将在今年晚些时候着手构建,另一大受欢迎的去中心化交易所EtherDelta,似乎在2016年才开始构建。与InstantDEX同时代但为数不多存活下来的交易所Bisq表现平平。

InstantDEX的初衷是创建一个去中心化网关,允许代币资产交易。在当时InstantDEX模型已成为常规的解决方案,为后来者BitShares项目效仿。

James构建了beta版本的InstantDEX,他在比特币维基页面上看到了@ripper234收集的“原子互换”资料,然后通过谷歌发现了Tier Nolan的提案。于是2014年4月,James宣布自己打算实现一个修改版的原子互换,单单只交换NXT资产(类似以太坊的ERC20染色币)。

当时James明白,对于纯跨链原子互换,它的核心区块链技术还不够成熟。他需要增加了一个原子互换功能演示作为概念性证明。他努力几天之后,互联网上一些匿名用户具备执行自动跨链原子互换的能力。

该原子互换的代码终于在存储库中找到。

James将原子互换带到大众的视野当中,但并未推向高潮。

2014年6月James完成了beta版InstantDEX。从那时起,James便专注于针对普通用户可用的可互操作性区块链技术。在此期间他做出了大量尝试,但这些超出本文探讨的范围。总而言之,他试图创建一个协同工作的区块链网络,而不是一个依赖单一的区块链。2014年9月,他再次宣布打算用原子互换技术连接区块链,但这是他大计划中的一小部分。

2015年9月6日,James遇到了困扰Nolan等用户的“交易延展性”问题。除了实现“时间锁”,还能在NXT和BTC之间进行跨链原子互换。与其他先驱的解决方案类似,James的方案只适用于“伪”原子互换,无法承受大众的质疑。

对于James的讨论,Tier Nolan给出了以下澄清:

他还计划引入一个新的OP_CHECKSIG(和VERIFY)操作码。它有一个属性是如果从区块0开始使用n-txid,它会将交易中的所有交易id替换为n-txid。

这就解决了延展性问题,因为其他所有内容都由交易的创建者签名。

OP_CHECKLOCKTIMEVERIFY也可以解决延展性问题。它消除了退款交易创建时间锁的需要。

后来:

OP_CHECKLOCKTIMEVERIFY的目的是达到“快速交换”。原计划在最后一个软分叉之际部署该功能。

但由于区块大小的争论延缓了计划。

从以上可以看出,很多比特币爱好者在进行原子互换交易时,已经达到了与JL777相同的测试水平。

如果没有CLTV,所有基于BTC区块链的原子互换进程都只是理论。和许多其他早期先驱一样,James在等待CLTV发布的同时继续开发他的原子互换技术。

众望所归的功能终于发布:OP_CHECKLOCKTIMEVERIFY

2015年11月,“OP_CHECKLOCKTIMEVERIFY”终于添加到比特币协议的更新中,许多原子互换爱好者为此欢呼不已。

此时此刻,大量的区块链工程师争夺成为“第一个”使用CLTV执行安全跨链原子互换的先驱。如果没有原子互换交易历史,Komodo很难判定谁才是“第一个”。也有将来的某天,这些先驱会贴出自己交易的证据。

于James而言,他当时的关注点是大规模的用户采用。他正在与核心NXT开发人员进行思想上的斗争,他明白了自己软件的用户必须独立于任何区块链,才能得到大规模采用。2016年2月,James宣布了他的“独立宣言”和Komodo项目。

与此同时,James与Tier Nolan、CIYAM以及其他几个原子互换爱好者合作,解决了将基于比特币分叉链集成到原子互换的问题。这标志着为大众带来现代、安全、自动化的原子互换版本的开始。JL777依靠Tier Nolan、@TPTB_need_war以及其他用户的支持,澄清和阐明了许多原子互换技术安全方面的顾虑,比如一些攻击载体“滑动攻击(Slippage Attack)”,以及一些“剪切和选择(cut and choose)”问题,这些问题导致了替代币无法实现CLTV。  

2016年9月27日,James完成了他的完全自动化和安全的Beta版原子互换软件,并发表了文章宣布了这一成就。

虽然核心技术已经研究出来,但是要让普通大众使用该技术,则需要基本的basice用户界面,手动支持、一个代理团队以及成熟的社区。接下来8个月,Komodo社区会一起努力完成这些指标。

2017年8月,Komodo去中心化交易所软件正式启动公测。大多数相关对话都在Github的#tradebots频道进行,整个过程中,许多未经技术培训的用户都在频繁地使用原子互换功能。

2017年末的“泡沫”时期,当时许多区块链技术的新来者涌入这个领域,寻找投机机会。当市场上市值排名最高的区块链之一莱特币(Litecoin)和另一个热门的加密货币项目Decred宣布“LTC与DCR首次”原子互换时,大众对原子互换的兴趣突然高涨起来。由于莱特币身居高位,而原子互换的概念对于一般人来说又是全新的事物,许多加密货币新闻机构错误地将其描述为“历史上第一次原子互换”。例如,《以太坊世界》将其描述为“莱特币和Decred完成了历史上第一次跨链原子互换:LTC与加密货币交换的主要步骤”。Komodo的市场团队当时联系了许多新闻机构来纠正这一记录,但没有得到理想的回应。

Komodo继续推广原子互换去中心化交易所软件,将社区发展至数千名用户。截至2018年初,推特上大约有7.7万名粉丝,而Komodo的subreddit的粉丝数量增长到了近1万人。Komodo Slack频道突然拥挤起来,无法处理服务无法处理,于是Komodo转向了Discord和Riot。

后面六个月里,Komodo的原子互换去中心化交易所软件帮助用户执行了大约12万次原子互换。由于软件工作的方式不同,以及当时缺少KYC要求,所以无法确切地知道有多少用户参与了原子互换。根据下载和使用,Komodo估计在这段时间内的用户总数在100到1000之间。

2018年末,Komodo社区达成了12万笔原子互换交易,加密货币市场变得不确定,Komodo取消了对原子互换功能的推广,去中心化交易所的活跃度有所下降。

在这段时间里,Komodo团队一直致力于构建Komodo 去中心化交易所软件v2.0。由Komodo开发人员Artem负责开发,v2.0吸收Komodo v1.0中的精华,如今新版本可待公测。

原文:https://komodoplatform.com/komodo-and-the-early-pioneers-of-atomic-swaps/

稿源(译):https://first.vip/shareNews?id=1870&uid=1