OmniBOLT 5:通道间原子互换协议

本文介绍了OmniBOLT协议中的原子互换协议,该协议允许在不同的OmniLayer通道之间安全地交换代币,无需信任第三方中介。其核心是通过哈希时间锁定合约(HTLC)实现,确保交易双方在规定的时间内确认交易,否则资金将退回原账户,从而消除交易对手风险,并详细描述了交易过程以及涉及的消息类型。

OmniBOLT #5: 通道间的原子互换协议

原子互换是一种智能合约技术,它无需使用中心化的中介机构(如交易所)即可实现一种加密货币兑换另一种加密货币。

-- https://www.investopedia.com/terms/a/atomic-swaps.asp

通常,原子互换发生在不同的区块链之间,用于交换彼此不信任的 token。OmniBOLT 中定义的通道可以由 OmniLayer 上发行的任何 token 资助。如果一方需要交易他的 token,比如 USDT,来换取另一方的比特币,双方都需要在指定的时间范围内使用加密哈希函数确认收到 USDT 和 BTC 的资金。如果任何一方未能在此时间范围内确认交易,则整个交易无效,资金不会被交换,而是退还到原始账户。后一项操作确保了对手方风险的消除。

通道之间的标准互换流程是:

    Alice 创建 HTLC 1                                           Bob 创建 HTLC 2
[Alice --- X USDT---> Bob]                                    [Alice <--- Y BTC--- Bob]
    +----------------+                                           +----------------+
    |                |                                           |                |
    |     create     |                                           |                |
    |     HTLC 1     |----(1)---  告诉 Bob Tx 1 已创建  -----> |     create     |
    |                |                                           |     HTLC 2     | 
    |                |                                           |                |
    |     Locked     |<---(2)--  确认并创建 Tx 2 --- |     Locked     |
    |       by       |                                           |       by       |
    |     Hash(R),   |                                           |      Hash(R)   |
    | Time-Locker t1 |                                           | Time-Locker t2 |
    |       and      |                                           |       and      |
    |   Bob's Sig    |                                           |   Alice's Sig  |
    |                |                                           |     t2 < t1    |
    |                |                                           |                |
    |                |                                           |                |
    |                |                                           |                |
    |                |----(3)----   发送 R 以获取 BTC     -----> | Alice + Y BTC  |
    | Bob + X USDT   |<---(4)----   使用 R 以获取 USDT     ------ |                |
    |                |                                           |                |
    |                |                                           |                |
    |                |----(5)----     或者超时,               |                |
    |                |         资金退还给双方       -----> |                |
    |                |                                           |                |
    +----------------+                                           +----------------+

    - 其中 `HTLC 1` 将通道 `[Alice, USDT, Bob]` 中的 X USDT 转移给 Bob,由 `Hash(R)`、`t1` 和 Bob 的签名锁定。
    - `HTLC 2` 将通道 `[Alice, BTC, Bob]` 中的 Y BTC 转移给 Alice,由 `Hash(R)`、`t2`(`t2 < t1`) 和 Alice 的签名锁定。

显然,Alice 和 Bob 之间不必有直接的通道:

   Alice 创建 HTLC 1                                           Bob 创建 HTLC 2
[Alice --- X USDT---> David_1]                              [Bob --- Y BTC---> Carol_1]
    +----------------+                                           +----------------+  
    |     HTLC 1     |----(1)---  告诉 Bob Tx 1 已创建  -----> |                |
    |                |<---(2)--  确认并创建 Tx 2 --- |     HTLC 2     | 
    +----------------+                                           +----------------+
            .                                                             .  
            .                                                             .  
            .                                                             .  
            .                                                             .  
            .                                                             .     

[David_n --- X USDT---> Bob]                                [Carol_m ---Y BTC---> Alice] 
    +----------------+                                           +----------------+
    |     HTLC 1     |                                           |     HTLC 2     |
    +----------------+

                                                                 +----------------+
         Alice        ----(3)----  发送 R 给 Bob 以获取 BTC -----> | Alice + Y BTC  |
                                                                 +----------------+
    +----------------+
    | Bob + X USDT   |<---(4)----   使用 R 以获取 USDT    -------        Bob
    +----------------+ 

    +----------------+                                           +----------------+
    |                |----(5)----     或者超时,               |                |
    |                |         资金退还给双方       -----> |                | 
    +----------------+                                           +----------------+

哈希时间锁定互换合约

哈希时间锁定互换合约(HTLSC)定义了一个互换,它由两个独立的 HTLC 组成,具有额外的指定 token 汇率和时间锁。

简单来说,一个互换有 5 个步骤。

步骤 0:Alice 创建 HTLC 1 以向 Bob 支付 X USDT。HTLC 1Hash(R) 和时间锁 t1 锁定。 步骤 1:Alice 将 HTLC 1 的详细信息通知 Bob。 步骤 2:Bob 要么确认并创建 HTLC 2 以向 Alice 支付 Y BTC,要么忽略该消息,在这种情况下,HTLC 1 将在时间范围 t1 后自动取消。HTLC 2 也由 Hash(R) 锁定。 步骤 3:在此步骤中,Alice 在她的 BTC 通道中应用 R 以获取她的 BTC 资金。她必须检查赎回脚本 HTLC 2,以查看 HTLC 2 是否由 Hash(R) 锁定。如果 Bob 作弊,他可以在赎回脚本中使用伪造的 Hash(R')。因此,当 Alice 应用 R 来解锁她在 BTC 通道中的资金时,她将一无所获,只会将秘密 R 暴露给 Bob。 步骤 4:在 Alice 将 R 暴露给 Bob 之后,Bob 可以使用 R 来获取他在 USDT 通道中的资金。 步骤 5:如果 Alice 改变主意,并拒绝应用 R 来获取她在 BTC 中的资金,那么在一段时间后,BTC 通道和 USDT 通道中的资金都将退还到原始账户。在此互换中,没有人会遭受损失。

任何参与者都不能作弊。在每个通道中输入 R 后,HTLC 12 转换为通用承诺交易,这与 HTLC 转换为承诺交易 的过程相同。

在链 [Alice, USDT, David_1] --> ... --> [David_n, USDT, Bob] 中,Alice 创建 HTLC 1 及其在 Bob 侧的镜像交易,时间锁为 t1,在图中以 3 天为例。

<p align="center"> <img width="768" alt="具有完整违约补救交易的 HTLC" src="https://github.com/omnilaboratory/OmniBOLT-spec/blob/master/imgs/HTLC-diagram-with-Breach-Remedy.png"> </p>

同时,Bob 在链 [Bob, BTC, Carol_1] --> ... --> [Carol_n, BTC, Alice] 中创建 HTLC 2 及其在 Alice 侧的镜像交易,将约定数量的 BTC 发送给 Alice。时间锁 t2 设置为 2 天,小于 t1=3 天。

<p align="center"> <img width="768" alt="具有完整违约补救交易的 HTLC" src="https://github.com/omnilaboratory/OmniBOLT-spec/blob/master/imgs/HTLC-diagram-with-Breach-Remedy-BTC-channel.png"> </p>

swap

swap 指定了一个节点需要转移的资产。

  1. type: -80 (swap)
  2. data:
    • [channel_id:channel_id_from]: Alice 通过创建 HTLSC 发起互换流程。
    • [channel_id:channel_id_to]: Alice 希望与之交易 token 的 Bob。
    • [u64:property_sent]: Omni 资产(id),发送给 Bob。
    • [u64:property_receieved]: 对方(Bob)需要的 Omni 资产(id)。
    • [float64:exchange_rate]: = property_sent/property_receieved。例如,发送 X USDT 以换取 Y BTC,则汇率为 X/Y。
    • [string:transaction_id]: HTLSC 交易 ID,即在 channel_id_from 中发送资产的交易 ID。
    • [u64:time_locker]: 例如,3 天。

swap_accepted

swap_accepted 指定了一个节点需要转移的资产。

  1. type: -81 (swap_accepted)
  2. data:
    • [channel_id:channel_id_from]: Alice 通过创建 HTLSC 发起互换流程。
    • [channel_id:channel_id_to]: Alice 希望与之交易 token 的 Bob。
    • [u64:property_sent]: Omni 资产(id),发送给 Bob。
    • [u64:property_receieved]: 对方(Bob)需要的 Omni 资产(id)。
    • u64:amount: 在 channel_id_to 中发送的 property_receieved 的数量。
    • [float64:exchange_rate]: = property_sent/property_receieved。例如,发送 X USDT 以换取 1 BTC,则汇率为 X/1。
    • [string:transaction_id]: HTLSC 交易 ID,即在 channel_id_to 中发送资产的交易 ID。
    • [u64:time_locker]: 例如,2 天,必须小于消息 swap 中的 time_locker

channel_id_to 中的 Bob 必须监控通道 channel_id_from 中的 transaction_id,以查看相应的交易(如 RD、HED、HTRD 等)是否已正确创建。在他验证交易后,他将根据通道 channel_id_to 中的参数 amount 创建 HTLSC,然后使用消息 swap_accepted 回复 Alice。

Alice 收到消息 swap_accepted。如果有任何错误,Alice 将不会发送 R 以获取她在 channel_id_to 中的资产,因此 Bob 无法在 channel_id_from 中获得此资产。一段时间后,这两个通道将恢复到之前的状态。

备注

原子互换是许多区块链应用的基础。下一章 将介绍一些示例,这些示例直观,将帮助我们的读者为现实世界的企业构建更复杂的应用。

  • 原文链接: github.com/omnilaborator...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
omnilaboratory
omnilaboratory
江湖只有他的大名,没有他的介绍。