PascalCoin新算法梳理(方便开发

概述

  1. 要求N次(轮)迭代下散列计算一个nonce

  2. 每轮从16个著名算法中选择一个随机散列算法

  3. 第x轮的输入值用所有先前轮的输出加盐

  4. 第x轮是输入是一个先前、临近轮的输出的压缩,大小100bytes

  5. 每轮输出是扩充,为了实现内存难度

  6. 随机性使用Mersenne Twister算法生成

  7. 随机性是通过每轮MurMur3校验和来播种

  8. 最终轮然后会被Sha2_256重新散列计算,来保持传统加密货币的方式

一点都不简单明了

伪代码分析

首先定义N为5 (那么总共的参与计算的轮数即为2^5 - 1 = 31
M(内存膨胀单元)为10KB

在第一轮:

  1. 先对区块头进行校验和计算出seed【1】

  2. 通过seed生成随机数【2】

  3. 设置roundInput为区块头

  4. 获得gen的下一个双字节值除18取余的余数,取出hash_algo列表中对应下标的散列计算方式。

  5. 用取出的散列计算方式计算roundInput获得输出值

  6. 将输出值通过 N-轮数 扩展内存难度。()

  7. 将最终输出值添加进roundOutputs这个数组中

  8. 返回这个roundOutput数组

在其他轮(2-N):

  1. 先设置父输出值为之前轮RandomHash结果(利用这个进行迭代)
  2. 设置seed为上个RandomHash输出的校验和
  3. 通过seed获得一个随机数
  4. 将所有的之前的输出值都放入roundOutputs数组之中
  5. 再使用ChangeNonce【3】对区块头换个nonce
  6. 对新的区块头,设置邻近输出值为对其的前几轮RandomHash结果
  7. 将这些也加入roundOutput数组中
  8. 将roundOutput进行压缩获得roundInput

重复上面4-8

计算细节:
【1】校验和计算:标准MurMu3算法 (可计算一个字符数组或者字符数组的数组)
【2】随机数生成:标准的Mersenne Twister(梅森旋转演算法)随机数生成
【3】改变nonce:克隆并修改区块头中的nonce值。(通过确定nonce的位偏移)
【4】压缩:输入为一个Byte数组的列表

  1. 对input进行校验和计算,
  2. 对计算结果进行随机数生成
  3. (强制)定义输出为一个100长度的Byte
  4. 循环100(i = 0-99)次,每次先设source为输入值中“第随机数除输入值长度的取余”个。然后输出值中第i个即为source中第“随机数除source长度取余”个。最终得到一个100长度的结果
    【5】扩展:输入为一个Byte的数组 以及一个整数作为扩展因数
  5. 对input进行校验和计算
  6. 对计算结果进行随机数生成
  7. size为输入的长度+ M×扩展因数,M为10KB
  8. 输出为输入的克隆
  9. 设置将加入的bytes个数为size-输入长度
  10. 当将加入的bytes个数>0时,设 下一数据块为输出的clone 如果
    下一数据块长度比将加入的bytes个数大那么将下一数据块长度重新设置为将加入的bytes个数。然后对随机数除8取余 额……++不知道是什么操作……大概是次方?

反正对应8种操作:

  1. 不操作 (e.g. input = 123456 output = 123456)
  2. 不乱序,中间交换前后 (e.g. input = 123456 output = 456123)
  3. 反转 (e.g. input = 123456 output = 654321)
  4. 左交错 (e.g. input = 123456 output = 142536)
  5. 右交错 (e.g. input = 123456 output = 415263)
  6. 左亦或 (e.g. input = 123456 output = XOR(1,2), XOR(3,4), XOR(5,6), XOR(1,6), XOR(2,5), XOR(3,4)
  7. ROL递增 (e.g. input = ABCDEF output = ROL(A, 0), ROL(B, 1), ... , ROL(F, 5)
  8. ROR递增 (e.g. input = ABCDEF output = ROR(A, 0), ROR(B, 1), ... , ROR(F, 5)

TESTNET挖矿软件源码分析

基于TESTNET v3.1
文件:pascalcoin_miner.pp
首先这个挖矿软件的GPU部分是基于cl的,不照顾cuda。
CPU挖矿:TCPUDeviceThread.Create (src/core/UPoolMinerThreads.pas)
GPU挖矿:TGPUDeviceThread.Create (src/core/UGPUMining.pas)

主要目标是GPU

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,120评论 19 139
  • 项目中大家可能都遇到过 需要删除某一个View的所有子View 但是,大家会发现iOS的View提供了一个 rem...
    橙园大菜阅读 1,378评论 0 0
  • 昨天东岗路出现了大拥堵,为什么呢?原来是一个文化课的培训机构要组织小升初考试。各路爸妈,从城市的各个角落蜂蛹赶来,...
    燕子飞过的痕迹阅读 2,425评论 0 0
  • 绵阳作为“科技之城”闻名已久。 去绵阳多次了,这次却因菊花展而爱上她。绵阳不大,却很喜欢她的交通便利,小城市风范又...
    北海二十一阅读 3,790评论 12 4
  • 文/迟溯 终于做了一个决定。 太急躁了,从出生开始,马不停蹄地向前奔,漫无目的地,也随波逐流地。不敢停下来想一想...
    PastTracer阅读 4,316评论 3 4

友情链接更多精彩内容