首页 > 其他分享 >02 BTC-数据结构

02 BTC-数据结构

时间:2023-05-02 11:33:47浏览次数:56  
标签:02 区块 hash 哈希 tree BTC Merkle 数据结构 节点

《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click


02 BTC-数据结构

目录

  • hash pointer
  • Merkle tree

hash pointer:不仅可以找到前区块的位置,还能防止前区块是否被篡改。

Blockchain is a linked list using hash pointers.

如果对一个区块中数据进行修改(红色区块),那么之后所有区块的中相关的哈希值都得进行修改。

好处:只要记录最后一个哈希值,就可以检测出对区块链任何部位的修改(可以进行哈希比较,判断是否修改)。

有了这个性质,有些节点就不需要保存系统的全部节点了,只需要保留最近的几千个区块就行,如果需要用到其他区块,找其它节点去要就行。


但是,因为是一个分布式的系统,有些节点可能是有恶意的(下图所示),发来错误的区块,那么我们通过区块的哈希值进行区块正确性的辨别。


hash pointer是适用于没有环的情况。


Merkle tree

Merkle tree is a binary tree.

好处:只要记录根hash值,就能检测出对树中任何部位的修改。

Merkle tree是包含在block body中的。


Merkle的另一个好处,可以提供Merkle proof。

比特币系统,包括全节点和轻节点。

全节点:保存整个区块的内容;轻节点:只保存block header;

问题:如果要告诉一个轻节点,我转给你的交易已经完成了,轻节点如何验证交易是否被已经写到区块链中?

全节点提供Merkle Proof中需要的哈希值,轻节点进行哈希值的计算(轻节点无法计算其它交易的hash),最后对比计算出来的哈希值是否等于block head中Merkle tree root的哈希值。

问题:有没有觉得些许有些不太安全?(因为Merkle proof过程中的hash是全节点传过来的)

是不可行的,因为哈希函数具有collision resistance性质的存在。这就相当于人为制造哈希碰撞。

Merkle proof可以证明Merkle tree中包含了某个交易,所以这种证明也叫做proof of membership,或者叫proof of inclusion.

Merkle tree中证明某个交易存在的时间复杂度是O(log(n)),对数级别,比较高效。

那么,能够证明Merkle tree中没有某个交易呢?proof of non-membership?

一个简单的方法,把整个Merkle tree传给轻节点,轻节点对叶子节点上的交易进行验证,说明树中没有该交易。如果这样做的话,时间复杂度是O(n),是线性的,比较低效。

如果我们不对叶节点的排列顺序做假设的话,是没有什么更高效的办法的。

但是,如果将叶子节点中交易的顺序按照哈希值进行排序,这种方式是可行的。

如果要找的交易的block hash在两个存在的相邻交易之间,那么就证明该交易是不存在的。

排好序的Merklee tree叫做Sorted Merkle tree.

标签:02,区块,hash,哈希,tree,BTC,Merkle,数据结构,节点
From: https://www.cnblogs.com/yangyi215/p/17367483.html

相关文章

  • 03 BTC-协议
    《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click03BTC-协议目录03BTC-协议数字货币的需要解决的两个主要问题共识机制如果央行(中心化)发行数字货币,使用央行的私钥进行签名,大家交易的时候使用央行......
  • 2023 Hubei Provincial Collegiate Programming Contest题解 C F H I J K M
    补题链接:https://codeforces.com/gym/104337原文链接:https://www.eriktse.com/algorithm/1136.htmlM.DifferentBilling签到题,写几个柿子然后枚举B或C即可。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;signedmain(){ ios::sync_with_stdio(......
  • CSP2022-06
    第一题 水题,没啥好说的#include<iostream>#include<cmath>usingnamespacestd;constintN=1e6;doublea[N];intmain(){intn;cin>>n;doublesum=0;for(inti=0;i<n;i++){cin>>a[i];......
  • 2023-05-02:如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 。 给你一
    2023-05-02:如果一个正整数每一个数位都是互不相同的,我们称它是特殊整数。给你一个正整数n,请你返回区间[1,n]之间特殊整数的数目。输入:n=20。输出:19。答案2023-05-02:可以通过数字组合和状态压缩的动态规划算法来解决。具体过程如下:1.对于给定的正整数n,求出其位数......
  • 2202年了,“小样本”还值得卷吗?
    文|Severus从一个应用实验引发的思考。大家好,我是Severus,一个在某厂做中文自然语言理解的老程序员。这个主题,源自于我之前在公司内做的一次技术分享。承接上一篇文章(格局打开,带你解锁prompt的花式用法),我想要继续分享一下,我们后续尝试的实验及分析,以及我对小样本的看法。简单回......
  • 02 Docker核心技术
    第二章:Docker核心技术目录第二章:Docker核心技术一、Docker镜像管理1镜像简介2搜索、查看、获取3重命名、删除4镜像导入、导出5镜像历史、详细信息、创建6小结二、Docker容器管理1容器简介2容器查看、创建、启动3暂停、取消暂停、重启4容器关闭、终止、删除5进入、退出......
  • 2023年05月编程语言流行度排名
    点击查看最新编程语言流行度排名(每月更新)2023年05月编程语言流行度排名编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的一门语言教程被搜索的次数越多,大家就会认为该语言越受欢迎。这是一个领先指标。原始数据来自谷歌Trends如果您相信集体智慧,那么流行编程......
  • 2023年05月IDE流行度最新排名
    点击查看最新IDE流行度最新排名(每月更新)2023年05月IDE流行度最新排名顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends如果您相信集体智慧,TopIDE索引可以帮助您决定在软件开发项目中使用......
  • 2023年05月在线IDE流行度最新排名
    点击查看最新在线IDE流行度最新排名(每月更新)2023年05月在线IDE流行度最新排名TOP在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的在线IDE被搜索的次数越多,人们就会认为它越受欢迎。原始数据来自谷歌Trends如果您相信集体智慧,那么TOPODE索引可以帮助您决定在......
  • 2023年05月数据库流行度最新排名
    点击查看最新数据库流行度最新排名(每月更新)2023年05月数据库流行度最新排名TOPDB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的一个数据库被搜索的次数越多,这个数据库就被认为越受欢迎。这是一个领先指标。原始数据来自谷歌Trends如果您相信集体智慧,那么TOP......