比特币脚本及交易分析
最新内容会更新在主站深入浅出区块链社区
原文链接:比特币脚本及交易分析 - 智能合约雏形
大家都有转过账 每笔交易是这样的 张三账上减 200 李四账上加 200。
在比特币区块链中 交易不是这么简单 交易实际是通过脚本来完成 以承载更多的功能个 这也是为什么比特币被称为是一种“可编程的货币”。
本文就来分析一下交易是如何实现可编程的。
未花费的交易输出(UTXO)先引入一个概念 未花费的交易输出——UTXO Unspent Transaction Output
其实比特币的交易都是基于UTXO上的 即交易的输入是之前交易未花费的输出 这笔交易的输出可以被当做下一笔新交易的输入。
挖矿奖励属于一个特殊的交易 称为coinbase交易 可以没有输入。
UTXO是交易的基本单元 不能在分割。
在比特币没有余额概念 只有分散到区块链里的UTXO
随着钱从一个地址被移动到另一个地址的同时形成了一条所有权链 像这样
比特币脚本比特币交易是首先要提供一个用于解锁UTXO 用私钥去匹配锁定脚本 的脚本 常称为解锁脚本 Signature script) 这也叫交易输入
交易的输出则是指向一个脚本 称为锁定脚本 PubKey script 这个脚本表达了 谁的签名 签名是常见形式 并不一定必须是签名 能匹配这个输出地址 钱就支付给谁。
每一个比特币节点会通过同时执行这解锁和锁定脚本 不是当前的锁定脚本 是指上一个交易的锁定脚本 来验证一笔交易 脚本组合结果为真 则为有效交易。
当解锁版脚本与锁定版脚本的设定条件相匹配时 执行组合有效脚本时才会显示结果为真
如最为常见类型的比特币交易脚本 支付到公钥哈希 P2PKH Pay-to-Public-Key-Hash 组合是这样
常见交易脚本验证过程比特币交易脚本语言是一种基于逆波兰表示法的基于栈的执行语言 不知道逆波兰和栈的同学去翻大学数据结构课本 你也可跳过这个部分 。
比特币脚本语言包含基本算数计算、基本逻辑(比如if…then)、报错以及返回结果和一些加密指令 不支持循环。想了解更多语言细节可参考:
脚本语言通过从左至右地处理每个项目的方式执行脚本。
下面用两个图说明下常见类型的比特币交易脚本验证执行过程
上图为解锁脚本运行过程 主要是入栈
上图为锁定脚本运行过程 主要是出栈 最后的结果为真 说明交易有效。
交易分析实际上比特币的交易被设计为可以纳入多个输入和输出。
交易结构我们来看看完整的交易结构
交易的锁定时间定义了能被加到区块链里的最早的交易时间。在大多数交易里 它被设置成0 用来表示立即执行。
如果锁定时间不是0并且小于5亿 就被视为区块高度 意指在这个指定的区块高度之前 该交易不会被包含在区块链里。
如果锁定时间大于5亿 则它被当作是一个Unix纪元时间戳 从1970年1月1日以来的秒数 并且在这个指定时间之前 该交易不会被包含在区块链里。
交易的数据结构没有交易费的字段 交易费通过所有输入的总和 以及所有输出的总和之间的差来表示 即
交易费 求和 所有输入 - 求和 所有输出
交易输入结构刚刚我们提过输入需要提供一个解锁脚本 现在来看看一个交易的输入结构
我们结合整个交易的结构里看输入结构就是这样子
交易输出结构刚刚我们提过输出是指向一个解锁脚本 具体交易的输出结构为
我们结合整个交易的结构里看输出结构就是这样子
交易哈希计算在比特币区块结构Merkle 树及简单支付验证分析 讲到区块结构 区块结构包含多个交易的哈希。
那么交易哈希是怎么计算的呢
交易结构各字段序列化为字节数组把字节数组拼接为支付串对支付串计算两次SHA256 得到交易hash了解详情可进一步参考如何计算交易Hash?及如何创建Hash?
现在是不是对完整的交易到区块有了更清晰的认识。
智能合约雏形 - 应用场景说明由于交易是通过脚本来实现 脚本语言可以表达出无数的条件变种。
比特币的脚本目前常用的主要分为两种 一种是常见的P2PKH 支付给公钥哈希 另一种是P2SH Pay-to-Script-Hash支付脚本哈希 。
P2SH支付中 锁定脚本被密码学哈希所取代 当一笔交易试图支付UTXO时 要解锁支付脚本 它必须含有与哈希相匹配的脚本。
这里不展开技术细节 下面说明一些应用场景 以便大家有更直观的认识。
多重签名应用合伙经营中 如只有一半以上的的股东同意签名就可以进行支付 可为公司治理提供管控便利 同时也能有效防范盗窃、挪用和遗失。
用于担保和争端调解 一个买家想和他不认识或不信任的某人交易 在一般情况交易正常进行时 买家不想任何第三方参与。那交易双方可以发起支付 但如果交易出现问题时 那第三方就可以根据裁定 使用自己的签名和裁定认可的一方共同签名来兑现这笔交易。
保证合同保证合同是建造公众商品时的集资办法 公众商品是指一旦建成 任何人都可以免费享受到好处。标准的例子是灯塔 所有人都认同应该建造一个 但是对于个人航海者来说灯塔太贵了 灯塔同时也会方便其他航海者。
一个解决方案是向所有人集资 只有当筹集的资金超过所需的建造成本时 每个人才真正付钱 如果集资款不足 则谁都不用付钱。依靠预言
假如老人想让他孙子继承遗产 继承时间是在他死后或者在孙子年满18岁时 也是一个带锁定时间交易 无论哪个条件先满足 他的孙子都可以得到遗产。
因为比特币节点可依靠预言对死亡条件进行判断 预言是指具有密钥对的服务器 当用户自定义的表达式被证明是真的 它能按照要求对交易签名。
相信随着区块链的普及 会对未来的交易模式和商业结构带来巨大的影响。不过由于比特币的脚本语言不是图灵完备的 交易模式依旧有限 以太坊就是为解决这一问题而出现 后面我们会有大量介绍以太坊的文章。
参考文献 补充阅读 精通比特币廖雪峰的深入理解比特币交易的脚本比特币合同转载于:https://www.cnblogs.com/tinyxiong/p/***.html
查看全文相关文章:
最新文章2023/6/6 18:48:***/6/6 18:48:***/6/6 18:48:***/6/6 18:48:***/6/6 18:48:***/6/6 18:48:***/6/6 18:48:***/6/6 18:48:13
币圈大佬带你炒比特币,如何高回报!
聪明的人都已经在比特币投资上赚上几千万了.!!!
6年币圈资深老玩家,炒币经验丰富,波段和短线策略!
经过几年带学员炒币总结了一套独家《炒币秘籍》 无论是新手,还是资深投资者,均可学会, 欢迎大家来一起交流,互相学习!
------
延伸阅读:
新手炒币应该如何选择适合自己的方式
很多新手在初入市场币圈的时候,往往就会陷入一个惆怅的问题,就是在币圈进行交易,究竟是选择长线交易还是短线交易,到底哪一种方式才会赚的更多呢?这些问题也是很多新手困扰的问题,对于长线交易与短线交易,其实各有利与弊,其实在市场中交易没有一成不变的方式,要选择一个最适合自己的方式来进行交易。
对于长线交易,当然是很多投资者都会选择的交易方式,对于长线交易的投资者来说,长线交易不需要时时刻刻的关注市场的变动,只要行情不是太过于偏离原本的预期就可以了。
只要目前的行情走势在大势之中就好,但是对于长线交易来说也有一些缺点,就是时间周期会比较长,掌控的力度较弱,无形之中操作的时候就会增加操作中的压力。
短线操作当然也是很多投资者喜欢的操作方式,主要的优势就是耗费的时间会比较少,控制也会比较灵活,而且一般都是根据市场中短期的行情走势来进行的操作,交易控制性比较强,在平时的操作中,结合当前的支撑位与支撑位进行操作,往往就会达到事半功倍的效果,而缺点也会比较明显,耗费的时间会比较多,交易也会比较的频繁。
那么对于币圈操作的投资者,应该如何来选择长线还是短线操作呢?
其实两种交易方式,并没有绝对的好与坏,主要还是要根据当前市场的发展来进行判断,当行情波动的比较剧烈的时候,就选择短线操作,当行情的整体趋势发生了变化,并且未来会有特别重大的变动时,这个时候就可以选择长线操作,在操作的时候结合当前的市场行情整体变动来进行相关的选择。
在平时的操作时拥有自己的交易方式,更需要一个好的交易技巧,小蝶也是从三个方面,总结了一些在操作中的技巧和心态:
一:耐心。也是操作的基本功之一,在平时操作中该放弃的应该果断放弃,有能够把握到的一定要牢牢的把握住;坚持自己的投资标准,简以致胜,以简单应对复杂,把握中期时间框架,具有等待行情的耐心!不合要求的就应该果断的舍弃,很轻松的对能力以外的机会说不,市场存在风险有限而获利空间巨大的战略机遇,而从长期来看,良好的耐心终会获得丰厚的回报!趋势不变,做单的方向就不要轻易的不变,控制风险,就可以做到必胜;
二:勇气和胆识。胆识和勇气可由知识以及长期的培养中得来,可根据技术面和消息面入场。若缺乏勇气入场,那么你将会一事无成。当对一笔交易信心十足时,那么就应该全力集中加仓出击。怯者无为,勇者难存,当然着这里还是要强调的是勇气需要建立在有效的策略上,如果做到了,那么一笔有把握的交易可以赚取最大盈利。
三:自律。任何的事情如果没有执行力,那么一切都是空谈,就是有完善的体系也不能发挥效用,因为最薄弱的环节是投资者最近本身的心态,必须约束、约束、再约束,市场是不可控制的,小蝶认为我们能控制的只有我们自己,一个不能控制自己行为能力的人是不可能取得成功的,成功的关键就在于连续性的交易的能力和自律。详细交流了解请加笔者!
------------------
推荐阅读: