从HTLC到BRC-20再到Atomical: Taproot脚本技术的递进演化
从HTLC到BRC-20再到Atomical: Taproot脚本技术的递进演化
本文分析的实际交易链接:
HTLC交易: https://mempool.space/testnet/tx/89379d0f21016f2f8a24bfe883a57918e6185550dc7258c3535f1e6c10db0d7f
BRC-20交易: https://mempool.space/testnet/tx/bc085b719174993e8a8a7ea572ec396b8f2b8cd7bf8e662acbc5eeb01fcfd840
Atomical交易: https://mempool.space/zh/tx/ba4b74892aa0a835520d0db041ac97fca457b58271b936e608ac8f35c00fd7c0
引言
随着比特币技术的发展,Taproot的引入为脚本编程带来了革命性的变化。本文将以实际交易数据为基础,分析从最基础的HTLC(哈希时间锁定合约)到BRC-20再到Atomical协议的技术演进,详细解析它们的设计思想、脚本堆栈执行顺序及其异同。特别关注Atomical协议为何采用综合设计,以及为什么在断电等意外情况下需要复现原始nonce来恢复资金。
1. 基础HTLC: 条件解锁的原始设计
1.1 设计思想
HTLC(Hash Time Locked Contract)是比特币最基础的智能合约形式之一,设计目标是:
允许一方通过提供一个秘密值(原像/preimage)来解锁资金
如果秘密未被揭示,资金可以在时间锁到期后退回给原始发送者
这种机制是闪电网络等第二层解决方案的基础,它实现了简单的条件性支付。
1.2 实际代码示例
从您提供的数据中,我们可以看到一个Taproot版HTLC的实现:
# 创建 preimage 的哈希
preimage = "helloworld"
preimage_bytes = preimage.encode('utf-8')
preimage_hash = hashlib.sha256(preimage_bytes).hexdigest()
# 创建脚本路径 - 验证 preimage
tr_script = Script([
'OP_SHA256',
preimage_hash,
'OP_EQUALVERIFY',
'OP_TRUE'
])
1.3 脚本堆栈执行顺序
实际交易的见证数据:
68656c6c6f776f726c64 (preimage "helloworld")
a820936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af8851 (script)
c150be5fc44ec580c387bf45df275aaa8b27e2d7716af31f10eeed357d126bb4d3 (control block)
堆栈执行流程:
初始堆栈:[
"helloworld"
]OP_SHA256
:计算哈希 → [<hash of helloworld>
]推入预定义哈希:[
<hash of helloworld>
,936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af
]OP_EQUALVERIFY
:验证相等 → []OP_TRUE
:推入1 → [1
]最终堆栈:[
1
] (成功)
1.4 关键特点
直接验证:脚本直接验证提供的preimage是否正确
完整执行:脚本中的每一步操作都会被执行
单一用途:专注于验证条件是否满足
无数据存储:不存储额外数据,纯粹的条件验证
2. BRC-20: 数据存储的创新
2.1 设计思想
BRC-20协议利用Taproot的脚本路径机制存储代币数据,而非实现条件解锁。设计目标是:
在比特币链上永久存储代币相关数据
使用Ordinals理念,在不执行的脚本部分铭刻数据
保持基本的签名验证作为所有权证明
这种创新将比特币脚本从"条件执行"扩展到"数据存储"领域。
2.2 实际交易示例
BRC-20的铭文交易:
Witness:
2bff5ccae33685e053fb54defb5e417a74584986bda591ec44c8bc20c6c3be86298fa31adc4fd1500baa0c4d8fffb30e2ea1419b50631f41d4b1622dbb0f752c (signature)
20886f3d145976b4cbedf3a10c3966d932768ab1f8beb590d90e0fda0c2e829bbcac0063036f7264010118746578742f706c61696e3b636861727365743d7574662d3800357b2270223a226272632d3230222c226f70223a226d696e74222c227469636b223a227279616e222c22616d74223a2231303030227d68 (script)
c0778e834cd47f538a8e86810ba7ea7efb8cfe0ab6c1280426888e74f5f91046cb (control block)
脚本解码后:
OP_PUSHBYTES_32 886f3d145976b4cbedf3a10c3966d932768ab1f8beb590d90e0fda0c2e829bbc OP_CHECKSIG
OP_0 OP_IF
OP_PUSHBYTES_3 6f7264 (ord)
OP_PUSHBYTES_1 01 (版本)
OP_PUSHBYTES_24 746578742f706c61696e3b636861727365743d7574662d38 (MIME类型)
OP_0 (分隔符)
OP_PUSHBYTES_53 7b2270223a226272632d3230222c226f70223a226d696e74222c227469636b223a227279616e222c22616d74223a2231303030227d (JSON数据)
OP_ENDIF
2.3 脚本堆栈执行顺序
初始堆栈:[
<signature>
]推入公钥:[
<signature>
,<pubkey>
]OP_CHECKSIG
:验证签名 → [1
] (如果签名有效)OP_0
:推入0 → [1
,0
]OP_IF
:因为栈顶是0,跳过整个IF块OP_ENDIF
:继续执行最终堆栈:[
1
] (成功)
2.4 关键特点
部分执行:只执行签名验证部分,数据部分被跳过
数据存储:使用
OP_0 OP_IF...OP_ENDIF
结构存储不执行的数据扩展用途:既验证所有权,又存储元数据
协议识别:特殊客户端可识别并解析不执行部分的数据
3. Atomical: 综合设计的高级应用
3.1 设计思想
Atomical协议进一步扩展了Taproot的可能性,结合了HTLC的条件验证和BRC-20的数据存储,同时增加了工作量证明要素。设计目标是:
实现更强的稀缺性(通过工作量证明)
提供丰富的数据存储能力
保证安全性(通过签名和脚本路径验证)
支持更复杂的资产属性和操作
这种设计使Atomical成为比特币上功能最丰富的资产协议之一。
3.2 实际交易示例
Atomical的铭文交易:
Witness:
d59626dc7295c1ee399773416a31344705a118a3e9a0ef30e52ca7ab2b5790c2c0077ebbd5f51e001cf1801d1eff82c870e8abb9563ff810c64b3d2b7e9d0976 (signature)
20a61e002383194e6a336aeba0189d10ec93e8e14d3e313cc5e4860c2c10b3d46cac00630461746f6d03646d7439a16461726773a468626974776f726b6364303030306b6d696e745f7469636b65726670686f746f6e656e6f6e6365016474696d651a65dd5c9c68 (script)
c0a61e002383194e6a336aeba0189d10ec93e8e14d3e313cc5e4860c2c10b3d46c (control block)
脚本解码后:
OP_PUSHBYTES_32 a61e002383194e6a336aeba0189d10ec93e8e14d3e313cc5e4860c2c10b3d46c OP_CHECKSIG
OP_0 OP_IF
OP_PUSHBYTES_4 61746f6d (atom)
OP_PUSHBYTES_3 646d74 (dmt)
OP_PUSHBYTES_57 a16461726773a468626974776f726b6364303030306b6d696e745f7469636b65726670686f746f6e656e6f6e6365016474696d651a65dd5c9c (CBOR数据)
OP_ENDIF
CBOR数据解码包含:
bitworkc
: "0000"mint_ticker
: "photon"nonce
: 1time
: 1709005980
3.3 脚本堆栈执行顺序
初始堆栈:[
<signature>
]推入公钥:[
<signature>
,<pubkey>
]OP_CHECKSIG
:验证签名 → [1
] (如果签名有效)OP_0
:推入0 → [1
,0
]OP_IF
:因为栈顶是0,跳过整个IF块OP_ENDIF
:继续执行最终堆栈:[
1
] (成功)
3.4 关键特点
复合验证:结合签名验证和脚本验证
增强数据存储:存储更丰富的元数据,包括工作量证明信息
脚本依赖:解锁严格依赖于完整脚本的重建
多层安全:同时依赖私钥和正确的元数据(nonce、时间戳等)
4. 三者比较:设计理念与技术实现的递进
4.1 设计理念比较
主要目的
条件解锁
数据存储
数据存储+工作量证明
脚本执行
全部执行
部分执行
部分执行
数据验证
preimage验证
签名验证
签名验证+脚本一致性
安全依赖
知道秘密值
拥有私钥
拥有私钥+知道原始nonce
扩展性
低
中
高
4.2 脚本结构比较
HTLC
preimage + script + control block
验证preimage哈希
无数据存储
BRC-20
signature + script + control block
验证签名
OP_0 OP_IF块
Atomical
signature + script + control block
验证签名+脚本一致性
OP_0 OP_IF块,含nonce
4.3 技术递进
HTLC → BRC-20:
从"执行验证"到"数据存储"
从"知道秘密"到"拥有私钥"
引入不执行的脚本部分
BRC-20 → Atomical:
增加工作量证明要素
结合脚本一致性验证
添加更复杂的元数据要求
5. Atomical为何采用综合设计及恢复原理
5.1 综合设计的必要性
Atomical采用综合设计主要出于以下考虑:
解决稀缺性问题:
通过工作量证明(bitwork)创造真实的资源消耗
使用commit-reveal模式确保工作量证明可验证
灵活性与安全性平衡:
使用签名验证保证基本安全性
通过脚本验证增加额外安全层
支持复杂协议需求:
需要存储更丰富的元数据(ticker、nonce、时间戳等)
支持多种操作类型(mint、transfer等)
适应Taproot技术特性:
利用Taproot脚本路径的强大验证能力
结合签名和脚本验证创造更安全的资产模型
5.2 断电情况下需要复现的原因
当用户在commit交易广播后、reveal交易广播前断电,资金会锁定在"中间地址",这时需要复现原始交易参数的原因在于:
Taproot脚本路径验证机制:
Taproot地址是根据内部公钥和脚本树生成的
脚本中包含确切的nonce和时间戳值
任何参数变化都会导致不同的脚本,无法通过验证
脚本完整性要求:
要解锁资金,必须提供与Taproot承诺完全一致的脚本
脚本中包含铭文数据、nonce、时间戳等所有元素
缺少任何元素都无法重建正确的脚本
技术实现细节:
// 创建中间地址时,nonce和时间戳编入脚本 copiedData["args"]["nonce"] = nonce; copiedData["args"]["time"] = unixtime; // 将这些数据编码进Taproot脚本 const atomPayload = new AtomicalsPayload(message.finalCopyData); const updatedBaseCommit = prepareCommitRevealConfig( workerOptions.opType, fundingKeypair, atomPayload );
恢复流程需求:
// 恢复时需要提供完全相同的参数 lockedScript: time: 1709005980 nonce: 1
5.3 技术原理解析
Atomical锁定和解锁的技术原理可以分解为:
锁定过程:
创建包含特定nonce和时间戳的payload
生成对应的Taproot脚本和中间地址
发送资金到该中间地址
正常解锁:
使用私钥签名reveal交易
提供完整的原始脚本(包含所有元数据)
提供控制块证明脚本在Merkle树中
commit后打断再恢复:
找到原始commit交易
确定原始nonce和时间戳
重建完全相同的脚本和控制块
使用私钥签名新的reveal交易
关键在于,Taproot验证要求提供的脚本必须与创建地址时使用的脚本完全相同,而脚本内容与nonce和时间戳直接相关。这不是传统意义上的"用preimage解锁",而是"用完全相同的脚本解锁",但由于脚本内容取决于这些参数,效果上类似于需要知道原始nonce和时间戳才能解锁。
结论
从HTLC到BRC-20再到Atomical,我们看到了Taproot脚本技术的快速演化。这些协议从简单的条件验证发展到复杂的数据存储和多层验证,展示了比特币脚本的强大潜力。
Atomical的综合设计代表了目前最先进的应用,它通过结合签名验证、脚本一致性验证和工作量证明,创造了一个功能丰富且安全的资产协议。这种设计的代价是复杂性增加,如在断电情况下需要精确复现原始参数才能恢复资金。
随着技术的进一步发展,我们可能会看到更多创新的Taproot应用,进一步扩展比特币的可能性边界。
Last updated