钱被”锁进一段问题”里
比特币脚本(Script)是比特币真正的条件语言:每笔交易的输出不锁给”地址”,而是锁进一段可验证的条件,比如”谁能提供与这个哈希匹配的签名,谁就能花”。想花这笔钱,你得写出一段解答(解锁脚本),节点把两段脚本首尾相接执行一遍,结果为真才承认消费。所谓”转账到一个地址”,本质是把输出锁进与那个地址对应的一条标准脚本——地址只是脚本的便携速记(编码细节见 地址校验和是什么?为什么粘错一个字符会报错)。
栈机:没有变量、没有循环的计算器
Script 是一台极简栈式虚拟机:指令操作一个”操作数栈”。数字和签名被压入栈,操作码把它们弹出来做数学或加密比较,再压回真假值。脚本语言里几乎没有变量与分支跳转,也刻意没有循环——早期开发者故意移除了 OP_LOOP 等指令,因为当年观察到某些 Lisp 式语言可以写出难以判定终止条件的程序。没有循环,每段脚本的执行步数就有硬上界,节点验证成本可预测,脚本也无法变成”通用计算机”。
从 P2PKH 到 Taproot:一条谨慎加法的路线
比特币脚本的演进是克制的:P2PKH(签名匹配哈希)是教科书默认;P2SH 把脚本哈希成地址,实现了多签与复杂条件;BIP-141隔离见证改变了什么?把签名挪出主数据区;时间锁操作码让”到某个时间才能花”进入共识层(参见 nLockTime、CLTV和CSV有何区别?);CoinJoin是什么?混币的隐私逻辑怎么理解这类方案则依赖脚本原生的多输入多输出结构。Taproot 再进一步:让复杂条件在链上表现得像普通签名(花费路径选择见 Taproot两种花费路径怎么选?),并在脚本路径里引入更强的表达。每一步都要经过数年信号与迁移,哲学始终是:脚本每增加一分表达力,就给全节点验证者和未来协议维护者增加一分成本。
与 EVM 的路线分野
对比 EVM 是什么?以太坊虚拟机如何执行合约:EVM 选择通用可编程,代价是状态复杂、gas 模型昂贵、攻击面广;比特币脚本选择保守完备性——够用、可全节点独立验证、十年不腐。这不是优劣题,而是对”结算层该承载多少逻辑”的不同回答。把 DeFi 智能放到脚本之外的闪电网络与侧链上运行,正是比特币路线对”需要循环逻辑的场景”给出的答案。
快速问答
- “脚本执行完结果放哪?“执行栈的最终真值决定消费是否成立,中间值不保存到链上,脚本也不”记忆”历史。
- “多签是脚本吗?“传统 P2SH 多签就是脚本:条件写成”需提供 M 个有效签名”,链上只看到脚本哈希;Taproot 之后同一逻辑还能伪装成普通单次签名。
- “为什么比特币不加图灵完备?“通用状态与循环会把结算层拖进可组合攻击与验证成本失控的泥潭,历史上一度接近加入的条件系统最终让位于这条保守路线。
常见误区
- “比特币没有智能合约”:脚本就是最简单的智能合约——验证即执行,只是拒绝图灵完备。
- “地址决定脚本”:关系相反,脚本决定地址;先有锁的条件,才有地址的速记。
- “脚本能改规则”:脚本改变不了协议参数,只能消费时表达条件;改动全网规则要靠升级与信号的社会协调流程(软分叉与硬分叉的区别见 硬分叉是什么?与软分叉、升级有何区别)。
小结
比特币脚本是一门故意残缺的语言:栈式求值、锁定加解锁、无循环无通用状态。它把所有复杂性挡在结算层之外,换来十年尺度上的稳定验证。读懂”钱被锁进问题里”,比特币的安全模型就少了一半神秘感。
本文为技术与教育内容,不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。