Майнинг домашней выделки: пул miningcore

Ответить
Аватара пользователя
cemehbl4
Newbie
Сообщения: 14
Зарегистрирован: 10 май 2022, 18:27

Майнинг домашней выделки: пул miningcore

Сообщение cemehbl4 »

Всем привет! После ручного добавления UFO в Trezor https://slabber.io/posts/287, я задумался о том, как бы помайнить уфошек децентрализованно, да ещё и с мониторингом происходящего. Нужно просто поднять локальный пул, и ничего в этом сложного нет :)

Из этой статьи вы узнаете:
  • Как поднять майнинг пул
  • Как добавить монетку, которую найденный на просторах GitHub пул не поддерживает (но поддерживает нужный алгоритм)
  • Как собрать майнер из исходного кода
Нам понадобится:
  • Linux, я сделал всё на Ubuntu 20.04 (можно и на винде, но не мой профиль)
Скачиваем последнюю версию UFO core:

Код: Выделить всё

wget https://github.com/fiscalobject/ufo/releases/download/v0.18.1/ufo-0.18.1-linux64.tar.gz
tar -xvf ufo-0.18.1-linux64.tar.gz
Меняем стандартный конфиг UFO core:

Код: Выделить всё

mkdir ~/.ufo
nano ~/.ufo/ufocoin.conf

Код: Выделить всё

zmqpubhashblock=tcp://127.0.0.1:15101
# юзернейм
rpcuser=ufocore
# пароль
rpcpassword=ufocore
deprecatedrpc=accounts
addresstype=legacy
changetype=legacy
Сохраняем изменения (ctrl+X, Y, Enter) и синхронизируемся с блокчейном:

Код: Выделить всё

./ufod
# или запускаем в screen, если используется серверный дистрибутив
screen -dmS ufo ./ufod
# в логе ноды нужно дождаться progress=1.000000
# посмотреть лог: screen -r ufo
# выйти из скрина: последовательно нажать ctrl+A, ctrl+D
Получаем пару новых адресов:

Код: Выделить всё

./ufo-cli getnewaddress
./ufo-cli getnewaddress
# адреса будут Legacy формата B или C, с ними работает пул, а вот в майнере можно указывать любой
Переходим к пулу. Устанавливаем зависимости:

Код: Выделить всё

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo apt install ./packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt update
sudo apt install postgresql dotnet-sdk-6.0 git cmake build-essential libssl-dev pkg-config libboost-all-dev libsodium-dev libzmq5 libzmq3-dev nginx gcc g++ make
Клонируем репозиторий пула:

Код: Выделить всё

git clone https://github.com/oliverw/miningcore
Настраиваем PostgreSQL:

Код: Выделить всё

sudo -u postgres psql

# пароль от базы данных указывается после PASSWORD внутри одинарных кавычек
CREATE ROLE miningcore WITH LOGIN ENCRYPTED PASSWORD 'miningcore';
CREATE DATABASE miningcore OWNER miningcore;
\q

sudo -u postgres psql -d miningcore -f miningcore/src/Miningcore/Persistence/Postgres/Scripts/createdb.sql

# если вы получили ошибку вида:
# could not change directory to "/home/user": Permission denied
# psql: error: miningcore/src/Miningcore/Persistence/Postgres/Scripts/createdb.sql:
# No such file or directory
# то необходимо добавить юзера postgres в группу вашего пользователя
# и повторить команду
sudo usermod -a -G $USER postgres
Собираем пул:

Код: Выделить всё

cd ~/miningcore/src/Miningcore
dotnet publish -c Release --framework net6.0 -o ../../build
После завершения сборки необходимо изменить два конфигурационных файла в директории ~/miningcore/build

Код: Выделить всё

cd ~/miningcore/build
nano coins.json
Добавляем UFO по аналогии с Feathercoin с небольшим отличием в blockHasher:

Код: Выделить всё

    "ufocoin": {
        "name": "UFOcoin",
        "symbol": "UFO",
        "family": "bitcoin",
        "website": "",
        "market": "",
        "twitter": "",
        "telegram": "",
        "discord": "",
        "coinbaseHasher": {
            "hash": "sha256d"
        },
        "headerHasher": {
            "hash": "neoscrypt",
            "args": [ 0 ]
        },
        "blockHasher": {
              "hash": "reverse",
              "args": [ { "hash": "sha256d" } ]
        },
        "shareMultiplier": 65536,
        "explorerBlockLink": "https://chainz.cryptoid.info/ufo/block.dws?$height$.htm",
        "explorerTxLink": "https://chainz.cryptoid.info/ufo/tx.dws?{0}.htm",
        "explorerAccountLink": "https://chainz.cryptoid.info/ufo/address.dws?{0}.htm"
    },
Сохраняем и создаем конфиг пула. Подробнее о файле конфигурации можно узнать здесь https://github.com/oliverw/miningcore/w ... figuration

Код: Выделить всё

{
    "logging": {
        "level": "info",
        "enableConsoleLog": true,
        "enableConsoleColors": true,
        "logFile": "core.log",
        "apiLogFile": "api.log",
        "logBaseDirectory": "./logs",
        "perPoolLogFile": false
    },
    "banning": {
        "manager": "Integrated",
        "banOnJunkReceive": false,
        "banOnInvalidShares": false
    },
    "notifications": {
        "enabled": false,
        "email": {
            "host": "smtp.example.com",
            "port": 587,
            "user": "user",
            "password": "password",
            "fromAddress": "info@yourpool.org",
            "fromName": "pool support"
        },
        "admin": {
            "enabled": false,
            "emailAddress": "user@example.com",
            "notifyBlockFound": true
        }
    },
    "persistence": {
        "postgres": {
            "host": "127.0.0.1",
            "port": 5432,
            "user": "miningcore",
            "password": "miningcore", // пароль от БД, заданный в psql
            "database": "miningcore"
        }
    },
    // Generate payouts for recorded shares and blocks
    "paymentProcessing": {
        // ставим значение false, если майните в одиночку и не нужны выплаты
        // на другой кошелек
        "enabled": true,
        "interval": 600,
        "shareRecoveryFile": "recovered-shares.txt"
    },
    "api": {
        "enabled": true,
        "listenAddress": "0.0.0.0",
        "port": 4000,
       "metricsIpWhitelist": [],
        "rateLimiting": {
            "disabled": true,
            "rules": [
                {
                    "Endpoint": "*",
                    "Period": "1s",
                    "Limit": 20
                }
            ],
            "ipWhitelist": []
        }
    },
    "pools": [
        {
            "id": "ufo",
            "enabled": true,
            "coin": "ufocoin",
            // здесь указывается один из адресов, полученных с помощью ufo-cli
            "address": "B.................",
            "rewardRecipients": [
                {
                    // здесь указывается второй адрес, полученный с помощью ufo-cli
                    "address": "B.................",
                    // комиссия пула в %, обязательно указывать отличную от нуля,
                    // если осуществляются выплаты
                    "percentage": 0.5
                }
            ],
            "blockRefreshInterval": 0,
            "jobRebroadcastTimeout": 10,
            "clientConnectionTimeout": 600,
            "banning": {
                "enabled": false,
                "time": 600,
                "invalidPercent": 50,
                "checkThreshold": 50
            },
            "ports": {
                // Порт, на который будет коннектиться майнер
                "8888": {
                    "listenAddress": "0.0.0.0",
                    // Сложность подбирается индивидуально, в зависимости от
                    // хэшрейта оборудования
                    "difficulty": 10.0,
                    "tls": false,
                    "tlsPfxFile": "/var/lib/certs/mycert.pfx",
                    "varDiff": {
                        "minDiff": 10.0,
                        "maxDiff": null,
                        "targetTime": 15,
                        "retargetTime": 90,
                        "variancePercent": 30,
                        "maxDelta": 500
                    }
                }
            },
            "daemons": [
                {
                    "host": "127.0.0.1",
                    // rpc-порт ноды, узнать его можно так: ./ufod -h | grep rpcport
                    "port": 9888,
                    // юзернейм из ufocoin.conf
                    "user": "ufocore",
                    // пароль из ufocoin.conf
                    "password": "ufocore",
                    "zmqBlockNotifySocket": "tcp://127.0.0.1:15101",
                }
            ],
            "paymentProcessing": {
            // ставим значение false, если майните в одиночку и не нужны выплаты
            // на другой кошелек
                "enabled": true,
                "minimumPayment": 0.1,
                "payoutScheme": "PPLNS",
                "payoutSchemeConfig": {
                    "factor": 0.5
                }
            }
        },
    ]
}
Сохраняем и запускаем пул:

Код: Выделить всё

./Miningcore -c config.json
Изображение
Прикручиваем веб-интерфейс:

Код: Выделить всё

cd
git clone https://github.com/minernl/Miningcore.WebUI webui/
nano webui/js/miningcore.js
# в открывшемся файле преобразуем 33 строку следующим образом
var API            = "http://192.168.XX.XX:4000/" + "api/";
# где 192.168.XX.XX - адрес вашей машины в локальной сети
# узнать его можно, например, с помощью команды ifconfig

# для красоты можно закинуть png-иконку UFO по пути ~/webui/img/coin/icon/ufo.png
Настраиваем веб-сервер nginx:

Код: Выделить всё

sudo nano /etc/nginx/sites-available/default
# удаляем всё и прописываем следующую конфигурацию

server {
        listen 0.0.0.0:4001;
        root /home/LINUX_ЮЗЕРНЕЙМ/webui;
        index index.html;
}

# сохраняем и перезапускаем nginx
sudo systemctl restart nginx.service

# открываем порты API, веб-сервера и stratum
sudo ufw allow 4000
sudo ufw allow 4001
sudo ufw allow 8888
Заходим в браузере на http://192.168.XX.XX:4001

Если в браузере получили ошибку "403 Forbidden", то необходимо добавить юзера www-data в группу вашего пользователя, перезапустить nginx, и обновить страницу в браузере через ctrl+F5:

Код: Выделить всё

sudo usermod -a -G $USER www-data
sudo systemctl restart nginx.service
Собственно всё, можно цепляться майнером на порт 8888 с любой машины в локальной сети. Но так как готовых релизов майнеров под линукс нет, соберу их из исходного кода.

Сборка ccminer.

Устанавливаем CUDA 11.3 с сайта Nvidia:

Код: Выделить всё

wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run

sudo sh cuda_11.3.0_465.19.01_linux.run
# в появившихся настройках отключите установку драйвера Nvidia

rm cuda_11.3.0_465.19.01_linux.run

cd /usr/lib/x86_64-linux-gnu
sudo ln -s /usr/local/cuda-11.3/targets/x86_64-linux/lib/stubs/libcuda.so libcuda.so
Собираем майнер:

Код: Выделить всё

cd
git clone https://github.com/tpruvot/ccminer
cd ccminer

nano Makefile.am
# для поддержки последних архитектур Nvidia найдите и раскоментируйте строки:

nvcc_ARCH += -gencode=arch=compute_75,code=\"sm_75,compute_75\"
nvcc_ARCH += -gencode=arch=compute_70,code=\"sm_70,compute_70\"
nvcc_ARCH += -gencode=arch=compute_61,code=\"sm_61,compute_61\"

# и добавьте пару новых:
nvcc_ARCH += -gencode=arch=compute_86,code=\"sm_86,compute_86\"
nvcc_ARCH += -gencode=arch=compute_80,code=\"sm_80,compute_80\"

sudo apt install libcurl4-openssl-dev libssl-dev libjansson-dev automake autotools-dev build-essential

./build.sh
Готовый исполняемый файл будет находиться в папке ccminer. Можно запускать!

Код: Выделить всё

./ccminer -a neoscrypt -o stratum+tcp://192.168.XX.XX:8888 -u U-любой-адрес-кошелька.Имя-воркера
Сборка nsgminer.

Код: Выделить всё

cd
sudo apt install build-essential autoconf automake libtool pkg-config libcurl4-gnutls-dev
git clone https://github.com/ghostlander/nsgminer
cd nsgminer/bitstreams/src/
git clone https://github.com/luke-jr/X6000_ztex_comm4
cd ../../
nano autogen.sh

# закомментировать следующие строки:

#if test -z "$NOSUBMODULES" ; then
#       echo 'Getting submodules...'
#       ( #               cd "${bs_dir}"
#               git submodule update --init
#       )
#fi

./autogen.sh
make
Готовый исполняемый файл будет находиться в папке nsgminer. Запускаем!

Код: Выделить всё

./nsgminer -o stratum+tcp://192.168.XX.XX:8888 -u U-любой-адрес-кошелька.Имя-воркера -p x --neoscrypt --no-getwork
Домашний пул готов. Ну и, конечно, нет ничего приятнее, чем свой собственный первый блок :)
Изображение
Изображение
Официально поддерживаемые пулом miningcore алгоритмы и монеты можно найти в этом файле.

На данный момент список такой:
autolykos2 – ERG
blake2s – XVG
cpupower – CPU
equihash 96.5 – MNX
equihash 144.5 – BTG, FLUX, BTH
equihash 200.9 – ZEC, BTCP, ZEN
ethash – ETHW, CLO
geek – GEEK
ghostrider – RTM, THOON, YERB
groestl – GRS
groestlmyriad – DGB, AUR, SMLY, XVG
heavyhash – OBTC
lyra2rev2 – MONA, XVG
lyra2z – ACM, ALPS
minotaur – LCC, RNG
neoscrypt – FTC, LUCKY, SPK
phi5 – CBE
qubit – DGB, AUR, SMLY
randomx – XMR

scrypt – LTC, DOGE, AUS, BCC, FLAPX, FLO, HFR, MNC, MOON, NTBC, PAK, PHC, ROC, ROGER, TLT, VIA, VPC, WDC, DGB, AUR, BUTK, PYRK, SMLY, VLS, XVG

sha256d – BTC, BCH, BSV, BCON, BFL, DANE, XEC, DEM, XRG, ETIT, LANA, MAZA, NMC, PPC, PIC, PLC, SUSU, TRC, TDC, TIT, WCN, ZET, DGB, AUR, BUTK, PYRK, SMLY, VLS

skein – DGB, AUR, SMLY
verthash – VTC, BRWN
verushash – VRSC
x11 – DASH, AXE, BOLI, CANN, EMRALS, LEVO, PAC, PYRK, SCC, SWP, XNC, XAZAB
x13 – FCH
x13bcd – BCD
x16r – EXO, HTH
x16rv2 – VGC, FOXD, IDX, SHRX
x17 – XVG
yescrypt – BSTY
yescryptR16 – ELI, GOLD, REAN
yespower – VECO
yespowerarwn – ARWN
yespowermgpc – MGPC
yespowerr16 – LTFN, YTN
yespowersugar – BUTK, SUGAR
yespowertide – TDC
UPD 1

На настоящий момент пул не поддерживает обновление MimbleWimble Extension Blocks в Litecoin, то есть нельзя использовать ноду версии 0.21+.

Имеется баг в монете eCash (XEC), блоки отвергаются нодой по неизвестной причине.

Zcash также не поддерживается после хардфорка NU5.

UPD 2

Как выяснилось, пул может не собираться на некоторых моделях процессоров, по крайней мере на данный момент. Если вы получили ошибку сборки, то нужно закомментировать строки с упоминанием cryptonote, cryptonight, RandomX и RandomARQ в файле src/Miningcore/build-libs-linux.sh. К слову, miningcore - не лучший выбор для майнинга монеро и криптонайтов, но об этом в следующих сериях.

Код: Выделить всё

#(cd ../Native/libcryptonote && make clean && make) && mv ../Native/libcryptonote/libcryptonote.so "$OutDir"

#(cd ../Native/libcryptonight && make clean && make) && mv ../Native/libcryptonight/libcryptonight.so "$OutDir"

#((cd /tmp && rm -rf RandomX && git clone https://github.com/tevador/RandomX && cd RandomX && git checkout tags/v1.1.10 && mkdir build && cd build && cmake -DARCH=native .. && make) && (cd ../Native/librandomx && cp /tmp/RandomX/build/librandomx.a . && make clean && make) && mv ../Native/librandomx/librandomx.so "$OutDir")

#((cd /tmp && rm -rf RandomARQ && git clone https://github.com/arqma/RandomARQ && cd RandomARQ && git checkout 14850620439045b319fa6398f5a164715c4a66ce && mkdir build && cd build && cmake -DARCH=native .. && make) && (cd ../Native/librandomarq && cp /tmp/RandomARQ/build/librandomx.a . && make clean && make) && mv ../Native/librandomarq/librandomarq.so "$OutDir")
Аватара пользователя
seld
Regular
Сообщения: 4697
Зарегистрирован: 31 мар 2022, 13:23
Откуда: Из Тундудова
Контактная информация:

Re: Майнинг домашней выделки: пул miningcore

Сообщение seld »

100р
Изображение
Ответить

Вернуться в «Уголок Семеныча»