所有比特币交易(包括定期转账)均由基于堆栈的、被称为「比特币脚本」(Script)的编程语言支持。上文提到以太坊的 EVM 是为图灵完备且可互操作的智能合约而设计的,而比特币脚本却有意添加各种限制,并且以根本不同的方式工作。 解释比特币脚本 就想 EVM,比特币脚本使用堆栈(Stack)来保存值(Value)并在这些值上执行计算。但与 EVM 不同的是,堆栈是比特币脚本中唯一可用的数据位置。这意味着,很难存储多个值以便在以后的合约执行中使用。更重要的是,这意味着不可能存储或修改那些在合约执行期间仍存在的值(但 EVM 可以)。 这是以太坊的智能合约和比特币的最大区别。以太坊的模型是有状态的,而比特币是无状态的。通俗理解就是,以太坊可以被认为类似于普通的命令式可变数据编程范例,而比特币则类似于功能不变的数据范例。 比特币的模型允许独立且高效得多地验证交易,这使得并行化和分片交易更加容易。但是,如果没有任何可变的数据存储,在比特币上创建像以太坊那样的复杂智能合约就更加困难,比如,ERC20 合约必须跟踪代币余额并进行更改。 除了这些状态差异之外,还有其他一些因素限制了比特币智能合约的复杂性。值得注意的是,比特币脚本缺乏对某些算术函数以及任何形式的循环或递归的支持。其合约还具有 520 个字节的有效大小限制,并且最多只能包含 201 个操作码。 比特币上的大多数智能合约都属于几类简单合约。例如,可以由多个参与者使用的多重签名合约,或哈希时间锁定合约(HTLC)。 头等仓小知识:关于哈希锁定,可以举一个简单的例子,比如你从我这儿买一段视频,这个视频通过密码访问,那么在交易合约中,我把视频的访问密码也变成其中的一个 key,如果要达成交易,这个 key 必须让你知道;而一旦你知道(你拿到视频),钱就支付给我了,并且整个交易过程一定要在设定好的时间内完成,超出时间则合约也将自动触发。 而且由于比特币上的这些合约非常简单,大多数价值是通过将不同的合约与其他脱链应用程序逻辑相结合而捕获的。这样,可以将简单的合同组合起来以创建复杂的解决方案,例如闪电网络或跨链拍卖等等。 解释比特币交易 比特币每一笔交易都是通过所谓的「交易输出」实现的。当这些交易输出在某个账户中可用,它们就被称为未用交易输出(UTXOs)。这些 UTXOs 被锁定脚本(或 scriptPubKey)锁定,并被指定好了使用条件。尝试使用 UTXOs 时,会提供一个解锁脚本(或 ScriptSig),然后这些脚本一起执行计算。仅当脚本执行无错误且结果值为正确(TRUE)时,交易才生效。 与 EVM 一样,所有比特币节点都执行这些脚本来验证交易,但是比特币区块链并没有 Gas 成本的概念,因此,按交易数据的每个字节向矿工支付费用。为了限制节点必须完成的工作量,在一些更密集的脚本操作上也加入了一些限制。 与智能合约互动 比特币中的智能合约的编写使用P2SH 模式(头等仓注:有翻译为「向脚本哈希支付」)。P2SH 模式中的锁定脚本包含脚本哈希,并且需要提供完整脚本(称为赎回脚本)以及该赎回脚本的解锁脚本的解锁脚本。下图显示了这种模式。 图:P2SH 模式 头等仓小知识:P2SH 模式是为了简化复杂脚本的运用而被引入的(传统机制是 P2PKH),将复杂的锁定脚本编译成一个含有 20 个字节哈希的简单脚本,就想比特币地址是基于 Base58 编码的一个含有 20 个字节的公钥。P2SH 跟传统 P2PKH 方式的最大区别是把设置转出条件的人从发送者变成接收者。通过在赎回脚本中添加各种转出条件可以来实现形式多样的交易,例如多重签名交易。 比特币节点分两个阶段验证这些智能合约交易。首先,对「赎回脚本」进行哈希处理,并对照「锁定脚本」中的哈希值进行检查。如果它们匹配,则用「锁定脚本」去解锁「赎回脚本」,就好像「赎回脚本」才是初始的锁定脚本一样。 因为只有字节码的哈希值存储在比特币链上,所以完整的字节码必须存储在链外,并包含在任何合同执行的解锁脚本中。因此,比特币智能合约的「部署」是免费的,但以后执行合约的成本更高。相反,以太坊的初始部署相对昂贵,而后来的合约执行则便宜。 这些部署上的差异鼓励综合使用这两种智能合约。一个很好的例子是 LocalCryptos,它支持以太坊和比特币的非托管本地交易。对于以太坊,它使用一个大的智能合约来跟踪所有交易,而对于比特币,它为每笔交易创建单独的合约。 —- 编译者/作者:区块链高级工程师 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
比特币:无状态且简单
2020-01-12 区块链高级工程师 来源:区块链网络
- 上一篇:谁抓在
- 下一篇:USDT惨跌,超1000万枚BTC一年没动,大户在出货!
LOADING...
相关阅读:
- Connected Smart Contracts Meetup · 深圳站2020-08-03
- 8.3比特币下午个人操作建议2020-08-03
- 币海拾金:8.3BTC跳崖式的下跌 多头能否坚守阵地2020-08-03
- 8.3比特币以太坊继续保持低位做多,牛市并未结束2020-08-03
- 8.3比特币投资心态及意试图2020-08-03