从BTC脚本到Subscript:智能合约语言剖析

负熵学会(ExtropyInstitute)网站对广义的智能合约是这样定义的:能够让用户自己定义所需交易逻辑的代码程序,几乎存在于所有区块链系统,包括最广为人知的比特币,以及以太坊、超级账本、Parity、Zcash等。

从编程语言表现或者运行环境考虑,智能合约可以分为脚本型、图灵完备型、可验证合约型三种。

比特币系统可以允许通过编写基于堆栈的操作码(Opcode)来实现简单的交易逻辑,比如改变比特币花费的前提条件,这个系统称为比特币脚本系统。以太坊提供一种基于图灵完备语言的智能合约平台,也是最早的图灵完备智能合约。

以太坊系统提供以太坊虚拟机(EVM),合约代码在EVM内部运行。以太坊用户使用特定语言编写智能合约代码,并编译成EVM字节码运行。超级账本提供另一种图灵完备智能合约,它在Docker容器环境中运行语言无关的智能合约,即智能合约代码可以使用任何编程语言进行编写,之后被编译器编译并打包进Docker镜像,以容器作为运行环境。

随着波卡多链系统的发展,开发者针对跨链互操作的智能合约设计了新的开发语言。比如波卡的TrustBase项目提供了基于Substrate框架、兼容WebAssembly(WASM)虚拟机的智能合约开发系统,并自主研发了全新的易用语言Subscript,开发波卡原生完备智能合约。

本文将对比特币、以太坊和波卡区块链中的智能合约主流开发语言进行梳理阐述。从最初的比特币脚本语言到如今的Subscript,读者得以窥见智能合约语言的发展脉络。

一、比特币脚本语言

这是一种基于堆栈的逆波兰式简单执行语言,它用于编写比特币交易中未花费交易输出(UTXO)的锁定脚本(LockingScript)和解锁脚本(UnlockingScript)。锁定脚本确定了花费输出所需要的条件,而解锁脚本用来满足UTXO上锁定脚本所确定的条件,解锁并支付。当一条交易被执行时,每个UTXO的解锁脚本和锁定脚本同时执行,根据执行结果(true/false)来判定该笔交易是否满足支付条件。

比特币脚本语言被设计得非常简单,类似于嵌入式装置,仅可在有限的范围内执行,可做较简单的处理。脚本指令被称为操作码,分为常量、流程控制、栈操作、算术运算、位运算、密码学运算、保留字等。后文中提及的OP-DUP等属于栈操作指令。脚本是非图灵完备的语言,包含的操作码不具备循环和复杂的流控制功能,仅可执行有限的次数,避免了因编写疏忽等原因导致的无限循环或其他类型的逻辑炸弹。比特币脚本这种有限的执行环境和简单的执行逻辑,有利于对可编程货币的安全性进行验证,能够防止形成脚本漏洞而被恶意攻击者所利用。

比特币系统处理的大多数交易花费都是由“付款至公钥哈希(P2PKH)”脚本锁定的输出,即锁定脚本中包含一个公钥的哈希值(比特币地址),解锁时通过包含公钥和对应私钥所创建的数字签名的脚本来验证。例如,用户A向用户B支付一笔交易,锁定脚本可以表示为:
OP_DUPOP_HASH160〈BPublicKeyHASH〉OP_EQUALVERIFYOP_CHECKSIG
其中,BPublicKeyHASH为用户B的公钥的哈希。当用户B解锁该笔交易时,使用包含B的数字签名和公钥的解锁脚本:<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值