风险提示:理性看待区块链,提高风险意识!
中本聪:智能合约?比特币自带
首页 > 币界资讯 > 区块链知识 2015-09-24 15:13:00

前言:写完给身边的程序员朋友看了下,85%表示IQ不够用,并且认为不会有正常人能读到最后一段。我只能说,尽力了。

1523049

如果你是中本聪

假如你是2009年的中本聪,你已经找到了解决双重支付的方法,现在要设计比特币的转账功能了。你会怎么做呢?我的设计方案会是这样:

发送方向比特币网络发一份广播,其内容是这样的:“从A地址转账1 BTC给B地址。同时附上A地址私钥的签名”。网络各节点收到广播,校验签名合法。于是从A地址扣掉1 BTC,给B地址加上1 BTC。

简洁明了对不对?我猜你的设计方案也许和我差不多。幸亏你我都不是中本聪。如果是这样的设计,那么比特币的潜力将大打折扣,我们也无法看到今天区块链领域的蓬勃生息。让我们看看中本聪的设计方案:

发送方向比特币网络发一份广播,其内容是这样的:“我要转账1 BTC,并且我能提供一段脚本,这段脚本作为钥匙可以打开这1 BTC上的锁;同时,我根据接收方的要求为这1 BTC加个新的锁”。

网络各节点收到广播,运行脚本,发现确实能“开锁”。于是根据发送方的指令给这笔比特币换上一把“新锁”,这笔比特币也就有了新的主人。当接收方想使用这1 BTC时,只要能提供一段新的脚本作为钥匙打得开这把新锁就行。

乍一看,中本聪的设计似乎非常繁琐和反直觉,然而这样的设计却大有道理。脚本是一种简单的计算机语言,比如JavaScript就是一种脚本。比特币的脚本可以表述的内容非常灵活,远远超出了一对一转账的范畴。例如:A可以约定必须由收款人B和担保人C同时签名才能支配某笔比特币(担保交易),也可以约定B、C、D中任意两人签名就能支配(联名账户);A可以约定B必须在一年后才能动用某笔比特币(延时支付),也可以约定任何人都能支配(撒钱)或者都不能支配(烧钱)。通过这套内置的脚本编程语言,你可以灵活地编写出各种各样的约定——而这其实就是简单的智能合约。用比特币脚本编写的合约系统,使得比特币成为了人类历史上第一种可编程的货币。

真正的中本聪是这么说的

2010年,当发现了比特币的内置脚本系统后,有人在bitcointalk上发帖表示了惊讶和不解:“比特币的脚本让我有点紧张,这过于复杂了,而复杂是安全的天敌”。此君不是别人,正是后来成为中本聪继任者的Gavin Andresen。中本聪是如此回复他的:

无标题

大意是说:我希望比特币在0.1版就能拥有稳定的架构,未来不需要再做底层改变。在过去几年设计比特币的过程中,我发现只有使用脚本系统才能完成我希望支持的各种复杂交易类型——担保交易连带合同第三方仲裁多方签名等等。

放在今天,也许中本聪会直接说:“比特币需要脚本,有了脚本,就有了智能合约”。

插个题外话。这篇帖子短短9条,却可以堪称区块链技术发展史上的一次重要对话。你会发现8楼有人问“比特币的脚本系统是不是意味着用户可以发行自定义资产?”。此人ID是bytemaster,后来其创立了可以发行用户自定义资产的比特股。9楼Gavin回复说:

“I don’t think you need scripts to do something like that. Just send a bitcoin to yourself, and then declare that transaction is the root transaction for My Valuable Asset.”

这恐怕是彩色币的概念第一次被提出。

比特币脚本的真容

说了这么多虚的,来点干货。现在请把你的大脑当做一台基于堆栈的解释器和虚拟机,看看比特币的脚本到底是怎么运作的。一个典型的比特币标准交易(Pay-to-Public-Key-Hash)的验证流程,需要执行这样的脚本:

scriptPubKey: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
(scriptPubKey就是前文比喻的1 BTC上的脚本“锁”)
scriptSig: <sig> <pubKey> 
(scriptSig就是前文比喻的发送方A提供的脚本“钥匙”)

Snip20150924_27

脚本执行完毕后,如果结果为true,那么说明验证通过,A有权支配这笔比特币。比特币网络就会根据A的指示为这笔比特币加上一把“新锁”,转账完成。

比特币脚本的局限性

为了保持比特币的向前兼容和简单稳定,比特币的开发者们对其脚本做了诸多限制。比如脚本中没有循环语句,比如bitcoin core客户端目前只支持5种固定模式的脚本。这一方面是由于历史包袱,一方面是比特币的开发团队倾向于保守和稳健。

有的朋友可能知道我们正在开发一个用于登记、管理和交易股权的区块链协议——小蚁。小蚁复用了比特币的主要架构,其中就包括了脚本系统。在此基础上,小蚁参考了Gavin Andresen提出的比特币改进提案BIP12,增加了一条OP_EVAL指令。我们先来看看小蚁下的标准交易(Pay-to-Script-Hash)是怎么工作的:

scriptPubKey: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_EVAL
scriptSig: <sig1> <sig2> <redeemScript> 
redeemScript: OP_2 OP_3 OP_CHECKMULTISIG

Snip20150924_28

Snip20150924_29

比特币脚本 + BIP12 = 图灵完备

OP_EVAL指令的加入使得小蚁拥有了图灵完备的脚本系统,也就为更复杂的智能合约提供了可能。

图灵完备是指一个能计算出每个图灵可计算函数(Turing-computable function)的计算系统。或者说,图灵完备使我们的脚本系统有能力解决所有的可计算问题。一方面,它带来了强大的处理能力;另一方面,它也使对脚本的静态分析变为不可能:我们永远也无法知道脚本何时会停止,除非我们真正去执行它。

比特币网络中的每一个节点都要执行每一笔交易中的脚本,这就使得比特币脚本系统的设计需要足够精简。而作为一个点对点的电子现金系统,比特币也确实无需更为复杂的脚本系统。

小蚁采用图灵完备的脚本方案,并通过以下的两个方法来避免图灵完备带来的问题:

  1. 限制每个脚本可执行的步骤,一旦脚本的执行超过了限制,就立刻判定为验证失败。由于任何节点在广播交易之前会首先验证它,因此超出步骤限制的脚本不会影响到全网的所有节点。
  2. 对于执行步骤很多的交易,收取较高的手续费,从而减少通过构造复杂脚本来发动拒绝服务攻击的情况。

解决了图灵完备带来的问题之后,小蚁的脚本系统可以应用于以下的一些场景:

  1. 智能合约:对合约的条件进行判断,满足条件后自动执行合约条款,比如股权质押贷款;
  2. 更高级的权限管理:利用脚本来对参与签名的密钥分配权限,完成比m-of-n更精密的权限管理;
  3. 彩票:脚本可以配合小蚁区块中的强随机数,实现彩票功能;
  4. 其它:图灵完备意味着只要你能想到的功能都可以实现。

关于脚本和智能合约,就先聊到这里。如果对你来说这些太简单了,那么欢迎牛人加入小蚁团队,我们的官网是:https://www.antshares.com/;如果你想了解多一些区块链领域的创新和投资机会,请加入小蚁社群的QQ群:23917224。10月份小蚁的众筹方案会在那里第一时间公布。

作者:达鸿飞  张铮文
责编:洒脱喜
稿源:资讯

上一篇: 脑钱包的生成方式
下一篇: Bitcoin XT的扩容实施方案及其影响
推荐专栏
web3首席知识博主
一位相信价值投资的币圈KOL。稳定盈利的缠论野生交易员 #BTC行情分析师 #价值投资 #链上数据分析
爱Web 3,爱生活,爱科技,爱炒币的老韭菜
热门币种
更多
币种
价格
24H涨跌幅
BTC比特币
¥264,810.46
37,103.37 USDT
+0.1%
ETH以太坊
¥14,413.37
2,019.50 USDT
0%
USDT泰达币
¥7.20
1.01 USDT
0%
BNB币安币
¥1,629.54
228.32 USDT
+0.63%
XRP瑞波币
¥4.32
0.60480 USDT
+0.45%
USDC
¥7.14
1.00 USDT
+0.04%
SOLSolana
¥400.45
56.11 USDT
+1.59%
OKBOK币
¥399.37
55.96 USDT
-1.23%
ADA艾达币
¥2.67
0.37480 USDT
-1.32%
DOGE狗狗币
¥0.55330
0.07753 USDT
-1.01%
热搜币种
更多
币种
价格
24H涨跌幅
Terra Classic
¥0.00
9.481E-5 USDT
-18.15%
Gala
¥0.18
0.025383 USDT
-4.86%
dYdX
¥22.63
3.1984 USDT
-0.73%
比特股
¥0.05
0.006569 USDT
-1.93%
PancakeSwap
¥15.60
2.2054 USDT
-2.16%
Conflux
¥1.08
0.1531 USDT
-2.36%
Filecoin
¥31.55
4.4597 USDT
-0.5%
FTX Token
¥29.65
4.1911 USDT
+15.24%
Yield Guild Games
¥2.56
0.3615 USDT
-0.55%
Shiba Inu
¥0.00
8.15E-6 USDT
-2.16%
比特币
¥262,467.38
37103.37 USDT
+0.1%
比原链
¥0.07
0.010022 USDT
-4.68%
最新快讯
更多
汇丰、恒生、渣打、富邦华一四家外资银行入围首批“数字人民币”业务试点名单
2023-11-28 19:06:57
摩根大通和Apollo计划建立代币化“企业主网”
2023-11-28 19:03:57
Nansen2公测版本上线,新增链上数据异动、智能搜索等功能
2023-11-28 18:59:52
西班牙公民需在明年3月底前申报其海外平台上加密货币持仓
2023-11-28 18:53:43
Nansen2已公开测试
2023-11-28 18:53:38
dYdX基金会:主网启动以来超过1645万DYDX被质押
2023-11-28 18:52:07
NicCarter等比特币倡导者发文:比特币挖矿是清洁能源和平衡电网的关键工具
2023-11-28 18:47:58
下载币界网APP