Bitcoin交易及验证
UTXO 理解
未花费交易输出: Unspent Transxtion output
UTXO---用比特币拥有者的公钥锁定(加密)的一个数字UTXO== 比特币- 比特币系统里没有必有比特币,只有UTXO
- 比特币系统没有账户, 只有UTXO(公钥锁定)
- 比特币系统里没有账户余额,只有UTXO(账户月只是比特币钱包的概念)
- UTXO存在全节点的数据库里
- 转账将消耗掉属于自己的UTXO,同时生成新的UTXO,并用接收者的公钥锁定。
- 比特币系统没有账户概念。
交易的结构
- 交易的输出(UTXO)
- 锁定的比特币数量
- 锁定的脚本(用接收者的公钥哈希)
- 交易的输入(UTXO+解锁脚本)
- 解锁(自己的私钥)脚本(用发送者签名,接收者的公钥hash)
交易的确认
交易的确认必须放在区块链上才算完成
交易验证
基于栈的脚本语言
栈(
stack)- 操作数据的一种结构- 只能从一端操作数据,后进新出
LIFO(Last In, First Out) - 如同子弹匣,先压入的子弹最后打出
- 压栈(
PUSH),出栈(POP)
- 只能从一端操作数据,后进新出
验证交易- 基于栈的脚本语言
对栈的操作:
OP_DUP---逻辑运算符:
OP_EQUALVERIFY加解密运算符:
OP_HASH160OP_CHECKSIG
算数运算符:
OP_ADD--- 加0P_SUB--- 减OP_MUL--- 乘OP_DIV--- 除

逆波兰表示法
- 简易运算规则:
- 所有造作符号位于操作数的后面
- 遇到操作数(数字),则压栈
(PUSH) - Y遇到二元运算符(
+,-, x ,/)- 先将2个操作数出栈
pop - 然后对运算数进行计算
- 最后将计算结构压栈
- 先将2个操作数出栈
- 传统表达式(中缀表示法):
(1+2)*3 == 9 - 逆波兰表示法(后缀表示法):
1 2 + 3 * 9 ==
使用逆波兰表示法验证交易
锁定脚本
OP_DUP OP_HASH160<发送者公钥哈希> OP_EQUALVERIFY OP_CHECKSIG
解锁脚本
- <发送者的签名><发送者公钥>
交易验证:
签名公钥DUPHASH公钥哈希==验证签名运行解锁脚本+锁定脚本=> True
过程如下(逆波兰表示法):
a.
发送者签名与发送者公钥进行压栈(保护在解锁脚本正)b.
DUP--将公钥copy到栈顶c.
HASH运算符,只需要一个数,将公钥POP出去进行hash算法,生成一个公钥hashd. 将新生成的公钥哈希 压栈
e. 将锁定脚本(UTXO)中的公钥哈希压栈;
f.
OP_EQUALVERIFY---遇到==操作符,将栈中两个公钥哈希比较,为True的话,栈中的两个哈希公钥会废除掉,继续进行压栈操作g. 验证签名(
OP_CHECKSI)--POP出栈中的发送者签名与发送者公钥,使用公钥验证签名,如果通过,则UTXO可以使用

Bitcoin交易及验证的更多相关文章
- bitcoin 源码解析 - 交易 Transaction(三) - Script
bitcoin 源码解析 - 交易 Transaction(三) - Script 之前的章节已经比较粗略的解释了在Transaction体系当中的整体运作原理.接下来的章节会对这个体系进行分解,比较 ...
- bitcoin 源码解析 - 交易 Transaction(二) - 原理篇
这篇文章我断断续续写了呃···· 应该快三个星期了? 所以前后的风格可能差别相当大.真是十分的怠惰啊··· 最近实在是不够努力.用python重写bitcoin的项目也卡在网络编程部分(这方面真是我的 ...
- bitcoin源码解析 - 交易 Transcation (一)
比特币中的交易可谓是比特币的最核心部分.比特币由交易产生,而区块就是用来存储交易的.所以,交易是比特币存在的载体,同时也是比特币中最复杂的部分.交易的运作层层相扣,各个部分缺一不可,十分严密,由此体现 ...
- bitcoin 源码解析 - 交易 Transaction
bitcoin 源码解析 - 交易 Transaction(三) - Script 之前的章节已经比较粗略的解释了在Transaction体系当中的整体运作原理.接下来的章节会对这个体系进行分解,比较 ...
- 比特币交易(Transaction)的输入与输出
比特币通过“挖矿”机制保证了不能任意造币.通过分布式网络和HashCash机制解决双重支付问题.事实上比特币系统中不存在独立的电子货币,而只存在交易单(账单),货币值是依附于交易单存在的,所以比特币中 ...
- 比特币区块结构Merkle树及简单支付验证分析
在比特币网络中,不是每个节点都有能力储存完整的区块链数据,受限于存储空间的的限制,很多节点是以SPV(Simplified Payment Verification简单支付验证)钱包接入比特币网络,通 ...
- 金融量化分析【day112】:初识量化交易
一.摘要 为什么需要量化交易? 量化交易是做什么? 量化交易的价值何在? 做量化交易需要什么? 聚宽是什么? 零基础如何快速入门量化交易? 自测与自学 二.量化交易比传统交易强多少? 它能让你的交易效 ...
- Fabric交易流程
(内容可能有些乱,请见谅,日后会对格式进行整理!) #### 在1.0及以后的版本中,客户端应用会先向Fabric CA申请用户所需要的Fabric中的准入证书,用于签名提案以及交易,然后由客户端(A ...
- Facebook libra开发者文档- 3 -Life of a Transaction交易生命周期
Life of a Transaction交易的生命周期 https://developers.libra.org/docs/life-of-a-transaction 为了更深入地了解Libra交易 ...
随机推荐
- IEqualityComparer的使用
当我们用Linq操作我们自定义的对像数组时,我们会发现有些方法直接使用的话根本不起作用,比如:Distinct.Except.Intersect等扩展方法. 对于我们自定义的对象的比较,我们必须实现I ...
- unity 序列化和反序列化
什么是序列化和反序列化(1)序列化是指把对象转换为字节序列的过程,而反序列化是指把字节序列恢复为对象的过程:. (2)序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可 ...
- 使用 Apache Atlas 进行数据治理
本文由 网易云发布. 作者:网易/刘勋(本篇文章仅限知乎内部分享,如需转载,请取得作者同意授权.) 面对海量且持续增加的各式各样的数据对象,你是否有信心知道哪些数据从哪里来以及它如何随时间而变化?采 ...
- Linux 常用命令大放送
sbin 系统底层命令存放目录 bin 一般用户常用命令目录 文件用户管理 ls -lh 显示权限cp -r 复制文件 文件夹 mkdir test 创建文件夹rm -rf 删除文件 ...
- 虚拟化安全 sandbox 技术分析
原文链接:https://cloud.tencent.com/developer/news/215218 前言: libvirt-4.3搭配qemu-2.12使用,如果使用默认的编译选项,可能会让qe ...
- Delphi XE7编译安卓程序出错了
昨天编译一个先前可以正常运行的程序,忽然就不能编译了,总是提示这个错误,经过一番排查,终于搞定了,原因:删除了安卓lib引用的JAR和单元文件.如果你也出现这个问题,打开工程全部目录,看一下是否有打小 ...
- 微信浏览器禁止app下载链接的两种处理方法
最近替朋友放一个微信下载链接,通过二维码扫描下载. 通过扫描二维码下载APP已成为一个非常方便的方式,微信也成为扫描二维码重要的工具,但是扫描后微信浏览器会对APK和appStore的链接进行屏蔽,导 ...
- 【ocp-12c】最新Oracle OCP-071考试题库(38题)
38.choose the best answer View the Exhibit and examine the data in the PROMOTIONS table. PROMO_BEGIN ...
- [agc006f] Blackout 神题
Description 给你一个NN行NN列的网格,第ii行第jj列的格子用(i,j)(i,j)表示 一开始的时候有MM个格子被涂成黑色,其他的格子都是白色,具体一点,涂成黑色的格子为(a1,b1 ...
- java下载文件注意点
前台: 不建议使用ajax,可以使用window.location.href 后台: 三个参数--> response path filename--filename如果要防止乱码,可以用Str ...