主页 > imtoken苹果版官网 > 比特币中的 UTXO 和智能合约

比特币中的 UTXO 和智能合约

imtoken苹果版官网 2023-06-06 05:43:30

*正如我们前面提到的,比特币本质上是一种加密的分布式账本。 传统账本是基于账户体系实现的。 比如有两个人,张三和李四,我们会为他们每人创建一个账户,记录余额。 如果他们在两者之间转移资金,他们通常使用复式记账。 假设张三要转200元给李四,系统会做如下操作:

检查张三账户余额是否充足,如果不足200元,则终止交易,并向张三报告“余额不足”。 张三账户减去200元(假设手续费为零)李四账户加200元

这种系统很常见。 无论是银行、信用卡、证券交易系统,还是互联网第三方支付系统,其核心都是基于账户设计,以关系数据库为支撑。 通常,操作的原子性是通过数据库的事务来实现的,以保证转账双方的余额变化同时成功或失败。

但是比特币并不是设计成基于账户的系统,而是发明了 UTXO 方案。

未交易输出

UTXO的全称是Unspent Transaction Output,译为“未使用的交易输出”,是中本聪的伟大发明。 在比特币账本系统中,其实并没有所谓的“余额”。 它只有UTXO。 所谓用户的余额,就是他拥有的所有UTXO的总和。 余额只不过是比特币中的一个抽象概念。 其实仔细想想你会发现,比特币用UTXO来表示余额,更接近于我们日常生活中的“现金”。 通常,当有人问你钱包里有多少钱时,你通常会先数一数钱包里有多少钱。 100元一张,50元多少张比特币智能合约,20元多少张……然后你把这些硬币加起来,告诉他一共。 事实上,你钱包里的纸币就是 UTXO,这也是中本聪将比特币描述为“点对点电子现金系统”的原因。 因为它的账本结构比我们现在的电子银行系统更像现金。

比特币交易都是基于 UTXO。 存储在比特币区块链账本中的是一笔接一笔的交易。 每笔交易都有若干交易输入(资金来源),同时也会产生一个或多个交易输出(资金去向)。 那么这里的输入输出其实就是UTXO。

比特币交易遵循几条规则:

除了挖矿(coinbase transaction),所有的资金来源都必须来自之前一笔或几笔交易的UTXO,可以理解为一个特殊的链表。 UTXO 是一笔交易的最小单位,不可分割。 任何交易中的交易输入总量必须等于交易输出总量,且等式两边必须平衡。 比特币没有余额的概念,只有分散在区块链中的 UTXO。

当钱从一个地址转移到另一个地址时,所有权链就形成了,就像这样:

比特币智能合约_比特币合约多空比在哪看_比特币合约模拟交易app

智能合约

*很多刚接触区块链的人认为智能合约是以太坊的发明。 事实上,智能合约是比特币的又一伟大发明。 事实上,比特币交易是通过智能合约完成的,智能合约在比特币中被称为“交易脚本”。

*比特币交易是先提供一个解锁UTXO的脚本,也称为交易输入,交易的输出指向一个锁定脚本。 这个脚本表示:谁的签名能匹配输出地址,钱就付给谁。 同城开锁用私钥,加锁用对方公钥。

每个比特币节点将通过同时执行解锁和锁定脚本(不是当前的锁定脚本,而是之前交易的锁定脚本)来验证交易。 如果脚本组合的结果为真,则为有效交易。

当解锁版脚本与锁定版脚本的设置条件匹配时,执行组合有效脚本时结果显示为真

顺带一提,比特币脚本语言包括基本的算术运算、基本的逻辑运算、错误报告、返回结果,以及一些加密指令。 它不支持循环,所以它不是图灵完备的,而且它能做的事情非常有限。 后来,以太坊找到了更好的解决这个问题的方法,开发了支持图灵完备语言的以太坊虚拟机(EVM),大大增强了其智能合约的功能。

脚本语言通过从左到右处理每一项来执行脚本。

下面两张图说明了常见类型的比特币交易脚本的验证执行过程:

比特币智能合约_比特币合约模拟交易app_比特币合约多空比在哪看

上图是解锁脚本的运行过程(主要是入栈)

比特币合约多空比在哪看_比特币合约模拟交易app_比特币智能合约

上图展示了锁定脚本的运行过程(主要是出栈)比特币智能合约,最终结果为true,说明交易有效。

比特币使用脚本发送和确认交易的方式其实就是智能合约的雏形,也是比特币能够去中心化的一个重要原因,因为交易的规则都是用脚本写成的,每个节点都可以很容易的按照规则来做。 来验证交易。