挖矿算法

TERA HASH



  • 介绍
  • 算法
  • 简单计算:
  • JS code

介绍

本算法的目的是维持CPU和GPU挖矿的公平性。为此,我们建议使用内存,但是本算法与其他类似算法(例如Ethash)不同,内存不会降低GPU的速度,但会加速CPU的速度。通过以下方式实现:选择散列时,不是使用整数随机数,而是使用特定值(该值计算很费时,例如由sha3算法计算),并允许将该值用于大范围的区块哈希计算枚举。因此,将这些特定值存在内存中以供选择,比重新计算它们更合算。即使计算速度增加1000倍,存在内存中也能维持优势。

alt

算法

输入是当前块CurrentDataHash的32字节哈希,您需要找到一个Nonce(整数),最大值即为该区块的合适哈希,其初始值为零。

限制:

1. 搜索应针对内存进行优化-制约GPU挖矿

2. 检查应以最少的内存量进行,并且应与sha3计算速度差不多

解决程序:

1. 计算HashNonce = sha3(PrevHashN,Nonce)

2. 哈希结果= SimpleMesh(HashTemp,CurrentDataHash)

PrevHashN是某个先前区块的32字节哈希,与NDelta上的当前块不同(最大深度限制为一定数量,例如1000个块)

Nonce-一个数字,用于迭代从0到整数的最大值

SimpleMesh()是快速混合(非加密)的功能。它必须满足以下条件:

1. 熵守恒

2. 高速-比步骤1(在此示例中为sha3)中的函数计算速度快1000倍。

3. 有效混合数据-防止快速搜索,即保证HashNonce无效

搜索到最令人满意的哈希后,写入区块链:CurrentDataHash,Nonce,NDelta-快速恢复区块哈希

alt

简单计算:

简单计算:

● GPU GTX 1060在1秒钟将创建并比较5亿个哈希值。

● 计算机:使用内存DDR4-2133,速度通道为177б/ s,因此也可以比较5亿哈希值

矿工必须证明基本哈希没有改变。他需要找到两个随机数:

一个适合当前区块的哈希值

与之前的区块哈希不同

主要计算公式:

Hash = XOR(DataHash, HNonce1)

Hash2 = XOR(PrevHash,HNonce2)

Power=min(Power(Hash),Power(Hash2))

alt

JS code:

function GetHash(PrevHash,BlockHash,Miner,BlockNum,Nonce0,
Nonce1,Nonce2,DeltaNum1,DeltaNum2)

{

              if(DeltaNum1>DELTA_LONG_MINING || DeltaNum2>DELTA_LONG_MINING)

       return undefined;

       //calculate the hashes, which will look similar HashNonce

       var HashBase=sha3(PrevHash);

       var HashCurrent=GetHashFromNum2(BlockHash,Miner,Nonce0);

       //Hash-Nonce

       var HashNonce1=GetHashFromNum3(BlockNum-DeltaNum1,Miner,Nonce1);

       var HashNonce2=GetHashFromNum3(BlockNum-DeltaNum2,Miner,Nonce2);

       //XOR

       var Hash1=XORArr(HashBase,HashNonce1);

       var Hash2=XORArr(HashCurrent,HashNonce2);

       //choose the least POW

       var Ret={Hash:Hash2};

       if(CompareArr(Ret.Hash1,Ret.Hash2)>0)

       {

              Ret.PowHash=Hash1;

       }

       else

       {

              Ret.PowHash=Hash2;

       }

       Ret.Hash=sha3arr2(Hash1,Hash2);

       return Ret;

}

alt

使用手册

开始挖矿



从源文件构建



  • 注意!
  • Windows
  • CentOS 7
  • UBUNTU 18.4

注意!

  • •安装后,在浏览器中输入服务器的地址。示例:12.34.56.78:8080
  • •要挖矿,必须具有静态(公网)IP地址和开放端口。
  • •建议不要在远程服务器上存储私钥。
  • •建议在私钥上添加一个额外的密码(“设置密码”按钮)-在这种情况下,私钥将以加密形式存储在文件中。
  • •如果没有为全节点指定http密码,则只能从本地地址127.0.0.1:8080访问,并且只能在启动节点10分钟后访问
  • •对于特定计算机(IP白名单)远程访问节点,请设置HTTP_IP_CONNECT常数(例如:“ HTTP_IP_CONNECT”:“ 122.22.33.11”)
  • •安装时,请注意secp256k1加密库。编译时应该没有报错(使用命令:npm install)
  • •如果启用了自动更新常量(“ USE_AUTO_UPDATE”:1),则更新将自动执行。如果关闭,则需要手动加载它并重新启动节点(请参阅以下部分)。

alt

Windows


  • cd ..\..\..\
  • git clone https://gitlab.com/terafoundation/tera2.git wallet
  • npm install --global --production windows-build-tools
  • npm install -g node-gyp
  • cd wallet/Source
  • npm install
  • node set httpport:8080 password:password_no_spaces
  • run-node.bat

在启动节点之前,我们建议在此处下载区块链的备份(zip大小为10 GB):


解压文档并将DB文件夹放入钱包的DATA文件夹(完全替换。

使用以下命令启动节点:


  • run-node.bat

如果要将钱包在后台运行,请执行以下操作,而不是最后一个命令(run-node.bat):


  • npm install pm2 -g
  • pm2 start run-node.js

打开端口


  • netsh advfirewall firewall add rule name="Open 30000 port" protocol=TCP localport=30000 action=allow dir=IN
alt

CentOS 7

运行命令:


  • yum install install unzip
  • yum install -y git
  • curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
  • yum install -y nodejs
  • yum install gcc gcc-c++
  • npm install pm2 -g
  • git clone https://gitlab.com/terafoundation/tera2.git wallet
  • cd ~/wallet/Source
  • npm install
  • node set httpport:8080 password:password_no_spaces

打开端口(全部):


  • systemctl stop firewalld
  • systemctl disable firewalld

在启动节点之前,我们建议在此处下载区块链的备份(zip大小为10 GB:


  • cd ~/wallet/DATA
  • wget https://terawallet.org/files/jinn-db.zip
  • unzip -o jinn-db.zip

运行节点:


  • cd ~/wallet/Source
  • pm2 start run-node.js

alt

UBUNTU 18.4

运行命令:


  • apt-get install unzip
  • apt-get install -y git
  • apt-get install -y nodejs
  • apt-get install -y npm
  • npm install pm2 -g
  • git clone https://gitlab.com/terafoundation/tera2.git wallet
  • apt install build-essential
  • apt group install "Development Tools"
  • cd ~/wallet/Source
  • npm install
  • node set httpport:8080 password:password_no_spaces

打开端口:


  • sudo ufw allow 30000/tcp
  • sudo ufw allow 8080/tcp
  • sudo ufw allow 80/tcp

Перед запуском ноды рекомендуется загрузить резервную копию блокчейна (размер zip 7,6 Гб) Здесь:


  • cd ~/wallet/DATA
  • wget https://terawallet.org/files/jinn-db.zip
  • unzip -o jinn-db.zip

运行节点:


  • cd ~/wallet/Source
  • pm2 start run-node.js

alt

DOCKER

Docker

此Docker映像需要环境变量PORT和PASSWORD来定义GUI侦听哪个端口和使用哪个密码来认证。默认设置为,port是8080和password是changeme。

手册阅读手册

常数

Описание констант (из версии 2360):

  • //IP协议
  • //集群
  • //统计
  • //信息展示
  • //通过HTTP访问全节点钱包
  • //挖矿:
  • //通过HTTP访问轻型节点API1和API2
  • //参数:
  • //其他

//IP协议

"IP_VERSION": 4, //IP协议的版本,有效值为4或6
"JINN_IP": "10.20.30.40", //节点的公网IP地址(如果未指定,则自动确定)
"JINN_PORT": 30000, //端口
"AUTODETECT_IP": 0, //IP地址检测模式(即JINN_IP常量的值在启动时重置)
"CLIENT_MODE": 0 //模式仅在客户端模式下,无法接收传入连接时有效

//集群

"COMMON_KEY": "Secret1", //受信任节点的总密钥(节点之间不能互相禁止)
"NODES_NAME": "Node001", //NETWORK页面上显示的受信任节点的名称
"CLUSTER_HOT_ONLY", //启用仅与集群节点的通信

//统计

"STAT_MODE": 1, //启用统计信息-请参阅“计数器”,“监视”页面
"MAX_STAT_PERIOD": 600, //统计时段

//信息展示

"LOG_LEVEL":2, //日志详细信息,数字越大,消息越多
"COUNT_VIEW_ROWS": 20, //每页的行数-在所有表中以分页显示
"ALL_VIEW_ROWS": 1, //查看区块链表的所有行,即使它们已被列入黑名单(例如,具误导性的DApp)
"START_HISTORY": 16, //记录交易记录的帐号

//通过HTTP访问全节点钱包

"HTTP_PORT_NUMBER": 8000, //HTTP访问端口
"HTTP_PORT_PASSWORD": "SecretWord", //密码
"HTTP_IP_CONNECT": "123.111.222.233, 123.11.22.223", //启用IP地址过滤器以进行远程访问
"WALLET_NAME": "=Node1=", //浏览器选项卡上显示的钱包名称

//挖矿:

"USE_MINING": true, //启用挖矿
"MINING_ACCOUNT": 0, //账户收到所发现区块奖励的数量
"MINING_START_TIME": "6:30", //一天中开始挖矿的时间,格式为hh:mm:ss时间(UTC)(必须通过常量USE_MINING启用挖矿),如果未设置该值,则始终执行挖矿
"MINING_PERIOD_TIME": "16:30", //从开始以来的挖矿时段,格式hh:mm:ss
"POW_MAX_PERCENT": "70", //最大CPU使用率(占每个挖矿进程的百分比)
"COUNT_MINING_CPU": 0, //挖矿期间要运行的进程数
"SIZE_MINING_MEMORY": 20000000, //分配在所有进程上用于挖矿的内存总数(以字节为单位)
"POW_RUN_COUNT": 5000, //在每个进程的每个挖矿迭代中计算的哈希数(哈希1,哈希2)(每个迭代在1 MS中启动一次-但在这一秒之内依赖POW_MAX_PERCENT参数)

//通过HTTP访问轻型节点API1和API2

"USE_API_WALLET": 1, //启用light(web)客户端支持
"USE_API_V1": 1, //启用API1
"MAX_TX_FROM_WEB_IP": 20, //限制发送数量(每10分钟)
"USE_HARD_API_V2": 0, //不建议为公共访问启用API2节点支持

//参数:

"HTTP_HOSTING_PORT": 80, //网页端口号
"HTTPS_HOSTING_DOMAIN": "", //域名
"HTTP_MAX_COUNT_ROWS": 20, //数据请求的行数限制
"HTTP_START_PAGE": "", //主页(默认网页钱包)
"HTTP_CACHE_LONG": 10000, //页面缓存时间(秒)
"HTTP_USE_ZIP": 0, //使用页面归档
"WEB_LOG": 0, //启用日志

//其他

"USE_AUTO_UPDATE": 1, //使用在线自动更新
"JINN_MAX_MEMORY_USE": 400, //区块链数据库缓存的内存限制(MB)
"RESTART_PERIOD_SEC": 0, //在指定的时间(秒)后自动重启节点
"NOT_RUN": 0, //禁用节点
"DELTA_CURRENT_TIME": -50, //相对于TERA网络的时间偏差(自动设置)
"LOG_LEVEL":2, //日志详细信息,数字越大,消息越多

## 注意:
* 常量以JSON格式存储
* 在逻辑常量(例如启用或禁用某些功能)中,我们建议使用数字0或1
* 可以从命令行按以下方式更改任何常量(在~/ wallet / Source目录中运行):node set NAME = Value
* 更改常量后,重新启动节点

矿工排行

实时挖矿信息

alt

TERA社区

Follow我们