加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

行使C#编写本身的区块链挖矿算法

发布时间:2019-08-10 18:00:51 所属栏目:业界 来源:MyZony
导读:什么是加密钱币发掘? 一个加密钱币的代价表此刻它的稀缺性上,假如任何人都可以恣意结构一个比特币,那么比特币就毫无代价,以是比特币的区块链会让参加者完成一项事变,按照这个事变的最终功效还分发比特币,这个进程就被叫做挖矿。这就相同于一个黄金矿
副问题[/!--empirenews.page--]

什么是加密钱币发掘?

一个加密钱币的代价表此刻它的稀缺性上,假如任何人都可以恣意结构一个比特币,那么比特币就毫无代价,以是比特币的区块链会让参加者完成一项“事变”,按照这个事变的最终功效还分发比特币,这个进程就被叫做“挖矿”。这就相同于一个黄金矿工花一些时刻来事变,然后得到一点黄金。

挖矿的道理

假如你百度/谷歌搜刮 比特币挖矿的道理 的话,城市给你说是计较一个伟大的数学题目罢了,可是这么说的话太笼统并且也太简朴。采矿引擎怎样事变这是一个重要的常识点,以是我们必要相识一些暗码学常识和哈希算法相干的常识,才气知道挖矿的根基道理。

哈希/散列先容

单向加密人类可以或许领略的输入,譬喻 Hello World ,并将其扔到某个加密函数(即所谓的伟大的数学题目),加密函数的算法越伟大,逆向工程就越坚苦。

譬喻一个 SHA - 256 的例子,这个网站(链接:http://tool.oschina.net/encrypt?type=2)可以很快的计较散列值,让我们来散列 “Hello World” 看看会获得什么功效:

行使C#编写本身的区块链挖矿算法

不管你试验屡次城市获得一样的散列值,在编程中这种被称之为幂等性。

加密算法的一个根基特征就是,它们很难通过逆向工程来获得明文功效,可黑白常轻易验证他们的加密功效,譬喻这里的 “Hello World” 很难通过逆向工程获得他的原明文功效,比特币回收的是 Double SHA-256 也就是将明文通过 SHA-256 计较过一次之后,再拿 SHA-256 针对散列值再次举办计较,在这里我们只行使 SHA-256 来举办加密。

事变证明

比特币通过让参加者散列随机的字母与数字的组合,直到计较出来的散列包括前导 0。

譬喻我们计较 886 的散列值可以获得如下功效:

  1. 000f21ac06aceb9cdd0575e82d0d85fc39bed0a7a1d71970ba1641666a44f530 

它返回了 3 个 0 作为前缀的散列值,可是我们怎么知道 886 计较出来的散列功效发生了 3 个 0呢?

谜底是我并不必要知道。我必要知道矿工给我的散列值前导有几个零就好了,并不必要伟大的算法来验证整个散列值的有用性。

比特币则轻微伟大一点,它每隔 10 分钟天生一个新的区块,新区块的散列值的难度它可以动态调解,就相同于 CLR 的 GC 一样,它可以按照今朝挖矿的人数来举办难度动态调解,假如挖矿的人多的话,则调高难度,少则调低。

下手开拓

1.项目设置

起首新建一个 Asp.Net Core 项目,然后选择 Empty Project(空项目) 范例,成立完成后无需举办任何设置。

2.数据模子

这里我们来建设一个详细的区块数据模子,行使的是 Struct 布局体。

  1. public struct Block  
  2. {  
  3.     /// <summary>  
  4.     /// 区块位置  
  5.     /// </summary>  
  6.     public int Index { get; set; }  
  7.     /// <summary>  
  8.     /// 区块天生时刻戳  
  9.     /// </summary>  
  10.     public string TimeStamp { get; set; }  
  11.     /// <summary>  
  12.     /// 心率数值  
  13.     /// </summary>  
  14.     public int BPM { get; set; }  
  15.     /// <summary>  
  16.     /// 区块 SHA-256 散列值  
  17.     /// </summary>  
  18.     public string Hash { get; set; }  
  19.     /// <summary>  
  20.     /// 前一个区块 SHA-256 散列值  
  21.     /// </summary>  
  22.     public string PrevHash { get; set; }  
  23.     /// <summary>  
  24.     /// 下一个区块天生难度  
  25.     /// </summary>  
  26.     public int Difficulty { get; set; }  
  27.     /// <summary>  
  28.     /// 随机值  
  29.     /// </summary>  
  30.     public string Nonce { get; set; }  

Difficulty 是一个整形,他界说了我们但愿获得哈希前导 0 的数目,前导 0 越多,天生正确的散列值就越坚苦,我们此刻从 1 开始。

Nonce 则是每次计较块散列值所必要的随机值。

3. 事变证明

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读