区块链:一文探讨如何在比特币实现高性能智能合约?

提起智能合约,很多人的第一反应就是以太坊,甚至在维基百科中搜索智能合约的时候,都会给出如下的定义:智能合约:是一种特殊协议,在区块链内制定合约时使用,当中内含了代码函数(Function),亦能与其他合约进行交互、做决策、存储资料及发送以太币等功能。显然将智能合约仅仅定义为以太坊功能的一部分有点以偏概全,相比之下,IBM给出的智能合约定义更为准确,更符合现代各类层出不穷的公链和合约:IBM定义的智能合约:只是存储在区块链上的程序,在满足预先确定的条件时会运行这些程序。它们通常用于自动执行协议,以便所有参与者都可以立即确定结果,而无需任何中间人参与,也不会浪费时间。它们还可以自动完成工作流程,在满足条件时触发下一个操作。总结就是:1.存储在区块链上2.在满足特定条件下会运行特定逻辑3.运行逻辑不需要任何第三方参与因此满足这三点的都可以看作是智能合约。其实比特币,莱特币以及Doge这些看起来只能转账代币的区块链系统也是满足智能合约的定义,其实它们的转账功能本身也是智能合约的一种。但是我们通常不认为只能转账的区块链是智能合约平台,主要因为它们在第二条下的场景太少,这个特定逻辑被缩限在几种固定的场景,例如比特币只有P2PKH,P2PK,P2SH等等标准交易逻辑,能够使用的场景无非也就是单签,多签等很有限的场景,无法根据开发者的需要自由定制执行逻辑,比如更丰富的前提条件,更复杂的逻辑控制,更灵活的合约间交互等等。因此更广泛意义上的智能合约还要加上第四点:4.图灵完备,可以执行任意逻辑账户模型、UTXO模型与智能合约

何一:币安近期上线的代币走低是由于市场行情低迷:7月2日消息,针对币安近期上线的代币不断走低,币安联合创始人何一在推特上表示,市场行情低迷,近期上线大小代币都在跌,大部分代币价格跌幅达80-90%,包括所有受追捧的天王级项目。MAV第一笔成交价格定在0.05,是考虑了市场行情冷淡,呼吁用户不要轻信社区喊单,一味追高;按照上一个周期历史IEO第一天也就是几倍,拉到10倍、20倍不符合市场现状,请自行做好研究。此外何一表示,币安上线数百个代币,代币价格不受币安控制,价格受买卖盘双方影响。[2023/7/2 22:13:27]

账户模型

我们熟知的智能合约公链平台,例如以太坊,EOS,Solana等在执行方式上都可以称作账户模型。账户模型非常容易理解,和我们的支付宝账户,银行账户等等是一种思维方式,每个人有一个或多个「账户」,每个账户有一个「余额」。A->B转账的过程就是从账户A的余额中减去X,然后再从账户B的余额中增加X。如果给这个转账过程增加一些逻辑条件,设定满足特定的条件,这个转账才能发生,那么就形成了智能合约。以太坊内部有一个虚拟机,被称为EVM,这个虚拟机就是用来监听特定的条件,满足条件之后,自动执行转账。因为这个虚拟机可以执行编程代码,因此只需要用计算机高层编程语言编写逻辑,并且部署到链上就可以轻松实现任意的逻辑。这种账户模型因为非常贴近面向对象的编程方式,只需要定义成员变量,以及方法,就可以轻松实现任意逻辑。也正因如此,市面上的绝大多数智能合约平台都是运行在账户模型之上。账户模型也有一个很显著的弊端:就是虚拟机在分布式节点的条件下如何保证一致性。由于以太坊上所有的合约都是由发送以太坊交易来驱动的,因此收到交易的顺序会影响交易的结果,为了保证所有节点都执行相同的逻辑,就必须保证所有节点收到交易的顺序是一致的,如果不一致则会造成混乱。显然,在分布式的环境下,所有节点很难保持接收交易的一致性,尤其是高频交易的场景下,如果A给B连续快速发送10笔金额,必须要等到所有节点按顺序接收到所有交易后,才能结算完成。如果某个节点先收到了第十笔交易,那么就需要等待其他9笔交易都就位之后,才能处理第十笔。另外,每笔以太坊交易只能进行1对1转账,在高频场景,尤其是多对多的复杂情形下,非常吃力。为了突出以下以太坊的性能问题,我们假设以下场景,A账户要给100个人派发红包。如果使用ETH来发红包的话,必须按照顺序发送给1号,2号,3号...需要构造100个交易,一个接着一个进行发送,节点也必须一个接着一个按次序处理。因为每次发送都要等待上一次余额确定,因此1号,2号他们收到红包的顺序是确定的,100号只有等前面的人都收到红包之后,才能收到红包。传统互联网应用使用账户模型的应用,都要配合数据库的强一致锁,或者强事务等来实现账户修改的安全,这个问题放在分布式的区块链上就格外显著。核心原因就是,对账户的修改必须遵照严格的顺序来执行,顺序的先后不同可能会导致执行结果的千差万别。UTXO模型

加拿大监管机构提醒该国公民警惕以假监管机构背书的加密平台:6月21日消息,加拿大证券管理局发布投资者警告,称建议加拿大公民仔细检查加密货币交易服务提供商,因为这些平台可能会使用“虚构的”监管机构来提高其可信度。一些“所谓的”加密平台声称得到了某些监管机构或争议解决组织的批准,“以显得合法”;这些网站乍一看似乎是可信的,涉及投诉处理、纠纷解决和为受害投资者提供补救措施,但经过仔细检查,这些网站的语言可能很尴尬且未经修饰,存在拼写、语法或句法错误,这是非法实体的常见‘危险信号。

监管机构还建议,考虑投资加密货币的公民应该将这些公司与在CSA注册的公司进行对比检查。目前,有12个加密交易平台被授权在加拿大开展业务,而有11个平台已经提交了预注册承诺。[2023/6/21 21:52:03]

UTXO模型是另一种主流区块链采用的模型,比特币,莱特币,DOGE等区块链采用的是这种模型。UTXO的意思是「未花费交易输出」。这种模型非常类似我们日常使用的现金,可以看做一种改良版的现金。区块链并不记载和维护某个地址有多少余额,记载的是一张张钞票是属于哪个地址。比特币的场景下,某个地址A的余额不能直接查询到,需要统计有多少张钞票是属于A的。比方说,我们有一个钱包,里面放了一张10元,一张100元,还放了一个1块的硬币,那么我们可以说,我们的钱包余额是111元,换言之,如果不去计算每一张纸币与面值,仅凭钱包本身是不知道有多少余额的,这与以太坊支付宝之类的账户模型有很大不同。比特币转账的时候怎么转呢,同样很接近我们平时使用现金支付的样子。还是刚才的真钱包,如A要给B付1块钱,那么A有3种方法可以付给B,给他1块,给他10块找回9块,给他100块找回99块。找钱这一点与现金不太一样,或者可以说是改良的地方。A给B10块找回9块,并不是让B找出来9块钱还给A,而是A把10块钱烧掉,然后由系统重新印出一张1块给B,印出一张9块给A。经过交易后,A的钱包有一张面值100的钞票,一张面值9块的钞票,还有一张1块,余额是110块。根据上面的描述,我们可以知道,比特币的转账和收款就是钱包里的纸钞不断消灭和生成的过程。需要知道比特币地址的余额,就需要把这个钱包地址的所有钞票拿出来,计算所有面值并求和。同时,比特币支持多对多交易,比如说可以一笔交易让A同时给DEF转账1块:1.拿出100面值烧掉,印出99块还给A,1块给D。2.拿出10块面值烧掉,印出9块还给A,1块给E。3.拿出1块面值烧掉,不找零给A,1块给F。UTXO模型神奇之处就在于,上面3个步骤可以分三个不相关的交易来发送,也可以直接使用1个交易来进行发送。对比以太坊,比特币要同时发送给100个人,只需要一笔交易就可以让100个人同时收到钱,性能差距可想而知。这样就理解为什么央行数字货币使用的是UTXO模型了,不然深圳怎么给5万个钱包发送1000万数字人民币?UTXO脚本控制,一个UTXO可不可以被销毁,控制的粒度是UTXO的级别,对交易没有顺序要求,因此可以进行多对多交易以及并行交易校验,在现金转账的场景下有极高的性能。UTXO脚本智能化

硅谷银行证券管理层正探索从母公司手中回购该公司的选项:3月12日消息,据知情人士透露,硅谷银行投行部门的管理层正在探索从母公司手中回购该公司的选项。上述人士表示,硅谷银行证券负责人Jeff Leerink及其团队正在寻求帮助,为潜在的管理层收购该公司提供资金。其中一位知情人士表示,在监管机构接管硅谷银行后,他们正急于达成一项快速交易,因为监管机构正寻求对其剩余部分进行收购。(彭博社)[2023/3/12 12:57:53]

刚才提到的UTXO模型在并行化上面有极大的优势,具备突出的拓展性能,但是为什么我们在UTXO的公链上很少能够看到智能合约呢?主要是以下几点原因:1.UTXO脚本编程较为复杂2.BTC等公链限制了脚本类型,脚本体积等3.分布式状态管理较为复杂我们逐个解释一下。首先很多人并不知道,其实比特币是可以自由编程的。我们从Bitcoin的wiki可以看到,Bitcoin有大量操作码,这种操作码看上去及其不友好,长得非常像汇编语言。学习过比特币脚本原理的人应该知道,能不能花费比特币的判断是通过一个栈式结构来存储和校验的。

关于Voyager向Binance.US出售资产听证会将在周五继续进行:金色财经报道,法官和债权人就该经纪人向Binance.US出售资产的提议进行八个小时的证词,法官Michael Wiles仍未对重组协议做出裁决,听证会将于周五在纽约南区的美国破产法院继续进行。

律师表示,重组计划获得了97%的投票债权人的批准,尽管只有6%的Voyager债权人实际投票。据Voyager债务人的一名律师称,目前超167,000名Voyager客户已经注册了Binance.US平台。此外,美国证券交易委员会和纽约监管机构均反对该项重组计划。

此前报道, Voyager破产法官表示,SEC反对BinanceUS的收购交易“是一种掩饰”。[2023/3/3 12:40:24]

栈中依次放入解锁脚本和锁定脚本,然后依次执行操作码,如果最终栈的返回值是true,那么此UTXO可花费,反之不可花费。其实我们熟悉的很多编程语言,在计算机底层执行逻辑的时候,也是栈的结构,比如Java,rust,go等等。以Java为例,Java存在栈内存和堆内存的概念,栈内存主要执行函数内部逻辑,堆内存主要存放对象等数据。由此可见,栈实际上是可以执行任意逻辑的,Java编译之后的字节码就是在操作这个栈来实现各种复杂的业务逻辑。比特币脚本使用的栈和虚拟机虽然不如JVM那么多复杂特性,但是通过一定的组合也是可以实现几乎全部的图灵完备逻辑。这里很多人会说比特币脚本没有死循环,因此不是图灵完备。实际上这是故意为之,为了保证计算一定会产生一个结果。其实以太坊等也没有真正的死循环,gas烧尽之后循环就会停止,比特币脚本在做循环的时候,需要预先将循环重复写入到脚本栈中,想做死循环,就要写一个无限长的脚本,这种交易明显是毫无意义的,在实际的脚本编写中,比特币脚本都会指定一个上限循环次数,确保手续费在合理的范围内。说了这么多脚本栈,我们来看看比特币脚本如何实现一些智能合约。一个最典型的合约场景就是ERC721,就是NFT合约。以太坊场景下要创建NFT,首先要部署一个合约账户,然后所有的NFT所有权由这个账户管理,所有此NFT的转账都要和这个NFT合约账户交互。在UTXO模型下,我们设计这样一种UTXO,它内部存在一段数据和代码,标记此UTXO代表什么NFT,谁可以解锁,怎么销毁它,怎么保证上限,那么这个UTXO就可以代表这个NFT。拥有这个UTXO的人就拥有了这个NFT。想要转账这个NFT,你就必须用私钥签名达成解锁条件,然后由比特币矿工来执行你的脚本,判断你是否可以转账这个UTXO。更重要的是,同一个系列的NFT,是分散在不同的UTXO中的,因此只要从分布式全局状态中找出满足特定条件的UTXO,就可以判断出NFT都属于谁。这些NFT的转账可以并行,并且互相之间不会产生影响,这也就提供了最高的性能。因此比特币合约的思想,就是使用单个UTXO脚本栈来存储状态和逻辑,整体状态由一批UTXO的状态共同组成,相对应以太坊的合约状态仅存在于一个账户中,对比之下,比特币的合约就拥有了和UTXO一样级别的并发能力,也就为大规模的高性能使用打下了基础。不考虑脚本体积和实用性以及客户端限制的话,在比特币上实现上上述逻辑从理论上是完全可行的,但是由于UTXO的独立特性,实际工程中会遇到两个难题,一个是UTXO互相感应的问题,另一个是合约溯源防伪的问题,这两个问题都被MVC链给巧妙解决了,因此可以最终实现可实用的高性能UTXO模型智能合约。MVC是一条完美实现比特币+高性能智能合约的Web3公链:1.采用兼容UTXO并行处理能力的一层智能合约技术「MetaTXID方案」;2.结合了UTXO模型优势,是区块链领域上并发性最高,执行成本最低的Layer-1链上智能合约方案;3.首次实现了UTXO模型公链的实用性图灵完备,可满足一切Web3应用和元宇宙应用的使用场景。MVC如何解决这两个问题,可以参阅官网白皮书或者等之后详细解释。注:本文节选部分章节自知乎文章《浅谈比特币UTXO模型和以太坊账户模型的优劣》。原地址

BlockFi:公司是独立于FTX的商业实体,产品“功能齐全”:金色财经报道,在币安宣布计划收购加密货币公司FTX之后,加密贷款公司BlockFi表示,其所有产品都“功能齐全”。

FTX一直在经历原生代币FTT的急剧下降,在今年早些时候的信贷紧缩导致加密货币市场上几家贷款公司破产后,FTX宣布有意收购BlockFi。在Three Arrows Capital破产后,BlockFi同意与FTX达成潜在收购协议,FTX为BlockFi提供了4亿美元的信贷额度。

BlockFi创始人Flori Marquez在推特上表示,该公司目前是独立于FTX的商业实体,“至少到2023年将保持独立实体的状态。”(the block)[2022/11/9 12:34:58]

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

金星链

[0:0ms0-0:744ms