比特币自动交易脚本-金沙1005

比特币自动交易脚本_什么叫区块链的合约交易最新内容会更新在主站"深入浅出区块链社区"原文链接:"比特币脚本及交易分析智能合约雏形"大家都有转过账,每笔交易是这样的:张三账上减¥200,李四账上加¥200。在比特币区块链中,交易不是这么简单,交易实际是通过脚本来完成,以承载更多的功能个,

最新内容会更新在主站深入浅出区块链社区
原文链接:比特币脚本及交易分析 – 智能合约雏形

大家都有转过账,每笔交易是这样的:张三账上减¥200,李四账上加¥200。
在比特币区块链中,交易不是这么简单,交易实际是通过脚本来完成,以承载更多的功能个,这也是为什么比特币被称为是一种“可编程的货币”。
本文就来分析一下交易是如何实现可编程的。

未花费的交易输出(utxo)

先引入一个概念:未花费的交易输出——utxo(unspent transaction output)

其实比特币的交易都是基于utxo上的,即交易的输入是之前交易未花费的输出,这笔交易的输出可以被当做下一笔新交易的输入。

挖矿奖励属于一个特殊的交易(称为coinbase交易),可以没有输入。
utxo是交易的基本单元,不能在分割。
在比特币没有余额概念,只有分散到区块链里的utxo

随着钱从一个地址被移动到另一个地址的同时形成了一条所有权链,像这样:

比特币脚本

比特币交易是首先要提供一个用于解锁utxo(用私钥去匹配锁定脚本)的脚本(常称为解锁脚本:signature script),这也叫交易输入,
交易的输出则是指向一个脚本(称为锁定脚本:pubkey script),这个脚本表达了:谁的签名(签名是常见形式,并不一定必须是签名)能匹配这个输出地址,钱就支付给谁。

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

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

如最为常见类型的比特币交易脚本(支付到公钥哈希:p2pkh(pay-to-public-key-hash))组合是这样:
script

常见交易脚本验证过程

比特币交易脚本语言是一种基于逆波兰表示法的基于栈的执行语言(不知道逆波兰和栈的同学去翻大学数据结构课本,你也可跳过这个部分)。

比特币脚本语言包含基本算数计算、基本逻辑(比如if…then)、报错以及返回结果和一些加密指令,不支持循环。想了解更多语言细节可参考:比特币脚本

脚本语言通过从左至右地处理每个项目的方式执行脚本。

下面用两个图说明下常见类型的比特币交易脚本验证执行过程:
script_run1
上图为解锁脚本运行过程(主要是入栈)
script_run2
上图为锁定脚本运行过程(主要是出栈),最后的结果为真,说明交易有效。

交易分析

实际上比特币的交易被设计为可以纳入多个输入和输出。

交易结构

我们来看看完整的交易结构,
比特币自动交易脚本_什么叫区块链的合约交易

交易的锁定时间定义了能被加到区块链里的最早的交易时间。在大多数交易里,它被设置成0,用来表示立即执行。
如果锁定时间不是0并且小于5亿,就被视为区块高度,意指在这个指定的区块高度之前,该交易不会被包含在区块链里。
如果锁定时间大于5亿,则它被当作是一个unix纪元时间戳(从1970年1月1日以来的秒数),并且在这个指定时间之前,该交易不会被包含在区块链里。

交易的数据结构没有交易费的字段,交易费通过所有输入的总和,以及所有输出的总和之间的差来表示,即:

交易费 = 求和(所有输入) – 求和(所有输出)

交易输入结构

刚刚我们提过输入需要提供一个解锁脚本,现在来看看一个交易的输入结构:
比特币自动交易脚本_什么叫区块链的合约交易

我们结合整个交易的结构里看输入结构就是这样子:
比特币自动交易脚本_什么叫区块链的合约交易

交易输出结构

刚刚我们提过输出是指向一个解锁脚本,具体交易的输出结构为:
比特币自动交易脚本_什么叫区块链的合约交易
我们结合整个交易的结构里看输出结构就是这样子:
比特币自动交易脚本_什么叫区块链的合约交易

交易哈希计算

在比特币区块结构merkle 树及简单支付验证分析 讲到区块结构,区块结构包含多个交易的哈希。
那么交易哈希是怎么计算的呢?

  1. 交易结构各字段序列化为字节数组
  2. 把字节数组拼接为支付串
  3. 对支付串计算两次sha256 得到交易hash

了解详情可进一步参考如何计算交易hash?及如何创建hash?

现在是不是对完整的交易到区块有了更清晰的认识。

智能合约雏形 – 应用场景说明

由于交易是通过脚本来实现,脚本语言可以表达出无数的条件变种。

比特币的脚本目前常用的主要分为两种,一种是常见的p2pkh(支付给公钥哈希),另一种是p2sh(pay-to-script-hash支付脚本哈希)。
p2sh支付中,锁定脚本被密码学哈希所取代,当一笔交易试图支付utxo时,要解锁支付脚本,它必须含有与哈希相匹配的脚本。

这里不展开技术细节,下面说明一些应用场景,以便大家有更直观的认识。

  • 多重签名应用
    合伙经营中,如只有一半以上的的股东同意签名就可以进行支付,可为公司治理提供管控便利,同时也能有效防范盗窃、挪用和遗失。

用于担保和争端调解,一个买家想和他不认识或不信任的某人交易,在一般情况交易正常进行时,买家不想任何第三方参与。那交易双方可以发起支付,但如果交易出现问题时,那第三方就可以根据裁定,使用自己的签名和裁定认可的一方共同签名来兑现这笔交易。

  • 保证合同
    保证合同是建造公众商品时的集资办法,公众商品是指一旦建成,任何人都可以免费享受到好处。标准的例子是灯塔,所有人都认同应该建造一个,但是对于个人航海者来说灯塔太贵了,灯塔同时也会方便其他航海者。
    一个金沙1005的解决方案是向所有人集资,只有当筹集的资金超过所需的建造成本时,每个人才真正付钱,如果集资款不足,则谁都不用付钱。
  • 依靠预言
    假如老人想让他孙子继承遗产,继承时间是在他死后或者在孙子年满18岁时(也是一个带锁定时间交易),无论哪个条件先满足,他的孙子都可以得到遗产。
    因为比特币节点可依靠预言对死亡条件进行判断,预言是指具有密钥对的服务器,当用户自定义的表达式被证明是真的,它能按照要求对交易签名。

相信随着区块链的普及,会对未来的交易模式和商业结构带来巨大的影响。不过由于比特币的脚本语言不是图灵完备的,交易模式依旧有限,以太坊就是为解决这一问题而出现,后面我们会有大量介绍以太坊的文章。

参考文献 & 补充阅读

  1. 精通比特币
  2. 廖雪峰的深入理解比特币交易的脚本
  3. 比特币合同
js555888金沙老品牌的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由思创斯整理,转载请注明出处:https://ispacesoft.com/370076.html

(0)


相关推荐

  • 《计算机组成原理》基础概念笔记整理「终于解决」《计算机组成原理》复习整理以下我将使用笔记的方式,将整本书重点整理一下,或许会有纰漏,望大家多多包涵。第一章计算机系统概论计算机的硬件:计算机中的电子电路和物理装置;计算机硬件的五大部分:运算器、控制器、存储器、输入设备和输出设备;计算机的软件:计算机运行所需的程序及相关的资料;软件系统:一台计算机中的全部程序的集合;计算机软件的分类(按功能划分):应用软件和系统软件;系统…

  • verilog中integer是什么数据类型_verilog抽象数据类型givena100-bitinputvector[99:0],reverseitsbitordering.说明:整数(integer)integer类型也是一种寄存器数据类型,integer类型的变量为有符号数,而reg类型的变量则为无符号数,除非特别声明为有符号数,还有就是integer的位宽为宿主机的字的位数,但最小为32位,用integer的变量都可以用reg定义,只是用于计数更方便而已。reg,integer,real,time都是寄存器数据类型,定义在veril.

  • java 二维码_二维码表示的信息比一维码多[通俗易懂]文章浏览阅读1.4k次。一维码packagecom.doll.barcode;importcom.google.zxing.barcodeformat;importcom.google.zxing.multiformatwriter;imp

    2023年10月30日
  • 网络收集信息的方式_网络数据采集实验过程dns域名查询这里我以新浪网址www.sina.com.cn为例做查询,首先在站长工具whois中查询dns注册人和金沙1005的联系方式在站长工具dns中查询该域名对应的ip地址这里我们以49.7.37.133为例在站长工具ipwhois中查询该ip的注册人和金沙1005的联系方式在dynu查询该ip的所

  • 极光推送实现原理_极光开发者[通俗易懂]jpush是经过考验的大规模app推送平台,每天推送消息数超过5亿条。开发者集成sdk后,可以通过调用api推送消息。同时,jpush提供可视化的web端控制台发送通知,统计分析推送效果。jpush全面支持android,ios,winphone三大手机平台。

  • linux 创建.sh脚本文件[通俗易懂]linux创建.sh脚本文件

  • emd——eemd——ceemd[通俗易懂]转载自https://www.cnblogs.com/dinging006/p/10282993.html  首先,hht中用到的emd详细介绍:https://wenku.baidu.com/view/3bba7029b4daa58da0114a9a.html 本文具体参考 https://zhuanlan.zhihu.com/p/40005057为什么要用emd?对于信号的处理,可以是在频域,时域,或者时频域,其…

  • 优秀国外设计网站app_优秀的英语网站推荐常用设计网站#spunkunited非常出色的杂志,里面提供的都是世界顶级设计师的专访,灵感以及文章还有更多。#freelanceswitch这个站点上的所有资源都是开放免费的,你肯定要知道:)#computerarts这是一个非常优秀的网络杂志,中文版杂志是《comp

发表回复

您的电子邮箱地址不会被公开。

联系金沙1005

关注“java架构师必看”公众号

回复4,添加站长微信。

附言:ispacesoft.com网而来。

关注微信
网站地图