简单来说对比来说可以把btc的opcode比作AluVM指令集。btc的栈比作AluVM的寄存器。但是因为opcode的指令集是非图灵完备的加上btc上面有限的空间。所以btc的脚本扩展性是明显受限的。而AluVM是部分复制的无限状态机(PRISM)。
<!--StartFragment-->
以一种常见的交易类型“Pay-to-PubKey-Hash (P2PKH)”为例:
锁定脚本:
OP_DUP OP_HASH160 <公钥哈希> OP_EQUALVERIFY OP_CHECKSIG
解锁脚本:
<签名> <公钥>
执行流程
1.首先,将解锁脚本中的 <签名>
和 <公钥>
压入栈。
btc栈 | 剩余脚本 |
---|---|
<签名> <公钥> | OP_DUP OP_HASH160 <公钥哈希> OP_EQUALVERIFY OP_CHECKSIG |
2.执行 OP_DUP
,复制栈顶的 <公钥>
。
btc栈 | 剩余脚本 |
---|---|
<签名> <公钥><公钥> | OP_HASH160 <公钥哈希> OP_EQUALVERIFY OP_CHECKSIG |
3.执行 OP_HASH160
,对复制的 <公钥>
进行哈希处理,得到一个公钥哈希,并将其压入栈。
BTC 栈 | 剩余脚本 |
---|---|
<签名><公钥> <公钥哈希> | <公钥哈希> OP_EQUALVERIFY OP_CHECKSIG |
4.将脚本中的 <公钥哈希>
压入栈。
BTC 栈 | 剩余脚本 |
---|---|
<签名><公钥> <公钥哈希><公钥哈希> | OP_EQUALVERIFY OP_CHECKSIG |
5.执行 OP_EQUALVERIFY
,比较栈顶的两个值(计算出的公钥哈希和提供的公钥哈希),如果相等则继续,否则脚本失败。
BTC 栈 | 剩余脚本 |
---|---|
<签名><公钥> | OP_CHECKSIG |
执行 OP_CHECKSIG
,用提供的 <签名>
和 <公钥>
验证签名的有效性。
BTC 栈 | 剩余脚本 |
---|---|
True | (空) |
如果整个脚本执行完成后,栈顶的元素为 true
,则交易验证通过。
RGBVM实际上是一个叫做AluVM的东西。
AluVM是算法逻辑单元虚拟机的缩写,它是一种基于寄存器的虚拟机,用于智能合约验证和分布式计算,可用于但不限于 RGB 合约验证。
“ AluVM is simply math and few bound-width bytestring manipulations and that's it. ”(AluVM 仅仅是一些简单的数学运算和有固定宽度的字节串操作)但是因为是链下,计算资源对比链上高很多。所以基本来说是图灵完备的。
简单来说对比来说可以把btc的opcode比作AluVM指令集。btc的栈比作AluVM的寄存器。
但是因为opcode的指令集是非图灵完备的加上btc上面有限的空间。所以btc的脚本扩展性是明显受限的。而AluVM是部分复制的无限状态机(PRISM)。
\
<!--EndFragment-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!