第五章 区块链交易原理

2024-09-02 05:08
文章标签 区块 原理 交易 第五章

本文主要是介绍第五章 区块链交易原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第五章 区块链交易原理

  • 1、概述
  • 2、交易原理分析
    • 2.1 加锁脚本、解锁脚本
    • 2.2 多个输入输出
  • 参考资料

1、概述

本章介绍区块链交易的原理,重点介绍交易过程中,如何证明钱的归属、如何证明钱是谁付的。

在介绍交易过程之前,需要先介绍一个概念:未花费的交易输出(UTXO——Unspent Transaction Output)。

区块链中使用UTXO代表用户持有的价值,代表用户收到的还没有花费的价值。

区块链中每一个比特币无论经过了多少次流转,都是来源于挖矿奖励(币基交易)。币基交易是矿工挖矿时的奖励,该交易的输入为空,输出是赢得记账权的矿工。

矿工把比特币转移给A,这时候对于矿工来说,比特币已经花费,状态就变成已花费了,而对于A来说,它收到了矿工的比特币,此时比特币的状态为未花费。

比特币在流转过程中,对于付款人来说,这是一笔输出,而且已经花费了;对于收款人来说,这笔输出还未花费。

2、交易原理分析

我们以1个例子来看看交易的原理:假设A交易1个比特币给B,B又把这个比特币交易给C。

在第四章 区块链共识机制一章中,我们已经介绍了一笔交易的完成过程,前2步属于交易过程,后面的属于共识过程,这里不再赘述。

首先B收到A的1个比特币后,B就有了1笔UTXO,大致结构如下:
在这里插入图片描述
我们可以看到,记录分成3部分:hash、in、out。

  • hash:代表着交易的唯一标识,是对所有交易信息进行hash而来的。
  • in:代表着交易的付款方,此处是A。
    • address:A的地址,在区块链中通过地址唯一标识一个用户,每个用户有用一对公私钥,可以认为地址是通过公钥经过一系列计算得来的。
    • value:交易的金额。
    • pkscript:此处的加锁脚本并不会执行,仅仅是从上一笔交易的output中拷贝的pkscript。
    • sigscript:解锁脚本是付款方使用私钥做的签名,签名用来证明这笔交易是他本人发起的,防止抵赖。
    • preHash:这个字段我不确定有,但是看实际的交易,会发现每笔交易都是可以追溯的,一直到最初的币基交易,我认为会存在这个字段,来标记该笔交易来自哪里。任何一笔in,肯定来源于之前的out。
  • out:代表着交易的收款方,此处是B。
    • address:B的地址。
    • value:金额。
    • pkscript:加锁脚本在交易验证过程中非常重要。它的作用是在用户花费这笔钱的时候,需要证明这笔钱是他的,否则任何人都可以花不就乱了。它其实是一个栈结构,里面是一条条的命令,验证过程就是依次执行这些命令,都通过了则验证通过。在花费这笔UTXO时,各个矿工会验证该加锁脚本,验证通过后才允许交易。
    • nextHash:该字段指的是这笔钱,花出去时的交易标志。这个字段肯定不在账本中,可能存储在其它位置了。

当B把这笔钱交易给C的时候,会创建如下的记录:
在这里插入图片描述
观察一下记录的变更:

  • hash:变成了003
  • in:
    • address:是B的地址,因为现在B是付款方了。
    • pkscript:其实等同于上笔交易中out部分的pkscript
    • sigscript:B用私钥对交易信息做的签名,证明是B花的钱。
    • preHash:002,就是上笔交易。
  • out:
    • address:是C的地址,因为现在C是收款方了。
    • pkscript:加锁脚本,证明这笔钱现在归C了。

2.1 加锁脚本、解锁脚本

继续往下看之前,你需要了解公钥和比特币地址之间的关系:

以公钥 K 为输入,计算其 SHA256 哈希值,并以此结果计算 RIPEMD160 哈希值,得到一个长度为 160 比特(20 字节)的数字:

A = RIPEMD160(SHA256(K))

公式中,K 是公钥,A 是生成的比特币地址。

pkscript 加锁脚本是验证钱属于自己的手段,每个UTXO都会有一个加锁脚本,加锁脚本是这样的:

OP_DUP
OP_HASH160
9bcc25cea896e5ebf5e38850a2038e215f2393cb
OP_EQUALVERIFY
OP_CHECKSIG

它由一条条的命令及数据组成。在B要花费这个UTXO时,其它节点会按照这个脚本进行验证,验证通过则进行挖矿,否则直接丢弃。下面看看这些命令的含义:

  • OP_DUP:复制栈顶数据,这里指的是公钥。
  • OP_HASH160:进行hash计算。
  • 9bcc25cea896e5ebf5e38850a2038e215f2393cb:要对比的值,这里是地址。
  • OP_EQUALVERIFY:使用hash值与上面的值比较,判断是否相等。
  • OP_CHECKSIG:对解锁脚本中的签名信息进行验签。

2.2 多个输入输出

上面的例子比较简单,交易的金额正好等于一笔UTXO。现实生活中,更多的是一笔UTXO大于要支付的金额,或者多笔UTXO合在一起才够支付的金额,这种情况下如何处理呢?

UTXO是不支持拆分的,这跟传统的交易有所区别。

一笔交易中,分为输入、输出两个部分,区块链中对于输入是没有限制的,输出最多是两个:一个是收款方,一个是找零。

比如:B要支付给C150个比特币,B有3个UTXO:40,50,60,则交易记录如下所示:
在这里插入图片描述

参考资料

谈谈自己对比特币脚本的理解

这篇关于第五章 区块链交易原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129071

相关文章

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

TL-Tomcat中长连接的底层源码原理实现

长连接:浏览器告诉tomcat不要将请求关掉。  如果不是长连接,tomcat响应后会告诉浏览器把这个连接关掉。    tomcat中有一个缓冲区  如果发送大批量数据后 又不处理  那么会堆积缓冲区 后面的请求会越来越慢。

PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等. 另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们

Smarty模板执行原理

为了实现程序的业务逻辑和内容表现页面的分离从而提高开发速度,php 引入了模板引擎的概念,php 模板引擎里面最流行的可以说是smarty了,smarty因其功能强大而且速度快而被广大php web开发者所认可。本文将记录一下smarty模板引擎的工作执行原理,算是加深一下理解。 其实所有的模板引擎的工作原理是差不多的,无非就是在php程序里面用正则匹配将模板里面的标签替换为php代码从而将两者