Skip to content

mingtong/LearnBlockChain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 

Repository files navigation

LearnBlockChain

比特币相关概念点

  • 区块链:即 比特币的账本,所有交易记录

  • 区块:账本的其中一页

    • 大约每10分钟新增一个区块,时间取决于挖矿难度
  • 非对称加密算法

    • 公钥:PKC,用于解密
    • 私钥:用于加密,可计算出公钥。
  • 矿工:分布式网络中的计算节点,负责验证每一笔交易的有效性,并更新账本

    • 奖励1:成功验证一笔交易,并被选中,会得到交易费奖励,通常由交易发起人支付(一定量的比特币)
    • 奖励2:成功验证一笔交易,并被选中,会得到区块奖励,(新铸造的比特币),大约2140年铸造完毕
    • 中止:多个矿工可能同时计算同一笔交易,当其中一个矿工成功验证交易后,其他矿工将收到失败消息,并将那个成功的区块写入区块链
  • 挖矿:验证交易的过程

    • 工作量证明:即 PoW,矿工如果想让自己的区块入选,就必须解答一个区块相关的难题,解题过程叫 工作量证明
    • 加密 Hash:将任意长度的文字转换成固定长度的字符串,也叫做 摘要
    • Hash 算法:
      • SHA256,用于工作量证明;64 个十六进制字符,十进制数值范围在 0 到 1.16 * 1077之间。生成器:http://onlinemd5.com
      • RIPEMD-160,用于比特币地址
      • ECDSA:椭圆曲线数字签名算法
    • 解题:
  • 共识

    • 广播:成功验证难题的矿工会叫区块广播给其他矿工
    • 冲突:可能有两个矿工几乎同时完成验证,同时将结果广播出去,这时可能有50%的矿工收到A的区块,50%的矿工收到B的区块,选中哪个版本取决于哪个区块的下一个区块会首先被计算出来,而未被选中的区块则被丢弃
    • 1小时:交易需要等待1小时才正式确认进入区块链,因为6个区块(每个10分钟)是适当的时间来解决冲突
    • 共识算法:网络上的一个节点需要通过产生的费用和解决计算难题所需的耗时,证明它的合理意图。为了让节点参与此类系统并遵守规则,网络提供激励(通常是金钱奖励)。也就是说,节点运算符向区块链添加区块时就会得到报酬。为了赢取金钱奖励,节点必须验证所有交易(以确保它们符合区块链的特定规则),再解决加密难题
  • 钱包:在比特币网络中进行支付的软件

  • 交易请求包含:

    • 付款人的比特币地址,以及资金来源
    • 收款人的比特币地址
    • 需要转移的比特币数量
  • 密钥使用方式

    • 希望有人向你发送只有你才能打开的加密消息。向对方提供你的公钥,让对方使用此公钥加密文档,然后对方就会向你发送已加密文本。由于对方用公钥来加密了文档,因此必须使用配对的私钥才能解密文档。
    • 希望加密消息并且证明消息确实由你发送。使用私钥加密文本。然后将加密文本发送给其他人。对方会使用你的公钥来解密文本。由于只有你的公钥才能解密文本,因此收件人可以认为文本是用你的私钥加密的。也就是说,除非私钥被盗用,否则文本就是由你发送的。
    • 使用 PKC 通过数字签名流程来证明数字资产所有权。下图中,假设 Bill 已编写具有法律约束力的 Word 文档,他需要通过电子邮件方式将文档发送给 Susan。Susan 希望确定她从 Bill 处收到的文档副本确实是由 Bill 发送,而且在途中尚未被篡改。Bill 先创建 Word 文档的 SHA-256 哈希,并将值记录为 H(W)。接下来,他使用自己的私钥对文档哈希进行加密,生成 Enc(H(W)),再向 Susan 发送 Word 文档(可视情况加密)和 Enc(H(W)) 值(这是 Bill 对文档 W 的数字签名)
    • Susan 通过她收到的 Word 文档副本重新计算 H(W) 值,再使用 Bill 的公匙解密 Enc(H(W)) 值(见下图)。如果 Susan 计算的哈希值等于解密的 H(W) 值,Susan 可以得出下列结论:Bill 对文档进行了签名,并且她收到的副本与 Bill 签名的文件完全相同
    • 使用哈希和 PKC,区块链维护了数字资产所有权的交易历史记录。交易数据对象相互链接,形成称为“哈希链”的数据结构。工作原理是,每个交易记录都会构成消息 (m),此类消息先通过函数 (H) 进行哈希处理,再通过所有者私钥 (s) 进行签名。(惯例做法是,使用“secret”的首字母“s”表示私钥,以免与表示公钥的“p”混淆。) 这就生成了签名 (sig):

    sig = signature(H(m), s)

    • 在数字资产从一个所有者转让给另一个所有者后,新所有者会检查、验证它的数字签名并进行数字签名,再将它注册为哈希链上的新节点。尽管实现细节因区块链技术和版本差异很大,但对于所有这些技术和版本,基本概念是相同的。例如,如下图所示,Bill 是数字资产的所有者,他使用私钥发起向 Susan 转让数字资产。Susan 的交易记录使用 Bill 的公钥来验证他的签名。在此之后,Susan 使用公钥对数字资产进行签名,让 Susan 成为新所有者。这就会新建交易记录,即交易哈希链上的新链接。
    • 此交易哈希链受加密保护,并且防篡改。对交易 0 的任何更改都会导致 Sig0 变化,要求更新在交易 1 中存储的哈希值,以及哈希链上的每个后续交易。图中的交易对象包含数据。每个交易包含的数据因各个区块链实现而异。所以鉴于此,我已抽象化处理基础数据,因为要明白的要点是:哈希链是一种加密链接的交易链,即由上一个所有者的交易记录的哈希值链接起来。(在加密货币区块链中,每个交易对象都包含数字货币输入和输出列表,以及元数据(如时间戳和可选的交易费用)。这些加密货币输入和输出提供对财务账本进行精确建模所需的交易详情。)
  • Merkle树

    • 一些区块链使用另一种哈希链捆绑交易,即二叉哈希链或 Merkle 树。完整的 Merkle 树称为“二叉树结构”,因为它从根开始每个级别都有两个分支,如下图: Merkle 树是一种生成 Merkle 根哈希的二叉哈希树;此数据结构可以有效添加叶节点,并计算新 Merkle 根,而无需完全重新计算
    • 创建方式:计算每个交易对象中数据的 SHA-256 哈希,以创建一系列叶子节点(比特币区块链对每个 Merkle 节点进行双重哈希处理;双重哈希处理有助于在 SHA-256 算法中发现漏洞的情况下,强化哈希结果中的加密值)。Merkle 树要求必须有偶数个叶子节点。也就是说,如果开始时为奇数,惯例做法是复制最后一个叶子节点。然后,每一对叶子节点一起进行哈希处理,生成新哈希值。在上图中,叶子 A 将交易 A 的哈希显示为: H回答:;叶子 B 将交易 B 的哈希显示为 HB 表示同一个数字。此模式继续应用于每个树的级别,一直应用到最终的根节点。根节点的哈希值是树中其他所有哈希和的加密哈希和。对任意叶子节点中数据的任何更改,都会导致重新计算的 Merkle 树根哈希值发生变化。
    • 优点:它可以轻松更新交易中的数据,并计算新 Merkle 的根哈希,而无需从头开始生成整个 Merkle 树。例如,如果(上图中突出显示的)交易 E 发生了变化,只需高效地为树中每个级别反向计算一次新哈希,一直计算到 Merkle 根即可。因此,先计算新叶哈希 HE;再计算 HEF ,依据为 HE 和 HF;再计算 HEFGH ,依据为 HEF和 HGH;再计算新 Merkle 根哈希,依据为 HABCD 和 HEFGH。更新 Merkle 根哈希只需进行 4 次计算,而从头开始生成 Merkle 树则需要进行 15 次计算!
  • 生成区块链

    • 若要生成区块链(见下图),必须以某种方式将包含交易的二叉哈希链数据对象提交到可供所有人使用的防篡改数据存储中(请注意,这是公用区块链,网络上的任何节点都可以对它执行读取或写入操作)。由于 Merkle 树结构包含交易且防篡改,因此似乎可以用作区块链。不过,存在几个问题。Bill 必须信任以代理身份处理他的数字资产转让请求的服务或网站,并且必须信任暂留哈希结构的服务器,才能将他的数字资产发送给 Susan。如果没有处理新交易的中央节点,或没有委托处理交易的中央集权机构,任何节点都可以处理 Bill 的挂起交易。具有超高处理能力的未授权节点或基准节点会纵容无效或欺诈性交易发生,这些交易可能会传播到可靠节点。为了解决此问题,网络可以尝试随机分配一个节点来处理 Bill 的交易,但这会再次集中控制权,并要求相信随机数生成器确实是在强制实现随机性。为了杜绝此问题,区块链使用了共识算法,如下所述:
    • 为了构造交易区块,节点需要获取在网络上存储的未处理交易,并生成 Merkle 树来计算 Merkle 根哈希。因此,候选区块包含交易列表和区块标头,其中标头包括 Merkle 根哈希值、当前时间戳和 PoW 难度级别(有时还附加有标头数据)。然后,它必须解决 PoW 难题,这涉及计算双重哈希的整个 256 位区块哈希值,再找到 32 位数字 nonce。可以将此数字与哈希值连接,生成 288 位数字的哈希,这样结果中就带有一定数量的前导零。此 32 位 nonce 介于 0 到 232 (4,294,967,295) 之间。因此,惯常做法不是直接尝试猜测 nonce,而是从 nonce 0 开始,生成 SHA-256 哈希,并确定它是否有目标数量的前导零(也就是说,生成的哈希值小于目标值);如果没有,节点会增加 nonce 值,并再次尝试。如果节点尝试了所有 nonce 值都未能解决难题,它会重新计算区块哈希值。这就保证生成不同的区块哈希值,因为区块标头中的时间戳包含在区块哈希计算中。节点可以随时选择一批不同的挂起交易,以供添加到新区块中(或添加自上次检查起可能出现的新挂起交易),这会更改 Merkle 根哈希值,并会连同时间戳一起更改新计算出的区块哈希值。每次重新计算区块哈希时,节点都会再次遍历所有超过 40 亿个 nonce。
    • 随着时间的推移,网络上的某节点将会解决加密难题。此时,它会将新区块添加到区块链副本末尾(每个节点维护一个区块链副本),再将新区块广播到网络上的其他所有节点,这样它们就可以更新自己的区块链副本了。如果节点广播新区块,其他节点不会简单地相信新区块是有效的,它们会通过验证区块向自己证明这一点。若要进行验证,节点只需通过计算与 nonce 值连接的区块 SHA-256 哈希,即可验证 PoW 难题解决方案,并验证生成哈希的结果是否包含区块 PoW 难度值所指定数量的前导零。
  • 交易哈希链

    • 交易哈希链如何运作:
    • 这个图表中有3个交易。Alice 的 Transaction0,Bob 的 Transaction1,Charlie 的 Transaction2。第一个交易把 Alice 作为数字资产的原始拥有者,第二个交易把所有权转移给 Bob,第三个交易把所有权转移给 Charlie。每一个交易由这些实线外框的字段组成:
      • 交易哈希
      • 数字资产ID
      • 可选数据
      • 公钥
      • 签名
  • Ref:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published