比特币循环脚本
比特币脚本语言的特征. 比特币的编码语言使用"反向修饰"作为一种符号系统,这意味着诸如" 3 + 4"之类的行将越来越复杂地显示为" 3 4+"。另一个功能可以追溯到Bitcoin Script的" Forth-like"根源。此功能的相关性很简单,因为这两种语言都是"基于堆栈的"。 就可以运行这个脚本来验证交易是否有效。 比特币脚本被设计成以栈来运行的虚拟机指令,它只有有限的几种指令,并且故意被设计成没有循环、条件跳转,所以,比特币脚本不是图灵完备的语言。 比特币脚本的执行非常简单。 比特币系统中使用的脚本语言很简单,唯一能访问的内存空间就是一个栈,是基于栈的语言,这点和通用脚本语言的区别很大。 在blockchain.info上观察一个交易实例. 以下面这个交易为例: 这个交易有一个输入和两个输出,其中一个输出已经被花出去了,另一个没有被花出去。 上一篇 文章我们引入 UTXOset 和 Merkle Tree 对交易流程做了些许优化,本篇文章我们将介绍比特币另一个更加重要的机制 —— 交易脚本。在介绍 UTXO的文章 中,我们已经了解到比特币的交易输出由锁定脚本锁定,它只能被交易输出所被指向的交易输入中的解锁脚本所解锁,今天让我们来详细讨论一下
常规转账交易是这样的:A账上减¥200,B账上加¥200,在比特币区块链中,交易不是这么简单, 交易实际是通过脚本来完成,以承载更多的功能,这也是为什么比特币被称为是一种"可编程的货币"。本文就来分析一下交易是如何实现可编程的。 未花费的交易输出(UTXO) 先说一个概念:未花费的交易
比特币是图灵完备的吗?比特币现在不是图灵完备的,这是大家都知道的事实,但是比特币最初并不是现在这个样子。2010年加文在b 【King】比特币或许本来就是图灵完备的. 比特币; 合约; 分叉; 以太坊; 区块链; 数字货币; 图灵; 现金; 脚本 大家都有转过账,每笔交易是这样的:张三账上减¥200,李四账上加¥200。 在比特币区块链中,交易不是这么简单, 交易实际是通过脚本来完成,以承载更多的功能个,这也是为什么比特币被称为是一种"可编程的货币"。 比特币脚本语言包含许多操作码,但都故意限定为一种重要的模式——除了有条件的流控制以外,没有循环或复杂流控制能力。 这样就保证了脚本语言的图灵非完备性,这意味着脚本有限的复杂性和可预见的执行次数。 就可以运行这个脚本来验证交易是否有效。 比特币脚本被设计成以栈来运行的虚拟机指令,它只有有限的几种指令,并且故意被设计成没有循环、条件跳转,所以,比特币脚本不是图灵完备的语言。 比特币脚本的执行非常简单。
文章目录一、 概述二、 详细分析ps5.sct:reg99.sct:sp.txt其他三、 溯源分析四、 附录 一、 概述 5月8日,火绒实验室截获新型后门病毒。该病毒破坏性极强,入侵用户电脑后会执行多种病毒模块,以窃取用户比特币、门…
比特币交易脚本语言是一种基于逆波兰表示法的基于栈的执行语言(不知道逆波兰和栈的同学去翻大学数据结构课本,你也可跳过这个部分)。 比特币脚本语言包含基本算数计算、基本逻辑(比如 if…then)、报错以及返回结果和一些加密指令,不支持循环。 比特币的主要用例一直是加密货币和其价值转移。因此,图灵完备语言的附加特性是不必要的。然而,这并不意味着脚本是有限的。 此外,比特币脚本语言的局限性阻止了无限循环被包含在任何单一交易中。这一限制消除了拒绝服务(DoS)攻击网络的可能性。 比特币脚本被设计成以栈来运行的虚拟机指令,它只有有限的几种指令,并且故意被设计成没有循环、条件跳转,所以,比特币脚本不是图灵完备的语言。 比特币脚本语言包含基本算数计算、基本逻辑(比如if…then)、报错以及返回结果和一些加密指令,不支持循环。 脚本语言通过从左至右地处理每个项目的方式执行脚本。 下面用两个图说明下常见类型的比特币交易脚本验证执行过程:
然而,比特币的脚本语言并不是图灵完备的,即不支持循环语句,意味着比特币只能作为数字货币,不能直接支持智能合约及更复杂的去中心化应用。 区块链技术平台以太坊的脚本语言(Ethereum Virtual Machine code)就是图灵完备的;用EVM代码来建立应用,理论上
因为在比特币中,没有必要无限次地执行相同的计算,因为比特币的节点们实际上并不通过计算进行交易——而是验证交易。关于为什么会出现这种情况,Blockstream工程师罗素·奥康纳在三年前就发布了文章:对比特币和以太坊的脚本语言和理念进行比较,其中 比特币的交易模型 模型基本描述 前面一篇学习笔记01提到了一个交易模型(第三章的内容),在第五章中,除了对这个模型做个详细介绍之外,其实和我上一篇理解的交易模型差不多,一个交易包含输入与输出,比特币是在各个地址之间转移,不想中心化系统例如银行有个服务器,记录了每个人的 [导读] 在本文中,我们将详细讨论比特币交易的工作原理。我们将看到,比特币交易与现实世界中的交易略有不同。 1. 交易 比特币的图灵完备性. 如果您不能理解比特币的脚本系统,就不能理解中本聪对比特币的设计,就看不到比特币功能最强大的部分,也就领悟不了中本聪的那句话:"The nature of Bitcoin is such that once version 0.1 was released, the core design was set in stone for the rest of its lifetime"(比特币的性质是这样的,一旦 0.1
比特币交易脚本语言是一种基于逆波兰表示法的基于栈的执行语言(不知道逆波兰和栈的同学去翻大学数据结构课本,你也可跳过这个部分)。 比特币脚本语言包含基本算数计算、基本逻辑(比如 if…then)、报错以及返回结果和一些加密指令,不支持循环。
然而,比特币系统的脚本语言存在一些严重的限制: 缺少图灵完备性 - 这就是说,尽管比特币脚本语言可以支持多种计算,但是它不能支持所有的计算。最主要的缺失是循环语句。不支持循环语句的目的是避免交易确认时出现无限循环。 尽管以太坊是第一个拥有图灵完备智能合约的平台,但已经有可能使用一种称为「比特币脚本」(Script)的语言在比特币上创建基本合约。而比特币现金最近一直在改善其智能合约功能。尽管不如以太坊先进,但它们都以自己独特的方式和优势支持链上智能合约的存在。 我们以比特币区块链为例。 比特币使用脚本系统在比特币区块链上进行交易。脚本是一个简单的指令列表。 所以比特币的脚本语言使我们能够编写一个每个事务记录的脚本。 脚本的目的是定义收件人必须满足的要求才能访问正在传输的比特币。 比特币是安全的,因为它的脚本语言有限。因为比特币不可更改,因此是可靠且持久化的。 这并不意味着围绕比特币的开发者生态系统无法创新并无法支持Web 3.0。 随着加密产业朝着Web 3.0的方向发展,我们将认识到,我们逃离不了比特币的安全和网络效应。 比特币的分支. 通过以上原理介绍, 比特币是通过区块链技术将交易数据打包成块,再链接起来。对交易进行有效确认的记账人有机会获取比特币作为奖励。接下来就有一个问题?这个链上的数据可以认为的去控制吗? 也就是这个链可以出现分叉和分支吗? 而比特币的设计初衷是一个电子现金系统,其内置的脚本语言是专为资金转账交易而设计的,为了确保安全性故意放弃了图灵完备性(没有跳转、循环指令),因而仅仅是一个全球共享账本而非计算平台。 主要对脚本验证线程和任务调度线程进行了分析,下一篇文章我们将继续分析后面的代码,将这条主线延续下去。 比特币源码研读之二十一_凤梨财经 免责声明:凤梨财经作为开放的信息发布平台,所提供的所有内容与凤梨财经观点和立场无关,且不构成任何投资