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

使用C#编写自己的区块链挖矿算法

发布时间:2019-08-09 02:00:45 所属栏目:业界 来源:MyZony
导读:副标题#e# 什么是加密货币挖掘? 一个加密货币的价值体现在它的稀缺性上,如果任何人都可以任意构造一个比特币,那么比特币就毫无价值,所以比特币的区块链会让参与者完成一项工作,根据这个工作的最终结果还分发比特币,这个过程就被叫做挖矿。这就类似于

我们首先添加一个新的方法来验证生成的散列值是否包含指定数量的前导 0 :

  1. /// <summary>  
  2. /// 校验 Hash 是否有效  
  3. /// </summary>  
  4. /// <param name="hashStr">Hash 值</param>  
  5. /// <param name="difficulty">难度</param>  
  6. /// <returns></returns>  
  7. public static bool IsHashValid(string hashStr, int difficulty)  
  8. {  
  9.             var bytes = Enumerable.Range(0, hashStr.Length)  
  10.                 .Where(n => n % 2 == 0)  
  11.                 .Select(n => Convert.ToByte(hashStr.Substring(n, 2), 16))  
  12.                 .ToArray();  
  13.             var bits = new BitArray(bytes);  
  14.             for (var i = 0; i < difficulty; i++)  
  15.             {  
  16.                 if (bits[i]) return false;  
  17.             }  
  18.             return true;  

然后我们更改了之前区块 Hash 的生成方法:

  1. /// <summary>  
  2. /// 计算区块 HASH 值  
  3. /// </summary>  
  4. /// <param name="block">区块实例</param>  
  5. /// <returns>计算完成的区块散列值</returns>  
  6. public static string CalculateHash(Block block)  
  7. {  
  8.     string calculationStr = $"{block.Index}{block.TimeStamp}{block.BPM}{block.PrevHash}{block.Nonce}";  
  9.     SHA256 sha256Generator = SHA256.Create();  
  10.     byte[] sha256HashBytes = sha256Generator.ComputeHash(Encoding.UTF8.GetBytes(calculationStr));  
  11.     StringBuilder sha256StrBuilder = new StringBuilder();  
  12.     foreach (byte @byte in sha256HashBytes)  
  13.     {  
  14.         sha256StrBuilder.Append(@byte.ToString("x2"));  
  15.     }  
  16.     return sha256StrBuilder.ToString();  

在这里我们新增新增了 Nonce 随机值作为散列生成的依据。

(编辑:西安站长网)

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

热点阅读