区块链网站|NFTS 比特币 比特币如何实现高性能智能合约?

比特币如何实现高性能智能合约?

广告位

比特币如何实现高性能智能合约

提到智能合约,很多人的第一反应是以太坊。甚至在维基百科搜索智能合约时,给出了以下定义:

智能合同(英文:Smart Contract)是一种特殊的协议,在区块链签订合同时使用。它包含代码功能,还可以与其他契约交互、决策、存储数据和发送以太坊。

显然,把智能合约仅仅定义为以太坊的一部分功能是有点偏的。相比之下,IBM给出的智能合约定义更准确,也更符合各种现代公链和合约:

IBM定义的智能合约:只是存储在区块链上的程序,当满足预定条件时就会运行。它们通常用于自动执行协议,以便所有参与者可以立即确定结果,而无需任何中间人的参与,也不会浪费时间。它们还可以自动完成工作流,并在条件满足时触发下一个操作。

总结就是:

1.储存在区块链

2.当满足某些条件时,将运行特定的逻辑。

3.运行逻辑不需要任何第三方参与。

所以,凡是符合这三点的,都可以算是智能合约。事实上,比特币、莱特币、Doge这些看似只能转让代币的,也符合智能合约的定义。其实他们的转移函数本身也是一种智能合约。

但我们通常不会认为只能转账的区块链是智能合约平台,主要是因为第二条款下的场景太少(满足一定条件时会运行特定逻辑),而且这个特定逻辑仅限于几个固定的场景。比如,比特币只有P2PKH、P2PK、P2SH等标准交易逻辑,可用场景也只有单签、多签等有限场景,执行逻辑无法根据开发者需求自由定制,比如更丰富的前置条件。因此,第四点应添加到更广泛的智能合同中:

4.图灵是完整的,可以执行任意逻辑。

账户模型、UTXO模型和智能合约账户模型知名的智能合约公链平台,如以太坊、EOS、Solana等。在它们的执行模式中都可以称为帐户模型。

模型非常好理解,和我们的支付宝账户、银行账户等是一种思维方式。每个人都有一个或多个“账户”,每个账户都有一个“余额”。

A-B转账的流程是从A账户余额中减去X,再从B账户余额中加上X(不考虑手续费)。如果在这种转移过程中加入一些逻辑条件,并设定满足某些条件,这种转移就可以发生,那么就形成了智能合同。以太坊里面有一个虚拟机,叫EVM。这个虚拟机是用来监控特定条件的,满足条件后会自动转账。因为这个虚拟机可以执行编程代码,所以只需要用计算机高级编程语言编写逻辑,部署到链上,就可以轻松实现任意逻辑。

因为这种账户模型非常接近面向对象编程,通过定义成员变量(各种余额数据)和方法(契约),可以很容易地实现任意逻辑。正因如此,市面上绝大多数智能合约平台运行的都是账户模式。

账户模型还有一个显著的弊端:如何保证分布式节点条件下虚拟机的一致性。因为以太坊上的所有合约都是由发送以太坊交易驱动的,接收交易的顺序会影响交易的结果。为了保证所有节点执行相同的逻辑,需要保证所有节点以相同的顺序接收事务,否则会造成混乱。显然,在分布式环境中,所有节点很难保持接收事务的一致性,尤其是在高频事务的场景下。如果A连续快速地向B发送10笔金额,则必须等到所有节点依次收到所有交易后才能完成结算。如果一个节点首先接收到第十个事务,它需要在处理第十个事务之前等待其他九个事务就绪。另外,每笔以太坊交易只能进行一对一的转账,在高频场景下,尤其是多对多的复杂情况下,难度很大。

为了突出以太坊的以下性能问题,我们假设以下场景:账号A给100个人发红包。如果用ETH发红包,一定要按顺序发给1号,2号,3号.需要构造100个事务,一个接一个发送,节点必须按顺序一个接一个处理。因为每次发都要等最后余额确认。所以他们1号和2号领红包的顺序就确定了。10号,他们只能在前面的人都收了之后才能收红包。

使用账户模型的传统互联网应用的应用必须配合数据库的强一致锁或强事务来实现账户修改的安全性。这个问题在分布式区块链中尤为突出。

核心原因是对账户的修改必须严格按照顺序进行,不同的顺序可能导致不同的执行结果(这也是为什么以太坊中的swap一直无法解决矿工争抢的问题,矿工可以在其他用户面前插入自己的交易来改变执行结果)。

UTXO模型UTXO模型是区块链主流采用的另一种模型。比特币、莱特币、DOGE等区块链都采用这种模式。

UTXO的意思是“未使用的事务输出”。这种模式与我们日常的现金(纸币和硬币)非常相似,可以看作是现金的改良版(顺便说一下,央行发行的数字货币在这里就是UTXO模式)。

区块链不是记录和维护某个地址的余额,而是记录每张钞票属于哪个地址。在比特币场景下,一个地址A的余额无法直接查询,需要统计有多少张钞票属于A,比如我们有一个钱包(真正的钱包),里面有一张10元、一张100元和一张1元的硬币,那么我们可以说我们钱包的余额是111元(而我们知道余额是由一张100元、一张10元和一张1元组成的)。换句话说,如果不计算每张钞票的面值,我们就是不知道钱包里有多少钱。

如何转移比特币?它也非常接近(但不完全相同)我们通常用现金支付的方式。还是刚才那个真钱包。如果A想付给B 1美元,那么A可以付给B 1美元,给他10美元买9个,给他100美元买99个。零钱不同于现金,或者可以说是一种进步。给A 10块钱拿回9块钱,不是让B找9块钱还给A,而是让A烧10块钱(销毁UTXO),然后系统会重新打印A给B的1块钱和A的9块钱(重建UTXO)。交易后,A的钱包里有一张100元的钞票、一张9元的钞票和一张1元的钞票,余额为110元。

根据上面的描述,我们可以知道,比特币的转移和收集是一个钱包中的纸币不断被淘汰和生成的过程。要知道比特币地址的余额,需要拿出这个钱包地址的所有纸币,计算所有面值并求和。

同时,比特币支持多对多交易。例如,A可以在一个事务中向DEF传输1个数据块:

1.拿出100面值烧掉。打印出99件并返还给A,1件返还给d。

2.拿出10张面值烧掉。打印出9份并返还给A,1份返还给e。

3.取出1张面值的烧掉。A的零钱不用找了,f的1块。

UTXO模型的神奇之处在于,上述三个步骤可以由三个不相关的事务发送(并行事务与顺序无关),也可以直接用一个事务进行发送。

相比以太坊,比特币要同时发给100个人,只需要一次交易就能让100个人同时收到钱。性能差距可想而知。所以我们可以理解为什么数字货币,央行,要用UTXO模型。不然深圳怎么会给5万个钱包发1000万数字人民币?

UTXO脚本控制一张UTXO(一定面值的钞票)是否可以销毁。控制粒度为UTXO(单钞)级别,交易没有顺序要求。因此可以进行多对多交易和并行交易验证,在现金转账场景下有极高的性能。

UTXO脚本智能化刚才提到的UTXO模型在并行化方面有很大的优势,扩展性能突出,但是为什么在UTXO的公链上很少看到智能合约?

主要是以下原因:

1.UTXO脚本编程很复杂。

2.BTC和其他公共链限制脚本类型、脚本卷等。

3.分布式状态管理很复杂。

让我们逐一解释。首先,很多人不知道比特币可以自由编程。从比特币的wiki可以看到,比特币有大量的操作码,看起来极其不友好,看起来非常像汇编语言。学过比特币脚本原理的人应该知道,能否花比特币的判断是通过一个栈结构来存储和校验的。

解锁脚本和锁定脚本依次放入堆栈,然后依次执行操作码。如果最终栈的返回值为真,那么这个UTXO可以花掉,否则不能花掉。

其实很多大家熟悉的编程语言,比如Java,rust,go等等,在计算机底层执行逻辑的时候也是堆栈结构。以Java为例。Java有堆栈内存和堆内存的概念。堆栈内存主要执行函数的内部逻辑,堆内存主要存储对象等数据。所以栈实际上可以执行任意逻辑,Java编译后的字节码就是在操作这个栈实现各种复杂的业务逻辑。

虽然比特币脚本使用的栈和虚拟机没有JVM复杂,但是几乎所有的图灵完整逻辑都可以通过一定的组合来实现。这里很多人会说比特币脚本没有无限循环,所以不是图灵完全。其实这是故意的,为了保证计算会产生一个结果。其实以太坊并不存在真正的无限循环等等。气体燃尽后循环会停止。比特币脚本做循环的时候,需要提前把循环反复写入脚本栈。如果你想做一个无限循环,你必须写一个无限长的脚本。这种交易显然没有意义。在实际的脚本编写中,比特币脚本会指定一个上限循环次数,以保证手续费在一个合理的范围内(和以太坊气体燃尽的原理一样)。

说到这里,我们来看看比特币脚本是如何实现一些智能合约的。典型的合同场景是ERC 721,即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并行处理能力的智能合约技术“meta xid Scheme”;

2.结合UTXO模型的优点,是区块链领域并发最高、执行成本最低的第一层链上的智能契约方案;

3.首次完成UTXO模型公链的效用图灵,可以满足所有Web3应用和元宇宙应用。

MVC如何解决这两个问题,后面可以详细解释。

关注更多币圈咨询。

广告位
本文来自网络,不代表区块链网站|NFTS立场,转载请注明出处:https://www.qklwz.com/btb/15875.html

作者: 币圈小哥

上一篇
下一篇

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部