区块链学习笔记(一)

2023-11-17

1、区块的数据结构
区块高度:每个区块的唯一ID,块高度为0的创世块,一段时间生成一个块,高度加1
头哈希:每个区块的唯一哈希值,根据父哈希+数据块哈希+随机数生成
父哈希:上一个区块的头哈希
merkle根: 区块中每一笔交易对应一个哈希,呈树状结构,生成的最终值(根),代表了该区块中的交易
难度:难度不是固定不变的,会随着网络现有算力的变化而自动调节
Nonce:挖矿所要达到的目标值
区块主体:一定时间内所生成的交易信息,即账本
2、比特币交易流程图
3、区块链、比特币相关概念及工作原理解释
---------------------------------------------------------------------------------------------------------------------------------------------------------------
1、中心化清算系统
产生的问题一:身份问题(无法确定交易双方是否为本人,可能出现伪造)
解决方案:使用电子签名,公钥-私钥对
S i g n ( , ) =
V e r i f y ( , , ) = /
这个解决方案有一个小漏洞:可以 复制同一行信息 来伪造交易记录,解决的办法是添加一个 这笔交易独有的信息(比如时间戳)
产生的问题二:欠债跑路问题
解决方案:添加余额记录,此时就不可避免的需要一个中间担保人进行余额担保
2、分布式记账
1)密码学:哈希函数
哈希函数,输入可以是任意信息或者文件,输出是固定长度的比特串。例如256bit的1/0串,这个输出叫做这个信息的“哈希值”或者“摘要”(digest)
SHA256("XXXX") = "010....010"

哈希函数有几个特点

  • 输入值稍微变化后,结果就会有很大的不同,完全无法预测不同输入间的规律
  • 逆向计算不可行,只能使用试错法(穷举法),解空间2^256

在每一个账本后添加一个特殊数字,对整个列表使用SHA256,我们要求这个特殊数字可以使得输出值的开头有30个零。这个特殊的数字就叫做工作量证明。
2)区块链

每一个小账本被称为区块每一个不同的区块链协议(产生不同的加密货币)都会规定每一个区块的大小(最初比特币为1M)

账本组成区块,区块构成链表,区块的头包含前一块的哈希值,这就是区块链

任何人不能随意修改其中的内容,或者交换顺序 。如果你这么做,意味着 你需要重新计算所有的特殊数字
3)51%算力-共识攻击
有一个小漏洞,因为网络的延迟或者有人在篡改区块链等因素,你作为一个收听网络广播的用户,如果同时接受到两条不同的区块链怎么办?其中的交易信息发生了冲突
解决方案: 只保留最长的且难度系数最高的,也就是包含的工作量最大的那一条
3、比特币网络节点的构成
1)节点类型和分工
一个全功能节点包含4个模块【钱包Wallet】【矿工Miner】【完整区块链full Block-chain database】【网络路由节点Network routing】
  • 【网络路由节点】使得节点具有参与验证并传播交易与区块信息,发现监听并维持点对点的链接的能力
  • 【完整区块链】具有此模块的节点被称为:全节点。它能够独自自主的校验所有交易,不需要任何其他信息。
  • 【钱包】比特币的所有权是通过数字密钥、比特币地址和数字签名来确定的,数字密钥实际上并不是存储在网络中,而是由用户生成并存储在一个文件或简单的数据库中,称为钱包。有些节点仅仅保留区块链的一部分,通过一种”简易支付验证“(SPV Simplified Payment Verification)的方法来完成交易
  • 【矿工】挖矿节点以相互竞争的方式创造新的区块。有一些挖矿节点也是全节点,可以独立挖矿;还有一些参与矿池挖矿的节点是轻量级节点,必须依赖矿池服务器维护全节点进行工作
拥有全部四个模块被称之为 核心客户端(Bitcoin Core)
2)Stratum协议原理(http://www.8btc.com/stratum_protocol)
3)如何控制区块产生速度恒定
难度系数: 对于每一种不同的加密货币来说,都有 一个值 需要在建立货币的时候时候被定义,即 每一个新区块在当前全网算力的条件被发现的【平均时间】 ,这也是难度系数的由来

抛开代码算法层面来说,实现方法就是通过找前n位是0的方法。从概率角度来说,n值越大,意味找到这个这个数的解范围越小。

随着需求0的数目一个一个增加,需要的计算时间将会程指数增长


难度调整方式


难度的调整实在每个完整节点中自动发生的。如果网络发现区块产生速率比10分钟要快时会增加难度。如果发现比10分钟慢时则降低难度。

例如比特币中的是这样定义的:每2016个区块后计算生成它们花费的时长,比上20160(14天)调整一次。有人可能会问,如果在这十四天内计算能力暴涨怎么办,其实这个10分钟的区块新建间隔的规定也只是一个估计要求,真实情况下,这个时间会偏离10分钟这个设定值很多,但是这种偏差并不会对整个区块链的运行产生影响

但是有人会问,这个过程是靠脚本(代码)来实现的,还是自己手动调整的呢?答案是,本地挖矿节点根据自己看到的链上信息自己调整。

问题又来了,为何我不自己降低难度,让自己更加容易新建区块呢?其实,因为链上所有节点确认新的区块(只有确认了你才能得到回报)是按照最长链并且计算难度最大来判断的,你如果用很小的难度新加的区块,是肯定跑不赢全网的其他矿工的

4)比特币总量的由来
旷工一开始新建一个区块可以得到50BTC的奖励,每210000个区块奖励减半,因此
210000×(50+25+12.5...) =  20999999980 约等于2100万
5)区块容量
区块容量在代码中定义为1M,1M的容量意味着比特币最大的处理交易数量在约2400,从代码及技术文档来看,一个区块的最大处理交易数量在2700笔,意味着在一定程度上区块利用率可以超过100%。
6)交易输入输出

一笔比特币交易是一个含有输入值输出值数据结构。该数据结构包含了将一笔资金从初始点(输入值)转移至目标地址(输出值)的代码信息。比特币交易的输入值和输出值与账号或者身份信息无关。可以把它理解为一种被特定秘密信息锁定的一定数量的比特币。只有拥有者或者知道这个秘密信息的人可以解锁

比特币交易的基本单位是未经使用的一个交易输出,简称UTXO(unspent transaction outputs)

对于UTXO来说,它的面值可以是一”聪“的任意倍数(1BTC等于一亿聪)但是这个有着任意面值的”人民币“不能随意打开,还被加上一道类似红包支付口令的密码,只有拥有这个密码的人才可以使用这个UTXO,UTXO包含,币值+一段代码(锁,只有有钥匙的人才能打开)

例如,你要购买3.1BTC的商品,但是你只有价值4BTC的UTXO,那么你使用4BTC时需要手动构建返还给自己的0.9BTC的UTXO,如果忘记构建,这部分BTC会被当做矿工费

每一个新建立的区块,都会有新的比特币作为奖励被产生,这个交易是一个特殊交易,被称为创币交易(Coinbase奖励)


7)Merkle树

Merkle树是一种哈希二叉树,它可以用来进行快速查找和检验大规模数据完整性。对于比特币网络来说,使用Merkle树来存储交易信息的目的是为了高效的查找和校验某笔交易的信息是否存在


叶子节点必须是偶数(平衡树),如果遇到奇数的情况,把最后一个节点自身复制一个,凑偶

Merkle应用
简单支付验证节点SPV
我们知道,每当一笔新的交易产生的时候,我们必须验证这笔交易是否真的存在,在SPV节点中,不保存区块链,仅仅保存区块头。使用认证路径或者Merkle路径来验证交易是否存在于区块中


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区块链学习笔记(一) 的相关文章

  • Windows使用模拟器启动AOSP源码编译的镜像

    正常情况下 源码编译后可直接执行emulator 启动编译好的镜像 但是如果使用的是server版的ubuntu系统 没有图形界面 或者WSL编译的源码 以及我当前情况 AMD CPU Hyper V ubuntu intel CPU好像没
  • 多线程之创建工作者线程和用户界面线程区别

    转帖 部分原创 1 工作者线程倾向于琐碎的处理 与它不同的是 用户界面线程具有自己的界面而且实际上类似于运行其他应用程序 创建线程而不是其他应用程序的好处是线程可与应用程序共享程序空间 这样可以简化线程与应用程序共享数据的功能 2 典型情况
  • 房产小程序需要加入哪些功能才能让用户喜欢?

    对于我们中国人来说 买房子可是一件大事 在以前大家购买房子需要到楼盘所在地了解 而现在互联网高速发展 人们足不出户通过微信小程序就可以了解各个地区的楼盘信息 这样确实节省下来不少时间 不过不是所有房产小程序都会让用户们喜欢 小程序需要加入合
  • Linux配置了环境变量JAVA仍然是openjdk

    问题描述 不使用openjdk 使用jdk 下载完后 也配置了环境变量 反复检查 etc profile bashrc 均没有错误 但是java version仍旧是openjdk 解决方案 需要删除 usr bin下的java文件
  • 趣图:太真实,程序员调 Bug 的写照

    点击上方公众号快速关注 不错过趣图 程序员调 Bug 的样子 非常真实 动图原作者是 我的邻居全是猫 网友评论 中国有圣人 哈哈哈 太形象了 最后干脆撂挑子不干了 破罐破摔了 她叫小明 所以发明回溯这个超能力的这个公司应该每年花一天专门纪念
  • GPT时代,是否还愿意将你的代码开源呢?

    日常 只是偶发的想法 仅供讨论 GPT是生成式AI 生成式的前提也是基于大量的学习资源 如果你的代码开源或者进入到大模型的学习库 GPT的能力可以迅速学习并掌握你的代码 GPT可以将你的代码提供给其他人 这个过程基本没有任何成本 也无需遵循
  • 安卓实现登录与注册界面

    使用Intent与Bundle传递数据 登录界面login xml 1 使用Relativelayout相对布局
  • canvas绘制随机颜色的柱形图

  • mysql修改表的编码为utf-8,解决插入中文乱码

    在创建mysql的表中如果没有指定编码默认为Iatin1 这个时候插入中文就会报错 需要修改表的编码为utf 8 修改表的编码的sql语句为在Alter table emp convert to character set utf8 这样就
  • Error: Rpmdb checksum is invalid: pkg checksums

    从字面意思判断是rpm库校验失败或者损坏 yum clean all yum makecache 搞定 经查询 RUN rpm rebuilddb命令可以一条条修复rpm 还是我的方法好
  • 数据软件分析(一)——静态分析

    基于恶意科学的数据软件分析 将学习本书的过程作记录分享 数据科学是一个不断增长的算法工具集合 可以让我们通过使用统计学 数学和巧妙的统计数据可视化技术来理解和预测数据 一般来说 数据科学有三个组成部分 机器学习 数据挖掘和数据可视化 第一章
  • 从零开始实现基于go-zero框架的微服务电商项目(二)——User服务的基础搭建

    从零开始实现基于go zero框架的微服务电商项目 二 User服务的基础搭建 项目地址 liuxianloveqiqi XianShop 使用go zero搭建的电商项目 github com API 首先在api包下新建user api
  • SQL中字符串截取、连接、替换等函数的用法

    一 SQL中SUBSTRING函数的用法 1 功能 返回字符 二进制 文本或图像表达式的一部分 2 语法 SUBSTRING expression start length 3 QL 中的 substring 函数是用来抓出一个栏位数据中的
  • OpenVSwitch简介

    本文主要介绍Open VSwitch 虚拟交换机的概述内容 阅读本文可以对OVS Open VSwitch 有一个大致的了解 那么本文主要回答了这样几个问题 1 虚拟交换机是什么 干什么 2 虚拟网络和OVS 3 OVS的组件有哪些 4 使
  • 华为OD德科面试+机试记录

    一 机试 6 25 三道编程题 难度偏中 由于时间久远 只记得其中两道题目 1 找车位 动态规划 2 题目不记得了 后面如果找到会补充 双指针 3 高效的任务规划 动态规划 第一题和第二题是做出来了 第三题做出来一点点 当时时间不够 没想出
  • ATT&CK - 入门

    20200922 0 引言 这篇文章记录ATT CK的一些材料阅读 不过题目没有非常明确 因为这部分仅仅是记录了一篇文章 不过这篇文章是一系列文章的第一小节 大题目就是Getting Started的部分 所以 这篇文章就命名为入门 1 A
  • matlab运行代码计时

    tic 此处写的是你自己的代码 times toc disp times
  • 链表查重(递归实现)

    链表查重 递归实现 最开始想到的递归方法 初步估计效率不会太高 但是代码比较容易理解 思路 现在有一个无序的链表 在不清楚元素个数的情况下 无法常规的迭代实现查重 迭代也可以做 且效率较高 我首先想到是否可用递归实现 递归的思路是 从表头元
  • 对数损失和交叉熵损失

    从上述的表达式中看 两者的损失函数本质是一样的 但是这里需要注意的是通常情况下 这两种损失函数所对应的上一层结构不同 log loss经常对应的是Sigmoid函数的输出 用于二分类问题 而cross entropy loss经常对应的是S
  • Linux c获取任意路径的硬盘使用情况

    没有什么好说的 其实就是获取硬盘的statfs信息结构 代码如下 include

随机推荐

  • 利用opencv检测移动的物体----mog2()

    检测移动的物体 opencv具有一个函数是mog2 参考链接 https www jb51 net article 143527 htm
  • ​TinyLlama-1.1B:从零开始训练一个精悍的语言模型

    PaperWeekly 原创 作者 StatNLP 单位 新加坡科技设计大学 TinyLlama 项目旨在在 3 万亿 tokens 上进行预训练 构建一个拥有 11 亿参数的 Llama 模型 经过精心优化 我们 仅 需 16 块 A10
  • java-性能&故障分析工具

    java 性能 故障分析工具 突然想起了 对HR小姐姐的承诺 你要是问我是不是为了福利 我是打死不会承认的 我们公司的技术栈以java居多 那就介绍一下之前自己写的一个性能 故障分析工具吧 也希望能对公司的java开发者有一点点帮助吧 居然
  • makefile是如何自动生成的

    GNU make允许将一个软件项目的代码分开放在不同的源文件里 有改动的时候可以只对改动的文件重新编译 然后重新连接 这种编译管理方法提高了生成目标的效率 make要调用一个makefile文件来实现 Makefile的编写是使用make的
  • 微信html5活动页面制作,完整的微信H5活动页面设计规范

    微信火了H5的专题页面设计也越来越多了 经常有朋友问H5专题设计按什么尺寸来做 有没有统一的规范 这里就给大家分享一套非常完整的关于微信H5活动页面设计的UI视觉设计规范教程 希望对那些刚刚从事微信H5界面设计的小伙伴们提供一些帮助 微信H
  • Caddy2学习笔记——Caddy2反向代理docker版本的DERP中继服务器

    一 个人环境概述 本人拥有一个国内云服务商的云主机和一个备案好的域名 通过caddy2来作为web服务器 我的云主机系统是Ubuntu 我的云主机是公网ip 地址为 43 126 100 78 我备案好的域名是 hotgirl com 后面
  • the “scope“ attribute for scoped slots have been deprecated and replaced by “slot-scope“ since 2.5

    在 VSCode 中运行 Vue 关于作用域插槽时的问题 报出警告 Module Warning from node modules vue vue loader v15 lib loaders templateLoader js Emit
  • (支付宝支付)Spring实现一个项目配置多个信息、付款给对应商户

    如何实现一个项目配置多个商户信息付款给对应商户 最近在对接支付宝支付时 遇到了一个问题 用户在付款时 需要直接付款到指定支付宝账户 这个需求也无可厚非 就像我们公司有四个分公司 分别在北京 上海等地 如果钱只能到总公司的账户上 那在财务结算
  • linux c do while循环,C语言do-while循环

    要执行程序或代码的一部分几次或多次 我们可以使用C语言的do while循环 在do和while之间给出的代码将被执行 直到条件 condition 成为true 在do while循环中 语句在条件之前给出 所以语句或代码将至少有一次执行
  • Wav2lip-GAN 环境配置

    首先使用 conda 创建新的虚拟环境 然后激活这个环境 conda create n myenv python 3 8 activate myenv 使用 git 克隆代码 或者直接下载源码压缩包解压 安装依赖 我使用的豆瓣源 git c
  • 热部署,未测试

    package agent import java lang instrument Instrumentation import java lang instrument UnmodifiableClassException import
  • 在子类的override方法中调用父类的父类的未被重写的方法

    今天做一个自定义控件 扩展TableLayoutPanel这个控件加一些自己的属性 重写OnPaintBackground这个虚方法 控件的继承关系是这样的 Control ScrollableControl Panel TableLayo
  • 5_spring-cloud-zuul-网关

    文章目录 网关 链路追踪 Zuul zuul 原理 负载均衡设置 配置指定服务的路由 重定向 忽略服务 禁止直接请求 前缀配置 暴露路由端点 网关 链路追踪 Zuul Sleuth https start aliyun com Zuul是N
  • 软件测试学习规划路线

    现如今互联网行业飞速发展 IT行业也是水涨船高 软件行业的未来发展也是越来越好 而软件测试在软件行业可谓是一个必不可少的职业 它不仅算得上一个长青工作 而且也是一个在需求持续增长的职业 如果你已经入行软件测试了 那就沉住气继续努力下去 保持
  • MyEclipse新建Maven webapp项目

    MyEclipse中创建新的Maven项目 webapp目录结构 过程如下 1 New gt Project gt Maven Project 2 Next 3 Next 选择 maven archetype webapp 创建一个weba
  • 编程教育案例

    1 Osmo Coding早教玩具 可以编代码的智能版乐高 https www playosmo com zh cn schools https digi tech qq com a 20160527 055566 htm https ww
  • BUUCTF Misc [GXYCTF2019]SXMgdGhpcyBiYXNlPw== & 间谍启示录 & Mysterious & [UTCTF2020]docx

    目录 GXYCTF2019 SXMgdGhpcyBiYXNlPw 间谍启示录 Mysterious UTCTF2020 docx GXYCTF2019 SXMgdGhpcyBiYXNlPw 下载文件 base64隐写 使用脚本 base64
  • linux下apt-get install软件出现,E: 未发现软件包

    在debian虚拟机中安装库时 总是提示E 未发现软件包 libXtst dev 搜索后发现可能是缺少软件源 打开 etc apt sources list 发现所有语句均被注释 搜索了很多 最后使用的Debian镜像使用帮助的使用样例 在
  • ps如何把人物扣下来

    做前端的难免会自己用上ps 我在网上看了很多关于ps如何把人物扣下来的 我给大家分享一下自己的一些见解 首先打开ps工具 里面放上一张图片 放进去图片之后什么东西都不用动 第二步 shift 键可以扩大选取 ail键可以减小选取 第三步 完
  • 区块链学习笔记(一)

    https zhuanlan zhihu com p 23243289 1 区块的数据结构 区块高度 每个区块的唯一ID 块高度为0的创世块 一段时间生成一个块 高度加1 头哈希 每个区块的唯一哈希值 根据父哈希 数据块哈希 随机数生成 父