http://www.fsfzs.com

Miniscript:让365bet取款_365bet _皇冠365bet下载币编程更便捷高效的“神器”

365bet取款_365bet _皇冠365bet下载币为世界带来了首个智能合约开发语言——Script,其能够让不同的加密货币在不同的编程环境下被使用。然而这一概念在极具颠覆性的同时,使用起来却有一定难度,特别是在较为复杂的花费环境下。无论是编写较为复杂的智能合约,还是验证合约是否正确运行其职能,都很容易出现人为错误,在关系到资产安全的情况下,对于脚本程序运行条件正确性的验证变得尤为重要.

在过去的一年中,区块链工程师Andrew Poelstra, Pieter Wuille(365bet取款_365bet _皇冠365bet下载币核心开发人员、同时也是隔离见证机制SegWit创建者)和Sanket Kanjalkar开始着手改进这一点。通过将Script语言拆分简化,保留其最基本的要素和功能,优化出了新的编程语言——Miniscript——减少了原编程语言的复杂性,让所有进行365bet取款_365bet _皇冠365bet下载币编程的人们获得更安全、便捷的体验。

从理论上来讲Miniscript相比Script有了更多的明确的使用条件和限制,但实际上人们可以用它完成任何Script所能做的事情。Blockstream研发主管以及Miniscript联合设计者Andrew Poelstra表示。

Miniscript:让365bet取款_365bet _皇冠365bet下载币编程更便捷高效的“神器”

SCRIPT

我们首先来简单了解一下Script语言。

每一笔365bet取款_365bet _皇冠365bet下载币交易都包含两个主要部分:输入和输出,二者都有自己的代码,输入“解锁”了代币,而输出将代币再次“锁住”,并规定了下一次被解锁再次进行交易输入的条件,在这些条件中通常包括一个有效的加密签名,更多的可能条件例如:该365bet取款_365bet _皇冠365bet下载币必须经过一定的时间后,或必须含有特殊的密码才能被使用或花费。

交易中的这段代码就是用Script创建的,Script是专门为365bet取款_365bet _皇冠365bet下载币设计的编程语言。其灵感来自于Forth,一种20世纪60年代发明的编程语言,最初设计用来操作射电望远镜。不过,Script在经过调整之后更加契合365bet取款_365bet _皇冠365bet下载币。

例如,Script中没有使“循环”的操作码:该语言不支持无限次执行相同的计算。因为在365bet取款_365bet _皇冠365bet下载币中,没有必要无限次地执行相同的计算,因为365bet取款_365bet _皇冠365bet下载币的节点们实际上并不通过计算进行交易——而是验证交易。关于为什么会出现这种情况,Blockstream工程师罗素·奥康纳在三年前就发布了文章:对365bet取款_365bet _皇冠365bet下载币和以太坊的脚本语言和理念进行比较,其中进行了较为详细的解释。

同时Script并没有被“类化”,这意味着计算的结果可以以不同的方式被注释和使用,举个很简单的例子,一个有效签名的结果可能是“true”,而“true”可以被注释转化等于数字“1”进而用于数学程式中,true=1,而true+true则可以被看成1+1=2,意味着如果交易最少需要两个有效签名进行验证,则其满足了这个条件。

这其实为我们引入了Script语言中最重要的一个属性——“难以推理” 这基本意味着Script的计算结果能够以多种方式被注释转化,即使一个签名是无效的,在Script中其仍可以出于某些原因将其编写为有效。

在Bitcoin Script中的确有一些运算码在运行时闹出荒唐事,例如,将一个签名解释为真/假值,在此之后将该布尔值转化为数字(例如1/0)后编入堆栈索引中,再根据这一数值将堆栈重新排列,然而在实际运行过程中其具体规则是非常荒唐可笑的,Poelstra解释道。

这样一来在通过Script处理一些问题时会很棘手,尤其是在花费代币的要求变得更加复杂时,一笔交易的发起者的代码中可能会无意中包含了允许代币在其他条件下被使用的信息,反过来也就是说,交易的收款方有可能因为没有注意到这样的“漏洞”而被发现这样信息的攻击者攻击受到损失。

总结来说,当前Bitcoin Script的最大问题是在对较为复杂的程序进行验证时比较困难。

问题的具体举例

关于以上的问题如何限制了Script的实用性,下面我们举一个具体一些的例子。

365bet体育官网Blockstream Green Wallet钱包有一个标准的“共同签名”设置,钱包用户掌控 2 个密钥中的一个,Blockstream掌控另一个,这样一来钱包中的数字资产能够通过两种方式被使用。用户想要使用资产:用户签署了该笔交易并请求Blockstream一并签署,通常Blockstream都会通过执行(经过邮箱或短信验证码二次确认后);但可能发生的一种情况是:Blockstream这一端出现了问题——如公司跑路或者丢失了密钥,或出于其他原因无法签署。在这样的情况下,用户需要使用一个备用方案来完成这笔交易:如在锁定时间过后,用户可以在预定时间过后完成该笔交易。

这样的解决方案似乎可行,但仍会受到限制,比如用户将无法再使用任何其他365bet取款_365bet _皇冠365bet下载币的潜在智能合约,或在其终端增加更多灵活可扩展的设置。

现在Green有一个适用于所有客户的预备脚本,基本上就是一个简单的多重签名,但是我们并不真正在乎脚本讲了什么,我们在乎的是,在规定时间内,交易代币是否有可能在不需要我们签名的情况下被交易?如果用户提出一些与常人不同的要求,但只要原则上这些要求是我们关心和在乎的,我们就应该满足和支持。

举个例子,一些用户以防有什么意外发生,希望让他的另一半或家人在一年后能够继承使用这笔资产;或以用户是一家公司为例,其希望创建一个使用机制,例如需要三分之二或更多的董事会成员权限才能共同使用资产。

当然从技术上来讲,在365bet取款_365bet _皇冠365bet下载币脚本语言中以上的情况都是可以被实现的,但这将需要用户设计一个自定义程序,而Blockstream(资产托管方)也需要确保参与其中。

这样就太复杂了,“如果用户任意提供给我们一个脚本语言,我们几乎无法确定其是否满足了我们所关心在乎的那个运行条件,因为所有脚本行为的组合非常复杂,举个例子,假如用户提供的一个脚本程序看上去需要一个签名进行认证,但我们还需要考虑,如果用户提供了一个non-signiture会发生什么情况?其是否会触发其他条件使资产能够被调用?等等。”Poelstra解释道。

Miniscript

在过去的一年中,Poelstra、Blockstream 核心技术工程师Pieter Wuille和Sanket Kanjalkar设计了Miniscript,Miniscript官方并不属于Blockstream的产品。

简而言之,Miniscript是一个“删减版”的Script:从Script工具包Script toolkit中整合选择了更加易用和易于被验证的工具,而除去极少数基本无人使用的工具外,几乎所有Script能干的事Miniscript也能干。本质上来讲,一行Miniscript的代码仍可以看作等于一行有效地Script代码,只不过Miniscript通过防止代码出现意料之外结果而尽可能的减少Bug的出现。

就拿我们上面提到过的问题来说,用户可以利用Miniscript更加容易地设计出一个便于Blockstream验证其是否满足运行条件的设置,详细来讲,Blockstream能够更加清晰地明白用户资产的被使用条件,如,要么签名通过,要么时间到了,不管用户在其自定义程序端还夹杂了任何其他附加条件,如额外的时间要求、多重签名等,说白了,使用了Miniscript,在Blockstream端来看可以免去那些花里胡哨的,可能影响验证条件或偷换概念的东西,更干净利落。

Miniscript语言非常直接且可预测,其程序总能导向一个决策树,将程序很清楚的呈现出来,就像图像编码,易于推理。

Miniscript:让365bet取款_365bet _皇冠365bet下载币编程更便捷高效的“神器”

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。