本文介绍了OmniBOLT协议中的原子互换协议,该协议允许在不同的OmniLayer通道之间安全地交换代币,无需信任第三方中介。其核心是通过哈希时间锁定合约(HTLC)实现,确保交易双方在规定的时间内确认交易,否则资金将退回原账户,从而消除交易对手风险,并详细描述了交易过程以及涉及的消息类型。
原子互换是一种智能合约技术,它无需使用中心化的中介机构(如交易所)即可实现一种加密货币兑换另一种加密货币。
通常,原子互换发生在不同的区块链之间,用于交换彼此不信任的 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 1
由 Hash(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 1
和 2
转换为通用承诺交易,这与 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
指定了一个节点需要转移的资产。
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
指定了一个节点需要转移的资产。
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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!