- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
比特币交易本质上包含交易参与者价值转移的相关信息数据结构。比特币区块链是一本全球复式记账总账簿,每笔交易都是在比特币区块链上的一个公开记录.
本章中使用术语“钱包”时,我们指的是构建交易的软件,而不仅仅是包含密钥的数据库.
UTXO,即“未花费的交易输出”(unspent transaction outputs)。所有 UTXO 的集合被称为 UTXO 集。UTXO 集大小在新的 UTXO 增加时而增长,并在 UTXO 被消耗时而缩小。每一个交易都代表 UTXO 集中的变化(状态转换).
用户的比特币“余额”是指用户钱包中可用的 UTXO 总和 ,它们可能分散在数百个交易和区块中。比特币钱包通过扫描区块链并汇聚所有属于该钱包控制的私钥的 UTXO 来计算该用户的余额.
比特币的脚本语言是一种基于栈的语言。脚本语言通过从左到右处理每个项目来执行脚本.
数字签名是一种由两部分组成的数学方案:第一部分是使用私钥对数据创建签名的算法;第二部分是允许在给定数据和公钥时验证签名合法性的算法。比特币中使用的数字签名算法是椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm,ECDSA) 。
在比特币的 ECDSA 算法的实现中,被签名的“消息”是交易,或更确切地说是交易中特定数据子集的哈希值。签名密钥是用户的私钥,结果就是签名,签名 Sig 由两个值组成,称为 R 和 S:Sig = (R, S).
具体流程如下:
其中:
验证使用数据(交易或其部分的哈希值),签名者的公钥和签名(R 和 S 值)来计算值 P,该值是椭圆曲线上的一个点,如果计算出的点 P 的 x 坐标等于 R ,则签名有效.
其中:
R 和 S 是签名值 。
Qa 是签名者的公钥 。
m 是交易数据(或其部分) 。
G 是椭圆曲线生成点 。
数字签名的用途:
每一笔比特币交易都会创造输出,并被比特币账簿(区块链)记录下来。除特例之外,几乎所有的输出都能创造 UTXO.
交易输出包含两部分:
{
...
"vout": [
{
"value": 0.01500000,
"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"
},
{
"value": 0.08450000,
"scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG"
}
]
}
交易输入将 UTXO(通过被引用)标记为将被消费,并通过解锁脚本提供所有权证明.
交易输入包含四部分:
{
...
"vin": [
{
"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",
"vout": 0,
"scriptSig": "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL]0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",
"sequence": 4294967295
}
]
}
比特币网络处理的大多数交易花费的是由“付款至公钥散列”(Pay-to-Public-Key-Hash,P2PKH)脚本锁定的输出.
相应的锁定脚本和解锁脚本如下:
每个比特币验证节点将通过一起执行锁定和解锁脚本来验证交易.
例子:
OP_DUP OP_HASH160 <Cafe Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG
<Cafe Signature> <Cafe Public Key>
<Cafe Signature> <Cafe Public Key> OP_DUP OP_HASH160 <Cafe Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG
比特币签名有一种方法,用于通过使用 SIGHASH 标志来指示交易数据的 某一部分 包含在由私钥签名的散列中.
每个输入可能在其解锁脚本中包含一个签名。因此,包含多个输入的交易可以拥有具有不同 SIGHASH 标志的多个签名,这些标志在每个输入中承诺交易的不同部分.
有三个 SIGHASH 标志:ALL,NONE 和 SINGLE.
SIGHASH flag | Value | Description |
---|---|---|
ALL | 0x01 | 签名应用到所有输出输入 |
NONE | 0x02 | 签名只应用到所有输入,不包括任何输出 |
SINGLE | 0x03 | 签名应用到所有输入和与签名输入具有相同索引号的那个输出 |
另外还有一个修饰符标志 SIGHASH_ANYONECANPAY,它可以与前面的每个标志组合使用.
当设置 ANYONECANPAY 时,只有当前输入被签名,其余的(及其序列号)保持开放以进行修改。 ANYONECANPAY 的值为 0x80,并通过按位 OR 运算,得到如下表所示组合标志:
SIGHASH flag | Value | Description |
---|---|---|
ALL | ANYONECANPAY | 0x81 |
NONE | ANYONECANPAY | 0x82 |
SINGLE | ANYONECANPAY | 0x83 |
应用 sighash 标志的方式:
应用:
交易费是指输入和输出之间的差值。从所有输入中扣掉所有输出之后的剩余的金额是矿工收取的交易费.
最后此篇关于区块链入门③-交易的文章就讲到这里了,如果你想了解更多关于区块链入门③-交易的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
Hive —— 入门 Hive介绍 Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一
HBase —— 入门 HBase介绍 HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”
零:前端目前形势 前端的发展史 HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面 -> 给后端(PHP、Python、Go、Java) ->
在本教程中,您将了解在计算机上运行 JavaScript 的不同方法。 JavaScript 是一种流行的编程语言,具有广泛的应用程序。 JavaScript 以前主要用于使网页具有交
我曾经是一个对编程一窍不通的小白,但因为对互联网世界的好奇心和求知欲的驱使,我踏入了编程的殿堂。在学习的过程中,我发现了一门神奇的编程语言——Python。Python有着简洁、易读的语法,让初学者能
嗨,亲爱的读者们! 今天我要给大家分享一些关于Python爬虫的小案例。你是否曾为了获取特定网页上的数据而烦恼过?或者是否好奇如何从网页中提取信息以供自己使用?那么,这篇文章将会给你一些启示和灵感。
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 8 年前。 Improv
我想创建一个像https://apprtc.appspot.com/?r=04188292这样的应用程序。我对 webrtc 了解一点,但无法掌握 google app-engine。如何为 java
我刚刚开始使用 Python 并编写了一个简单的周边程序。但是,每当我在终端中键入 python perimeter.py 时,都会收到以下错误,我不知道如何解决。 >>> python perime
Redis有5个基本数据结构,string、list、hash、set和zset。它们是日常开发中使用频率非常高应用最为广泛的数据结构,把这5个数据结构都吃透了,你就掌握了Redis应用知识的一半了
创建发布web项目 具体步骤: 1.在开发工具中创建一个dynamic web project helloword 2.在webContent中创建index.html文件 3.发布web应用到
如果你在 Ubuntu 上使用终端的时间很长,你可能会希望调整终端的字体和大小以获取一种良好的体验。 更改字体是一种最简单但最直观的 Linux 的终端自定义 的方法。让我
1. 前言 ADODB 是 Active Data Objects Data Base 的简称,它是一种 PHP 存取数据库的函式组件。现在 SFS3 系统 (校园自由软件交流网学务系统) 计划的
我对 neo4j 完全陌生,我很抱歉提出这样一个基本问题。我已经安装了neo4j,我正在使用shell“localhost:7474/webadmin/#/console/” 我正在寻找一个很好的例子
我正在阅读 ios 4 的核心音频,目的是构建一个小测试应用程序。 在这一点上,我对所有 api 的研究感到非常困惑。理想情况下,我想知道如何从两个 mp3 中提取一些样本到数组中。 然后在回调循环中
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是无关紧要的,因
我下载了 GNUStep并安装了它,但是我不确定在哪里可以找到 IDE。有谁知道什么程序可以用作 GNUStep IDE/从哪里获取它们?否则,有没有人知道有关如何创建和编译基本 GNUStep 程序
我正在尝试开始使用 Apache Solr,但有些事情我不清楚。通读tutorial ,我已经设置了一个正在运行的 Solr 实例。我感到困惑的是 Solr 的所有配置(架构等)都是 XML 格式的。
请问有没有关于如何开始使用 BruTile 的文档? 我目前正在使用 SharpMap,我需要预缓存切片以加快进程 最佳答案 我今天正在研究这个:)Mapsui项目site严重依赖 SharpMap
尽我所能,我无法让 CEDET 做任何事情。 Emacs 24.3。我下载了最新的 CEDET 快照。我从他的底部(不是这样)Gentle Introduction 中获取了 Alex Ott 的设置
我是一名优秀的程序员,十分优秀!