比特币跨链为何导致符文丢失,还可以找回吗?

 2023-12-28 08:40:15发布 2023-12-28 08:42:35更新

近期,有用户在 BEVM 跨链操作中出现了符文“丢失”现象,引起了社区的关注和疑虑。本文将对这一问题进行深度分析,旨在为用户提供更全面的了解该问题,同时提供铭文和符文使用过程中的一些注意事项。

符文丢失事件

12 月 23 日,一些 BEVM 跨链交易用户发现账户中持有的部分 COOK、PSBTS 在不知情的情况下被转移到跨链桥,随后该部分用户向 BEVM 团队提出质疑。

接着 BEVM 官方推特发出声明,称由于该部分符文不被主流钱包比如 Unisat 支持,所以在跨链到 BEVM 的时候,该类非主流的铭文会被当做普通的 UTXO 转到 BEVM 地址。

BEVM 是一个以 BTC 为 Gas 且兼容 EVM 的 BTC Layer2,核心目标是拓展比特币的智能合约场景,帮助 BTC 突破比特币区块链非图灵完备、不支持智能合约的束缚,让 BTC 可以在 BEVM 这个 Layer2 上构建以 BTC 为原生 Gas 的去中心化应用。

近来随着 BEVM 奥德赛活动的开启,很多用户开始将 BTC 跨链到 BEVM 进行交互,以期望能够在未来 BEVM 生态参与抢占先机。

但是在跨链过程中,部分用户发现所持有部分 COOK、PSBTS 丢失,根据区块链浏览器,查到该部分符文被转移到了 BEVM 跨链桥,于是有了前面提到的情况。

符文丢失原因

区块链安全团队 ScaleBit 团队经过研究,确认该部分符文确实是在同一笔跨链交易中被当做普通的 UTXO 转移,而非 BEVM “盗取”。

首先,通过 BEVM 浏览器(https://scan.bevm.io/stats)找到一些跨链交易信息,通过分析,跨链桥的接收地址为:

bc1p43kqxnf7yxcz5gacmqu98cr2r5gndtauzrwpypdzmsgp7n3lssgs5wruvy

随后,在 Rune Alpha 上查看,其地址上持有包括 11 万多的 COOK 和 28 万多的 PSBTS 在内的大量各种符文。

Rune Alpha上该地址的数据

Rune Alpha上该地址的数据

对该部分符文相关交易进行了研究和分析,以其中某一笔交易举例:

https://runealpha.xyz/txs/c1bf015ce01a3610b436fb2e418685855cd7a37143cd52a4d1858a53e610b5f2

其交易内容如图所示:

交易内容

交易内容

可以看到,该笔交易的输入有两个,分别为 0.00000546 BTC(包含 1000 COOK)和 0.02169031 BTC,输出是 0.02 BTC(包含 1000 COOK)和 0.00148377 BTC。

作为对比,以下是一笔不是跟跨链桥交易的 COOK 的交易,其输出如下图:

对比交易

对比交易

可以看到,不管是输入还是输出,都包含一个 0.00000546 BTC 的 UTXO。

为什么会这样呢?这里需要了解一些相关的知识。

UTXO

UTXO,全称为 Unspent Transaction Output,直译即未花费交易输出,这是比特币的核心知识点。在比特币的交易中,每笔交易都有输入和输出,别人付给你的钱是“交易输入”,你收到的钱是“交易输出”。

UTXO

UTXO

UTXO 的核心设计思路是无状态,它记录的是交易事件,而不记录最终状态,也就是说只记录变更事件,用户需要根据历史记录自行计算余额。

因此,比特币的交易模型和我们平时使用的银行账号有所不同,它并没有账户这个说法,比特币只有 UTXO。一个 UTXO 可以想象成一个任意金额的“硬币”。

UTXO 凑输入和找零

UTXO,就是跟硬币一样,不能掰开用,那么交易过程中如何凑够输入金额,又如何找零的呢?

比如小明给小刚转账 1 BTC。整个过程是这样的,小明要收集足够的输入,比如小明的地址对应的以往交易中,找到了一个面值为 0.9 的 UTXO,不够 1 BTC,好在交易中是允许有多个输入的,所以小明又找到了一个面值 0.2 的 UTXO,这样在这次转账的交易中,就会有两个输入。

同时输出也会有两个,一个是指向小刚地址,面值是 1 BTC。另一个指向小明的地址,面值是约 0.1 BTC,这个输出就是找零了。

在比特币转账过程中,凑输入没有固定的算法,取决于钱包的实现。

比特币铭文和符文

比特币铭文和符文是比特币生态中的两个重要概念。

比特币铭文主要的代表是 Ordinals 协议。Ordinals 诞生于 2022 年 12 月,内容完全在链上,由 Casey Rodarmor 开发。

该协议利用了 Sat 编号系统,Ordinals 通过赋予每个聪序列号,在交易中追踪它们,同时用户可以通过 Ordinals 附加额外的数据(图像、视频、文本等)在比特币区块链上,使得每个聪都独一无二,从而具有 NFT 的性质。BRC-20 就是基于该协议创建。

Runes 协议,也被称为符文协议。随着 BRC-20 的火爆,BRC-20 相关代币的交易占据了 Ordinals 协议的大部分比例。

2023 年 9 月 26 日,Casey Rodarmor 重新开发了一个名为 Runes 的协议,作为 BRC-20 的替代品。该协议是一个简单的、基于 UTXO 的、能使比特币使用者具有使用良好体验的 FT(可替代代币)协议。

比特币铭文和符文的载体都是 UTXO,比特币铭文(Inscription)与符文(Rune)的一个关键区别在于,铭文是刻在隔离见证数据里,而符文是刻在 OP_RETURN 里。

对于用户铸造铭文或者符文,本质上都是发送符合金额的比特币给协议,协议返给你一个带有铭文或者符文的 UTXO,一般是一个 0.00000546 BTC 的 UTXO。至于为什么是 0.00000546,因为这是比特币设置最低交易金额。

带有铭文或者符文的 UTXO

带有铭文或者符文的 UTXO

转移铭文,也是因为这些钱包识别了这些 UTXO 的特殊格式, 钱包通过对应的协议,将这些 UTXO 作为输入,并支付额外手续费,转给了对方。

转移铭文

转移铭文

为什么用户丢失“符文”

对于用户丢失符文,由于它本质上还是 UTXO,在用户使用 UniSat 进行比特币跨链操作的时候,由于 UniSat 不识别该部分含符文的 UTXO ,并当做了普通的 UTXO 进行了处理,凑输入发送给了跨链桥。

实际上,不仅是跨链操作,用户在不支持符文的钱包中进行其他比特币转账操作,也有可能丢失符文,比如 12 月 7 日就有用户在 Unisat 上进行 BRC-20 swap 操作丢失了 15, 000 COOK。

在不支持符文的钱包中进行其他比特币转账操作丢失符文

不支持符文的钱包

还有一个比较有意思的事情,在 Runes Alpha 上铸造符文的时候,也是有可能把用户的铭文的当成 Gas 转走的。

为什么没有人反馈丢铭文

BEVM 的官方文档表明,BEVM 跨链是支持铭文跨链的,只需要用户通过 BSwap,即可将自己的铭文跨链到 BEVM 上,而跨链使用的钱包是 UniSat 钱包。

UniSat 是一款用于 BTC 生态的 Chrome 插件钱包,帮助用户存储、铸造和传输 BRC-20 代币。它能够识别用户的铭文,从而避免将该部分 UTXO 进行合并,只有用户主动交易铭文的时候,才会被转移。

BSwap

BSwap

由于 Unisat 目前还不支持符文协议,这就是为什么用户跨链会“丢失”符文而不“丢失”铭文的原因,如果换做其他不支持符文的钱包,也会发生类似的情况。

符文还可以找回吗

既然符文被转移到跨链桥了,用户还可以拿回该部分符文吗?

BEVM 白皮书表明,其资产跨链方案是基于比特币的 Taproot 技术构建的,是融合了 Schnorr 签名 + Mast 合约 + 1000 BTC 轻节点组成的 POS 网络来实现资产的去中心化跨链和管理。

BTC- BEVM 的双向跨链是完全基于链上的节点共识来管理的,实现了完全的代码化和去信任化,而非依赖多签或者人为管理。

这让 BTC 及比特币资产的跨链安全做到和 BFT POS 一样去中心化和安全,因此,BEVM 官方也无法发起单独的转账交易来取出用户的“符文资产”。

由于 BEVM 不支持符文协议,该部分符文被转出的概率是完全随机的,当托管合约执行交易时,这些“符文资产”可能会被当作普通的 UTXO 被转出。

但整个过程是完全随机的,不受人为控制的,如果要强制取出,必须彻底改变 BEVM 整个链的共识,这无疑于将 BEVM 硬分叉。

如何避免符文“丢失”

对于普通用户,如何避免该类问题?在做交互操作时候,建议用户做好以下几点:

  • 确保使用的钱包支持铭文或者铭文协议。
  • 确保要交互的协议(比如跨链桥)是否支持铭文符文协议。
  • 使用协议之前,先研究是否有用户操作过程中出现问题。
  • 使用多个钱包管理不同资产。

同时也提醒开发者,在开发设计的时候,需要进行充分考虑和准备,从代码层面上解决可能出现的协议不兼容问题。如果不能,要在上线之前做好调研并做出明确提醒,避免引起不必要的质疑和麻烦。

推荐阅读