当你在Nimiq钱包使用交换时,实际上发生了什么事?

从技术角度看Nimiq的原子交换

嗨,欢迎来到Nimiq!随着Nimiq OASIS公开发布的接近以及NIM和BTC买卖的启用,我们认为对于更精通技术的Nimiq粉丝来说,了解Nimiq钱包中的原子互换的运作方式,将会特别有意义!

什么是原子互换,为什么我们需要它们?加密货币旨在去中心化和免除中间人,目的是能够与完全陌生的人交换价值,而不需要预先的信任。开放式区块链在这方面做得很好,任何人都可以与其他人交易,无需任何预先的信任。但是如果你想用A币换B币,甚至将硬币换成其他东西,比如说欧元的话,要怎么做呢?目前通常大家会把硬币转移到一个交易所,然再兑现成欧元,或者是通过银行转账或信用卡发送欧元来购买加密货币。但是,当你这样做时,你将依赖该服务提供交付价值。如果他们改变主意,例如要求提供额外的文件,或者是被黑客攻击,那么你的资金将无法使用,甚至是消失。

这就是原子互换的亮点!它允许你交换两种资产,而不需要信任任何中间人来处理你的资金和交换。

这两种资产将被锁定在各自的链上进行原子交换,如果是欧元,他将被锁定在使用OASIS API的银行里。这意味着它们不是全部交换,就是全部都退回原先的主人手中,没有其他可能的结果,因此让原子交换非常安全。即使出了问题,你也不会失去你的资金。这就是为什么原子互换如此重要!

你对具体的操作细节感到好奇吗?那么你来对地方了! 现在就让我们深入了解原子互换是如何在Nimiq钱包中准备的,以及了解背后精彩的执行技术细节吧!

第0步:输入要交换的金额

在使用Nimiq进行原子交换时,你要做的第一件事是输入你想买入或卖出的金额,让Fastspot(一个为原子交换提供市场价格的流动性供应商)给你报价。

给开发者的侧记:Fastspot提供了相当多请求互换的估算选项。例如,你可以指定你想发送或接收的金额,或是你是否想在本估计中包括费用,以及在钱包中启用自己计算的交易费用。开发人员可以阅读Fastspot的API文档,并使用Typescript代码库来开始使用。

Nimiq钱包尊重Fastspot为NIM和BTC建议的每字节最低费用,以确保交换将尽可能快速和顺利地完成。以NIM为例,这些费用通常为零;以BTC来看,当钱包知道你从你的UTXO(未使用的交易输出)使用多少交换,就能相应地计算交易费用。

此外,钱包会在界面上显示真实的互换率,分别列出互换双方的所有费用。

当你对要交换的金额感到满意,点击 “确认 “按钮将触发下一个步骤。

第1步:创建、验证和签署互换文件

要签署交换,我们首先需要……有一个交换!没错,我们还没有启动交换。到目前为止,我们得到的仅是一个估计值。Fastspot的估计不能保证是可用的资金流动,也不能保证所选的资产目前是否真的能被交换。例如,欧元资产可能因维护而被停用。

因此在开始之前,我们要先得到一个明确的报价,这将可以保证交换是实际可行的。在你点击确认按钮的时候,钱包会向Fastspot请求报价。报价金额应当与之前显示的估计值相同或非常接近。

钱包会连同交换涉及的目的地和退款地址以及计算后的交易费用细节,转发给Keyguard(密钥守卫)。Keyguard会向你展示金额、互换率和费用,以确保一切正确。

现在我们来到了一个重要的细节。到目前为止,交换还没有得到Fastspot的确认,这意味着什么呢?这意味着该笔交换还没有在链上发生,这也意味着交换还没有纳入你的交换限额记录之中,在你输入密码之前,取消这个过程并不会产生任何后果。然而,本次交换产生的报价只在15分钟内有效,如果你在这段时间内没有确认密码,将必须重头开始。

好的,现在你已输入了密码并确认你要进行交换的意图。Keyguard现在将你的目的地和退款地址发送给Fastspot以确认报价(技术上来说是Hub,但在本解释中,我们可姑且将它们视为同样的东西)。Fastspot将生成并回传用于该交换的合同细节,对于NIM和BTC来说,此细节是各自合同规则的二进制数据编码,而对于欧元来说,则是OASIS合同的ID。

在Keyguard-Hub-combo实际签署你的交易并将它们传回到钱包执行之前,会先验证Fastspot刚刚生成的合同细节。例如:你的地址是否确实在合同数据中被用为受益人和退款地址,两个合同中的解锁哈希值是否相同,合同到期时间戳的顺序是否正确等等。简而言之,它会验证该交换是否确实是原子交换。只有在所有检查都通过后,Keyguard才会签署交易并将其返回到钱包中。

没错… [喘息时间……]这很冗长,而且有点复杂。如有需要请随时回头再读一次。我们希望你现在更清楚了解:为什么确保交换流程为非托管、无需信任中间人是无可或缺的。

现在,一切准备就绪,我们可以实际进入链上的部分了!

第2步:等待合同的到来

让我们回顾一下现在所处的情况。Keyguard刚刚签署了两笔交易,一笔是资金合同,一笔是兑换合同,此外它还签署了第三笔的退款交易,但我们现在先跳过这一点。钱包知道它们是什么样的交换,但是现在暂时将交易存储,因为它们只会在接下来的步骤中发送出去。接下来钱包从Fastspot API中获取确认的交换物件,以了解哪些合同将被用于交换,并确认交换仍在进行中。对于欧元的交换,钱包会直接从OASIS获取欧元HTLC(哈希时间锁定)包括资金细节,而不依赖Fastpot是否正确转发这些信息。

由于Fastspot控制了交换的秘密,同时也是第一个创建链上HTLC合约的工具(意即锁定你将收到的货币的合约),因此我们必须等待它创建这个不可逆转的合约。以NIM来说,这意味着我们需要等待创建的交易被开采成区块;以BTC来说,当交易在内存池(mempool)中出现时就足够了(在”按费用替换 “没被启用时);欧元的话,则意味着我们需等待OASIS回报合同已被清算,金融科技术语为 “fund”。

钱包通过一个交换库(很快就会被打包成一个封包提供给其他物件)监测各自的区块链或 OASIS API的上述标准,包括验证合同的金额、持有人和到期时间的正确性

身为用户的你,在等待其间看到一片片像是拼图的东西,动态地勾勒出迷宫的线条,最后被填满了颜色。

第3步:为发出的合同提供资金

一旦钱包确认Fastpot持有的是交易的一部份,你承诺的交换合约就会被创建。这与Fastspot的运作方式相同:钱包只是将你的资金交易(之前在Keyguard中签署的)广播到相应的区块链上。欧元部份会显示OASIS合同的支付细节,你需要用SEPA即时交易发送。同样的,我们需要等待合约不可逆地创建完成,这意味着要等待Nimiq被挖出,比特币到内存池,而OASIS的状态显示 “清算”,Fastspot也在等待它们被完成。

注意:在创建交换报价和发送你的BTC交易的期间,BTC交易费用有可能会急剧上升。在这种情况下,Fastspot无法因为你的BTC交易已经在内存池中就接受它,而是需要等待交易被挖掘出来,这在比特币网络中可能需要多花几分钟时间。

一旦这两块拼图完全被填满,合同就准备好了,资产的所有权也就可以交换了

第4步:原子交换!

在原子交换中,所有权的改变将在交换秘密发布后发生。还记得在步骤1中,钱包是如何验证这两个合约是由同个解锁哈希值确保的吗?确实验证它们的相同性是至关紧要的。首先,Fastspot认领你创建的合同,并将资金转移到自己的钱包。要做到这一点,Fastspot必须将交换秘密(解锁合约的钥匙)涵盖在该笔认领交易中。换句话说,它需要提交能够解锁资金的钥匙。由于涉及的区块链以及OASIS API是公开的,钱包可以从Fastspot的交易或OASIS合同中获得这个秘密。

给开发者的侧记:除了监控将揭露秘密的相应区块链或OASIS API,钱包也会定期检查 Fastspot API本身,一旦合同在链上被认领,Fastspot也会揭露秘密。

有了对交换秘密的了解,钱包现在可以从另一个合同中索取你的资金。那么就让我们来认领吧!

第5步:认领传来的合同

在Keyguard中签署资金交易时,你就已经准备好了认领交易。交换秘密不属于签署交易数据的一部分,所以还是可以将秘密加入交易中,而且不会使其失效。现在,交易已经完成(对于OASIS则称为 “结算指令”)。钱包可以将它广播到相应的网络,一个待定的传入交易将会立即显示在你的交易历史中,这意味着交换已经完成

给开发者的侧记:除了钱包在寻找交换的秘密,Fastspot还提供了一个所谓的 “瞭望塔服务”。这个服务接收你预先签署的认领交易并监控交换的进展。如果瞭望塔服务看到了这个秘密,它也会广播你认领的交易。当你的钱包失去互联网连接,电脑崩溃,或者你不小心关闭浏览器时,这将是一个故障转移。然而,请切记,瞭望塔并不是一个保证,而是一个额外的保障,以确保尽可能多的交换成功,减少了由于超时而被退还的交换的数量。

第5b步:过期的交换和自动退款

如果秘密从未被发布,会发生什么事?此时哈希时间锁合同内的时间锁就发挥作用了:在超出预定的时间后合同会过期(以我们的例子来说是1.5小时),资金将会自动发回给原主人,这在两个合同中都适用。所以如果由于某种原因Fastspot “忘记 “取回它的资金,合同将会过期,而你也将会取回你的部份,双方资金都不会丢失。

给开发者的侧记:你资助的合同会在Fastspot创建的合同之前超时。这样就不会出现Fastspot认领你的合同,而你却没有足够的时间去认领另一份合同的情况产生。很聪明,对吧?:)

结论

怎么样呢?你现在是否对 Nimiq 钱包原子交换背后发生的细枝末节有了更深入的了解呢?这篇文章对你来说是具有启发性还是可怕的呢?你有更多的问题吗?请在Twitter和Telegram上告诉我们,我们很乐意以这篇文章延伸更多细节和说明。

下次见,Pura Vida!

Sören & Sven

评论