比特币脚本及交易分析
比特币脚本及交易分析
最新内容会更新在主站深入浅出区块链社区
原文链接:比特币脚本及交易分析 - 智能合约雏形
大家都有转过账 每笔交易是这样的 张三账上减 200 李四账上加 200。
在比特币区块链中 交易不是这么简单 交易实际是通过脚本来完成 以承载更多的功能个 这也是为什么比特币被称为是一种“可编程的货币”。
本文就来分析一下交易是如何实现可编程的。
先引入一个概念 未花费的交易输出——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 树及简单支付验证分析 讲到区块结构 区块结构包含多个交易的哈希。
那么交易哈希是怎么计算的呢
了解详情可进一步参考如何计算交易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年币圈资深老玩家,炒币经验丰富,波段和短线策略!
经过几年带学员炒币总结了一套独家《炒币秘籍》 无论是新手,还是资深投资者,均可学会, 欢迎大家来一起交流,互相学习!
比特币脚本及交易分析
------
延伸阅读:
数字货币投资小知识
数字货币投资与股票、期货投资类似,都是通过行情的波动来赢取其中的差额达到赢利的目的,反之则是亏损。在投资过程中,投入成本与行情波动所产生的赢利或亏损则是要引起重视的。同样的行情,使用不同方法重复操作,最后所产生的结果会相差甚远。下面与大家分享一些投资的小知识,在以后的投资过程中可以用得上。
1、收益与风险
如果你有100块钱,当收益达到100%之后,本利将会达到200。如果在接下来的操作中亏损掉50%,那么就意味着你的资金将会回到100,显然,亏损50%要比赚100%要容易。控制降低风险很重要,必须重视起来。
2、涨跌幅波动计算
如果你有100块钱,第一天盈利10%后本利达到110,然后第二天亏损10%后则本利剩余99。反之,第一天亏损10%,第二天盈利10%,本利还是99。相同概率下,盈利、亏损与本利成负增长。
3、复利
如果你有100块钱,如果你每天能盈利1%就离场,那么250天后,你的资产可以达到1203.2,到500天后你的资产将达到1.45万。
4、多、空盈利
如果你有100块钱,做空某个币,在不加杠杆的条件下,你可能发生的最大收益是100%,就是币价跌到没有了,这是最低下限了。而做多的收益率是没有上限的,因此不要永久的做空,任何情况下都不可能达到收益的最大化。
5、关于赌场盈利
有人收集分析了赌客1000个数据,发现胜负的概率为53%与47%,其中赢钱离场的人平均盈利34%左右,而输钱离场平均亏损为72%左右,这种情况下,赌场不需要做局盈利,保证公平利用人性的弱点就可以实现持续盈利。类似如此数字货币市场也是如此。
6、投资回报率
如果你投资成功的概率是60%,也就是说你连续投资100次,其中盈利60次,亏损40次,如果止盈和止损的比例都设置为10%和-10%,那么意味着最终的收益率是350%。是的,小伙伴,没错,就是3.5倍的收益率!而接下来你要思考的是如何保证你60%的胜率,这个胜率对于多数人来说还是有很大困难的。
7、止盈和止损
索罗斯说过,他不在乎胜负的概率,而更期待盈利的时候比亏损的时候多赚一些。如果我们每次止盈是10%,每次止损是5%,那么连续投资100次,假设胜负概率是50%,那么最终的收益率将达到803%左右。达到这个标准的前提是你首先可以坚决的止盈和止损,其次你需要保证大于或等于50%的概率能达到止盈点或更多。
------------------
推荐阅读:
上一篇:PPC币有风险吗