本文是OmniBOLT系列文章的上半部分,主要介绍了OmniBOLT,一个为比特币网络上的智能资产层(特别是OmniLayer协议发布的资产)定义的快速流通协议。OmniBOLT扩展了闪电网络的功能,允许OmniLayer资产通过闪电通道转移,实现智能资产的即时支付和跨通道原子化互换等功能。
作者:OmniBOLT
来源: https://medium.com/omnibolt/part-i-omnibolt-detailed-introduction-178f00fe9364
为了帮助社区更好地理解 OmniLayer、OmniBOLT、闪电网络和相关的程序,我们写了一篇详细解释它们的文章,而且分成了上下两部分。本文是上半篇。而且,我们将在下半篇中详细解释 OmniBOLT 的核心模块 —— 通道间的原子化互换。那么,我们就先从探究 闪电网络旗舰协议 OmniBOLT 开始吧!
闪电网络致力于为比特币网络扩容,它能在网络中的独立对等节点之间协助快速的比特币链下支付。基于闪电网络的基础理论,OmniBOLT 为比特币网络上的智能资产层 —— 尤其是那些通过 OmniLayer 协议发布的资产 —— 定义了快速流通协议。
因为对智能资产的基础性支持,当前的 LND 和 BOLT 实现不仅能支持瞬时的 BTC 支付,还有下列优势:
(译者注:LND 是一种闪电网络节点实现;BOLT 的全称是 “Basis of Lightning Technology”,闪电网络基础。)
有兴趣的读者可以直接阅读 GiHub 上的 OmniBOLT 规范库: 第六章:去中心化交易所、担保借贷合约、线上商店,等等,了解更多例子。
OmniBOLT 极大地延伸了比特币闪电网络的功能。它是在 2019 年 8 月 1 日出现的。
基于闪电网络的基础协议,OmniBOLT 规范定义了让 OmniLayer 资产通过闪电通道转移的方法,以及 OmniLayer 资产如何能从神奇的快速支付理论中获益。根据链下比特币转账的 Layer-2 协议规范 BOLT (Basis of Lightning Technology),我们提出了 OmniBOLT 特殊协议来延伸基础理论的范围,以支持更广泛的资产类别。
OmniBOLT 自身并不发行代币。所有代币都会发行在 OmniLayer 上,然后通过基于 P2(W)SH 的通道进入 OmniBOLT 网络;由此,代币会被锁定在主链上,但随时可以在 OmniLayer 主链上赎回。
[Alice, USDT, Bob]
,表示 Alice 和 Bob 开设的、注入了 USDT 的通道。为了避免恶意对手拒绝签名通道交易、让资金永久锁在通道(P2SH 输出)内,我们构造出可以撤销的 “承诺交易”。这是我们最先引入 “可撤销的序列式到期合约(RSMC)” 的地方;这种合约是由 Poon 和 Dryja 在闪电网络白皮书中发明的。
所以, funding_created
交易并不意味着双方就将资金锁进了通道了。通道双方通信的第一回合只是建立一个 P2SH 地址、构造一笔注资交易但并不广播,以及构造一笔 RSMC。然后,Alice 或者 Bob 可以广播注资交易,将 Omni 资产转入通道中。
下图展示了参与者在广播 注资交易/承诺交易 之前 必须 做的启动操作。BR1a(违约救济交易)可以稍后再创建,但必须在下一笔承诺交易构造之前。
总的来说,RSMC 由下列 5 步组成:
步骤 1:Alice 使用临时私钥 Alice2 构造一个临时的 2-2 多签名地址,记为 Alice2 & Bob;并等待 Bob 的签名。
步骤 2:Alice 使用 Alice & Bob(多签名输入)构造一笔承诺支付 C1a,该支付的一个输出将 60 USDT 发送给 Alice2 & Bob
,另一个输出将 40 USDT 发送给 Bob。
步骤 3:RD1a 是 C1a 的第一个输出,它会给 Alice 支付 60 USDT,但有一个序列号来防止 Alice 立即拿走这些钱。
步骤 4:Bob 签名 C1a 和 RD1a,并将数据发回给 Alice。
步骤 5:OBD 构造退款交易:C1a/RD1a。
下图展示了在一个通道中发生的一笔承诺交易,解释了资金是如何转移的。
“一条双向的支付通道只能保证通道内可以安全转移资金,为了让资金在通道所组成的网络中历经多跳而送达目的地,还需要另一种构造:哈希时间锁合约。”
—— Poon & Dryja,比特币的闪电网络:可扩展的链下即时支付
关于使用 HTLC 将通道串联,一种常见而且重大的误解是,如果 Alice 想给 David 支付 10 USDT,她可以使用 2 跳来送达:
Alice ---(10 USDT)---> Bob ---(10 USDT)---> Carol ---(10 USDT)---> David
这会把人搞蒙,因为闪电网络中没有个人账户的概念。闪电网络的唯一基石就是通道。所以正确的表示应该是:
[Alice --(10 USDT)--> Bob] ==(Bob 拥有两条通道)== [Bob --(10 USDT)--> Carol] ==(Carol 拥有两条通道)== [Carol --(10 USDT)--> David]
Alice 在 [Alice, USDT, Bob]
通道内给 Bob 转移 10 USDT,然后,Bob 在 [Bob, USDT, Carol]
通道内给 Carol 转移 10 USDT,最后,Carol 在 [Bob, USDT, Carol]
给 David 转移 10 USDT。
HTLC 实现了以下流程:
如果 Bob 可以告诉 Alice R
(这是 HASH(R)
的原像),Bob 就可以在 [Alice, USDT, Bob]
通道内拿走 10 USDT;而 Bob 也给 Carol 开了同样的条件:如果 Carol 可以告诉 Bob 这个 R
,就可以在 [Bob, USDT, Carol]
通道中得到 Bob 支付的 10 USDT.
使用了 HTLC 之后,资金的内部转移 [Alice --(10 USDT in HTLC)--> Bob]
就成了来自注资交易的、跟 RD1a/BR1a 一样的不广播输出。
闪电网络白皮书
BOLT 规范: https://github.com/lightningnetwork/lightning-rfc
闪电网络实现 LND: https://github.com/lightningnetwork/lnd
OmniLayer 规范: https://github.com/OmniLayer/spec
OmniBOLT 规范: https://github.com/omnilaboratory/Omni-BOLT-spec
OmniBOLT 项目: https://github.com/omnilaboratory/obd
OmniLayer 钱包: https://github.com/OmniLayer/omniwallet
OmniJ: https://github.com/OmniLayer/OmniJ42
- 本文转载自: btcstudy.org/2022/08/09/... , 如有侵权请联系管理员删除。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!