左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家
180929 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 119 讲
左耳听风
15
15
1.0x
00:00/00:00
登录|注册

64 | 区块链技术细节:哈希算法

Nonce
Difficulty Target
Timestamp
Merkle Root
Previous Block Hash
Version
数据的特征码
生成唯一标识一个数据块的ID
前一个数据块的地址
自己的地址(或是ID)
真正的数据
UTXO
output
input
Merkle Patricia Tree
比特币的Merkle Root计算
挖矿
区块链的协议格式
校验码
Checksum
SHA-256
MD5
Secure Hash
BlockChain
数据块
单向链表
比特币的交易模型
Merkle Root
比特币的hash算法
数字签名
Hash算法
区块链
区块链技术细节之哈希算法

该思维导图由 AI 生成,仅供参考

你好,我是陈皓,网名左耳朵耗子。
对于计算机来说,区块链就像一个单向链表,一个数据块中保存着三个信息。
真正的数据。
自己的地址(或是 ID)。
前一个数据块的地址。
这样,通过追溯前一个块的地址,把所有的数据块存成了一条链。所以,我们叫其 BlockChain。如下图所示。
每个数据块的“地址”的编码使用了计算机上的一个算法,计算机圈内人士把这个算法叫 Secure Hash。有人音译为“安全哈希”,也有人意译为“安全散列”。在计算机应用中,hash 算法主要有几个功能。
用来生成唯一标识一个数据块的 ID(身份证),这个 ID 几乎不能重复。
用来做数据的特征码。只要数据中一个 bit 的数据出现更改,那么整个 hash 值就完全不一样了。而且数学上保证了,我们无法通过 hash 值反推回原数据。
于是,很多公司在互联网上发布信息或软件的时候,都会带上一个 Checksum(校验码)。你只要把整个文件的数据传入到那个特定的 hash 算法中,就会得到一串很长的字符串。如果和官方发布的 Checksum 字符串不一样,那么就说明信息或文件内容被人更改或是信息残缺了。因此,也被应用在“数字签名”中。
在计算机世界里,有两个很著名的 hash 算法,一个叫 MD5(Wikipedia 链接),一个叫 SHA-2(Wikipedia 链接), 区块链用的是 SHA-256 这个算法。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了区块链技术中的哈希算法及其在比特币中的应用。作者首先介绍了哈希算法的基本概念和作用,强调了其在数据唯一标识和数字签名中的重要性。随后,详细解释了比特币中区块链的协议格式和区块头中的六个字段的含义,以及挖矿过程中的难度调整。此外,文章还阐述了Merkle Root的计算方式及其在比特币和以太坊中的不同应用。通过通俗易懂的语言、具体示例和图表,生动地阐述了复杂的技术概念,使读者能够快速了解区块链技术的核心原理和应用场景。文章还介绍了比特币的交易模型,解释了交易中的input和output的概念,以及UTXO的特点和在比特币交易中的应用。总的来说,本文全面而深入地介绍了区块链技术中的哈希算法及其在比特币中的具体应用,对于想要深入了解区块链技术的读者具有重要参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(39)

  • 最新
  • 精选
  • 杜小琨
    所以,为什么是1M?

    作者回复: 我居然写漏了……😓 1)中本聪经常在代码里放一些不说明的事,这个就是一个。 2)区块有大小限制容易理解,一个是为了更好地去中心化,因为如果尺寸下限,算力大的可以打包更多的交易,就中心化了。另一个是为了节省网络带宽。 3)为什么是1M而不是2M,这是中本聪设置的,但他并没有做出解释。

    2018-04-03
    51
  • 逆行
    一次交易完成后,Merkle Root 就会改变,那么每次交易都要重写整个区块链表,那效率太低了吧,是不是我错过了什么细节?

    作者回复: Merkle Root 是一组交易的层层hash的结果。

    2018-04-03
    7
  • Nelson
    "假如你有多个 UTXO,你可以进行多笔交易而不需要并行锁。"这一句没懂,不会出现一个UTXO被使用两次情况吗?

    作者回复: 不同的交易在不同的UTXO上并行,在同一个上不行。如果用余额来做,则无法并行,上一笔不完成,下一笔无法执行。

    2018-04-03
    5
  • jimmy
    近期在研究event-sourcing架构,比特币的交易感觉有点像event-sourcing的味道,记录的只是事件,无状态,天然适应分布式,不知道这个类比是否有点牵强

    作者回复: 是很牵强

    2018-04-03
    2
    4
  • 痴痴
    1.是不是只有前一个区块交易满了,才会产生下一个区块? 2.Merkle的生成过程理解,不过不理解的是:假设a区块有新的一笔交易产生,放到这个区块里,那么这个区块的id自然也就变了,后面所有的区块id也要跟着变,这样是不是太麻烦了

    作者回复: 1、不是,这个由各个矿工自己决定。2、merkle和区块无关,但是与交易有关。

    2018-06-25
    1
  • 龚极客
    Merkle Root是否至多三层?因为每个hash4个字节*7 =28<32 。如果这样,那么超过3层怎么处理?

    作者回复: 没有啊,hash无论hash多长的字符,总是得到一样的长度。你说的 “hash4个字节*7=28”是什么意思?

    2018-04-19
  • 总指挥
    生成Merkle Root 过程理解的,但它的目的还是不能理解,如果是要验证完整性为什么不直接全部tx来哈希?小弟不才,望各位解答。

    作者回复: 文中已经讲了。可以分块整理

    2018-04-13
  • Y024
    下载软件通过校验码验证真伪这个小常识,可以避免很多李鬼事件,就值回票价。

    作者回复: 好习惯

    2018-04-05
  • 风的叹息
    单笔交易和区块是什么关系?记录在数据集里面之一?然后同时进行的交易呢?广播,这里的时序问题怎么处理的,不知后文有没解答

    作者回复: 一个区块里有多笔交易,一个区块最大1M,一笔交易平均250个字节,于是一个区块4000笔交易,一个区块平均生成时间10分钟,所以每秒6.66667笔交易。 交易没有时序问题,因为一笔交易的支出必需来自(Unspent Transaction Output),所以,如果你无法对同一个“未花交易 ”操作两次,而对一个“未花交易”的操作未被确认前是不会产生新的未花交易,于是你也就无法进行下笔操作。 广播的时序?为什么会有时序问题呢?一个区块里有前一个区块的地址,另外,算力太大了,10分钟才能产生一个,完全是超低并发应用。

    2018-04-03
  • 0bug
    比特币交易模型中input应该是收入方,output是支出方吧

    作者回复: 对于交易来说,input是交易的输入方,output是交易的输出方。

    2018-04-03
收起评论
显示
设置
留言
39
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部