алгоритм майнинга

TERA HASH



  • Введение
  • Алгоритм
  • Небольшие расчеты
  • JS code

Введение

Целью этого алгоритма является уравнивание людей, который майнят на ЦП, и людей, добывающих данные на GPU. Для достижения этого мы предлагаем использовать память, но в отличие от других подобных алгоритмов (таких как Ethash) в нашем алгоритме память не замедляет работу GPU, а ускоряет работу ЦП. Это можно сделать, используя не целочисленное случайное число при выборе хеша, а определенное значение, которое требует времени для вычисления, например, вычисленное алгоритмом sha3 и позволяющее использовать это значение для перечисления в широком диапазоне блочных хеш-вычислений. Таким образом, выгоднее хранить эти значения в памяти для выбора, чем пересчитывать их. Это преимущество должно быть сохранено, даже если скорость вычислительных ресурсов увеличится в 1000 раз.

alt

Алгоритм

Ввод представляет собой 32-байтовый хеш текущего блока CurrentDataHash, нужно найти случайное число (целое число), так чтобы результатом будет подходящий хеш блока с максимальным значением начальных нулей.

Ограничение:

1. Поиск должен быть оптимизирован для использования памяти - для защиты от майнинга на графических процессорах

2. Проверка должна выполняться с минимальным объемом памяти и быть быстрой по скорости вычисления sha3

Порядок расчетов:

1. Расчетный HashNonce= sha3(PrevHashN , Nonce)

2. Результирующий хэш = SimpleMesh(HashTemp,CurrentDataHash)

PrevHashN - это 32-байтовый хэш какого-либо предыдущего блока, отличающийся от текущего блока на NDelta (максимальная глубина ограничена определенным числом, например 1000 блоков)

Случайное число - число для итерации значений от 0 до max целого числа

SimpleMesh () - функция быстрого смешивания (не криптографического). Она должна удовлетворять следующим условиям:

1. Сохранение энтропии

2. Высокая скорость - в 1000 раз быстрее, чем скорость вычисления функции на шаге 1 (sha3 в этом примере).

3. Должна хорошо смешивать данные - чтобы предотвратить быстрый поиск, т.е. гарантировать взлом HashNonce

После поиска наиболее удовлетворяющего хеша записывается блокчейн: CurrentDataHash, Nonce, NDelta - который быстро восстанавливает хэш блока

alt

Небольшие расчеты

Небольшие расчеты:

● GPU GTX 1060 за 1 секунду создаст и сравнит порядок 0,5 млрд хешей.

● Компьютер: с помощью памяти DDR4-2133 должен будет иметь скорость канал 17ГБ/с и поэтому сможет сравнить также порядка 0,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

Attention!

  • После установки введите адрес вашего сервера в браузере. Пример: 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 7,6 Гб) Здесь:


Распакуйте архив и поместите папку BD в папку DATA кошелька (с полной заменой).

Запустите ноду командой:


  • run-node.bat

Если вы хотите запустить кошелек как фоновый процесс, то вместо последней команды (run-node.bat) выполните следующее:


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

Opening Port


  • 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 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

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 определят, какой порт прослушивает графический интерфейс пользователя и какой пароль следует использовать для аутентификации. По умолчанию порт - 8080, а пароль - changeme.

ИнструкцияЧитатьИнтсрукция

КОНСТАНТЫ

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

  • //IP-PROTOCOL
  • //КЛАСТЕРЫ
  • //СТАТИСТИКА
  • //Отображение информации
  • //HTTP доступ к полным узлам
  • //МАЙНИНГ:
  • //HTTP доступ к облегченным узлам
  • //параметры:
  • //ETC

//IP-PROTOCOL

"IP_VERSION": 4, //версия ip Protocol, допустимые значения: 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, //включить статистику - см. Counters, Monitor pages
"MAX_STAT_PERIOD": 600, //период статистики

//Отображение информации

"LOG_LEVEL":2, //сведения регистрации, чем больше число, тем больше сообщений
"COUNT_VIEW_ROWS": 20, //количество строк на страницу - отображается во всех таблицах с разбиением на страницы
"ALL_VIEW_ROWS": 1, //просмотреть все строки блокчейн-таблиц, даже если они включены в черный список (например, DAPs misleading
"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", //время начала майнинга в течение дня в формате чч: мм: сс время в UTC (майнинг должен быть включен константой USE_MINING), если значение не установлено, то майнинг выполняется все время
"MINING_PERIOD_TIME": "16:30", //период майнинг с начала формата чч: мм: сс
"POW_MAX_PERCENT": "70", //максимальное использование ЦП в процентах от каждого процесса майнинга
"COUNT_MINING_CPU": 0, //количество процессов, выполняемых во майнинга
"SIZE_MINING_MEMORY": 20000000, //общее количество памяти, выделенной для майнинга во всех процессах (в байтах)
"POW_RUN_COUNT": 5000, //количество хэшей (hash1, hash2), вычисленное при каждой итерации майнинга в каждом процессе (каждая итерация запускается один раз в 1 МС - но в течение этой секунды берется POW_MAX_PERCENT параметр)

//HTTP доступ к облегченному узлу, API1 и API2

"USE_API_WALLET": 1, //включение облегченной (веб) поддержки клиентов
"USE_API_V1": 1, //включение API1
"MAX_TX_FROM_WEB_IP": 20, //ограничить количество tx (каждые 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, //включение ведения журнала

//ETC

"USE_AUTO_UPDATE": 1, //использование автоматических обновлений в сети
"JINN_MAX_MEMORY_USE": 400, //ограничение памяти, которое используется для кэша базы данных блокчейн в МБ
"RESTART_PERIOD_SEC": 0, //автоматический перезапуск узлов после указанного периода в секундах
"NOT_RUN": 0, //отключение узла
"DELTA_CURRENT_TIME": -50, //отклонение по времени относительно сети Tera (устанавливается автоматически)
"LOG_LEVEL":2, //сведения регистрации, чем больше число, тем больше сообщений

## Примечание:
* Константы хранятся в формате
* В логических константах, таких как включение или отключение чего-либо, рекомендуется использовать число 0 или 1
* Любая константа может быть изменена из командной строки следующим образом (запуск в каталоге ~/wallet/Source directory): node set NAME=Value
* После изменения констант перезапустите узел

ТОП Майнеров

Информация о майнинге в реальном времени

alt

Сообщество TERA

Присоединяйтесь