区块链技术与应用学习笔记(5-7节)——北大肖臻课程

2024-04-26 10:20

本文主要是介绍区块链技术与应用学习笔记(5-7节)——北大肖臻课程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

​BTC实现

基于交易的账本模式:

UTXO集合:

交易费用:

BTC网络

1.应用层:

2.网络层:

3传播层:

什么是鲁棒?

BTC挖矿:

出块奖励:

挖矿难度调整:

挖矿过程:

挖矿难度调整:

挖矿收益:


BTC实现


基于交易的账本模式:

在比特币网络中,不像传统的银行账户系统那样,系统并不会记录每个账户的余额。相反,它跟踪的是每个交易的流动。 
这意味着比特币网络上并没有账户的概念,而是通过追踪交易来确定每个地址(公钥)的余额。 

UTXO集合:


UTXO是指未被花费的比特币交易输出。每当比特币被发送到一个地址时,它们会形成一组UTXO。 
比特币全节点维护着一个UTXO集合,其中包含所有尚未被花费的交易输出。这个集合的维护对于检测双重支付非常重要。 


交易费用:


在比特币交易中,总输入必须等于总输出。如果总输入大于总输出,剩余的部分就会成为交易费用。 
交易费用是为了激励矿工处理和确认交易。矿工通过打包交易并添加到区块链中来获得奖励,其中包括交易费用。 
通常情况下,交易费用是根据交易的大小(字节数)和网络的拥堵程度来确定的。高网络拥堵时,交易费用可能会增加,以便更快地得到确认。​编辑 
通过这种基于UTXO的交易模型,比特币实现了一种去中心化的、安全的数字货币系统,同时确保了交易的可追踪性和不可篡改性。


BTC网络


比特币网络是一个分布式的系统,由应用层、网络层和传播层构成,每一层都有着特定的功能和作用。


1.应用层:


在比特币网络中,应用层主要由比特币区块链组成。这是一个持续增长的、由区块构成的公开账本,记录了所有的交易和区块信息。
区块链技术是比特币的核心,它通过去中心化的方式实现了交易的验证和记录,保证了交易的安全性和透明性。


2.网络层:


比特币网络采用P2P(Peer-to-Peer)Overlay网络结构,这意味着网络中的节点彼此平等,没有中心化的服务器或管理机构。节点之间通过TCP协议进行通信,建立连接并交换信息。
P2P网络结构使得比特币网络具有高度去中心化的特点,任何人都可以加入或退出网络,而不需要获得中央控制机构的许可。

3传播层:

信息传播是比特币网络中的关键环节,它通过种子节点和邻居节点的机制进行。种子节点是网络中的一小部分节点,它们的作用是帮助新加入的节点找到其它节点并加入网络。
邻居节点是每个节点连接的直接对等节点,它们之间通过TCP连接进行通信,交换交易和区块数据。
传播方式采用了flooding方式,即当一个节点接收到新的消息时,它会将该消息广播给它的所有邻居节点。这种方式确保了消息可以快速地传播到整个网络,增强了网络的鲁棒性和抗攻击能力。
比特币网络的设计原则是简单、鲁棒,


什么是鲁棒?


比特币网络的鲁棒性表现在几个方面:
节点自治:每个比特币节点都是自治的,它们独立地验证和转发交易,而不依赖于中心化的实体。这意味着即使部分节点受到攻击或离线,网络仍然能够运行。
去中心化的传播机制:比特币网络采用P2P Overlay网络结构,没有单一的中心节点负责传播信息。节点通过与相邻节点进行直接通信来传播交易和区块数据,这种分布式的传播方式使得网络更加鲁棒,不易受到单点故障的影响。
消息传播的弹性:比特币网络使用flooding方式进行消息传播,这意味着每个节点在接收到新消息后会将其广播给它的所有邻居节点。这种方式虽然可能导致网络中存在大量的重复消息,但它确保了消息能够迅速传播到整个网络,增强了网络对于恶意攻击和分布式拒绝服务(DDoS)攻击的抵抗能力。
区块大小限制:为了确保网络的吞吐量和稳定性,比特币协议限制了每个区块的大小。这样做可以避免网络过载和交易拥堵,同时降低了网络分叉的可能性。
总体来说BTC旨在实现高度的去中心化和安全性。每个节点都维护着邻居节点的集合,并通过简单而有效的传播方式来保证信息的传递。由于带宽是网络传播的瓶颈,比特币协议限制了区块的大小,以确保网络的稳定性和效率。通过深入理解比特币的核心机制、网络结构以及挖矿激励机制和难度调整策略,我们可以更好地理解比特币的运作原理和技术细节,从而更好地参与和贡献到这个生态系统中。

BTC挖矿:


比特币挖矿是通过解决密码学难题来验证交易并添加到区块链上的过程。挖矿的主要概念包括:


出块奖励:


挖矿者通过成功挖出新的区块来获得比特币奖励,这是挖矿的主要激励机制。出块奖励每隔21万个区块减半,平均每隔4年进行一次减半。


挖矿难度调整:


比特币网络设计了一个挖矿难度调整机制,以保持平均出块时间约为10分钟。每2016个区块后,就会根据前一段时间的挖矿情况自动调整难度。


挖矿过程:


在比特币网络中,矿工通过执行一系列计算任务来竞争创建新的区块。这个计算任务被称为“工作量证明”(Proof of Work,PoW),矿工们通过不断尝试计算出符合一定条件的哈希值来解决这个任务。
比特币的工作量证明机制基于SHA-256哈希算法,矿工需要找到一个符合特定难度条件的哈希值,这个条件是由比特币网络根据前一段时间内的挖矿速度自动调整的。
一旦某个矿工找到了符合条件的哈希值,他就可以创建一个新的区块,将待确认的交易打包进去,并将该区块广播到整个网络中。其他节点收到该区块后会验证其有效性,并将其添加到自己的区块链中,从而完成了一次挖矿过程。


挖矿难度调整:


比特币网络通过每2016个区块调整一次难度来确保平均出块时间约为10分钟。调整难度的目标是使当前网络中的总算力每隔约两周能够产生约2016个新区块。
调整难度的公式如下:
新难度 = 旧难度 × (实际时间 / 目标时间)
其中,实际时间是最近2016个区块所花费的时间,目标时间是2016个区块所花费的预期时间,即约为两周(10分钟 × 2016)。
例如,如果实际时间短于目标时间,说明算力增加,难度将增加,反之亦然。

挖矿收益:


成功挖出新区块的矿工将获得两种收益:
包含在新区块中的所有交易的交易费用。
新发行的比特币奖励,即出块奖励。
目前,每个新区块产生的比特币奖励为6.25个BTC。这个奖励每隔大约四年减半一次,这一过程被称为“比特币减半”,直到最终总量达到2100万个BTC为止。

这篇关于区块链技术与应用学习笔记(5-7节)——北大肖臻课程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使