Coinfoundry: Porovnání verzí
(→Net Core) |
(→Instalace) |
||
(Není zobrazeno 11 mezilehlých verzí od stejného uživatele.) | |||
Řádka 9: | Řádka 9: | ||
=== [https://www.postgresql.org/ PostgreSQL] === | === [https://www.postgresql.org/ PostgreSQL] === | ||
Dale je třeba nainstalovat PostgreSQL databázi. Patřičnou verzi z postupem nalezneme na https://www.postgresql.org/download/. | Dale je třeba nainstalovat PostgreSQL databázi. Patřičnou verzi z postupem nalezneme na https://www.postgresql.org/download/. | ||
+ | |||
+ | === Coin Core === | ||
+ | Pro vlastní těžbu a transakce musí být k dispozici "plnohodnotné" peněženky. Instalaci jednotlivých peněženek zde nebudu uvádět a věřím že půjde použít i peněženky na jiném PC. | ||
+ | |||
+ | === Nastavení databáze === | ||
+ | |||
+ | sudo -u postgres -i | ||
+ | createuser miningcore | ||
+ | createdb miningcore | ||
+ | psql (heslo pro postgres) | ||
+ | |||
+ | Heslo nebylo potřeba ??? Následně nastavíme práva - ale nevím která varianta ...: | ||
+ | |||
+ | alter user miningcore with password 'ps888sQl'; | ||
+ | alter user miningcore with encrypted password 'heslo-databaze'; | ||
+ | grant all privileges on database miningcore to miningcore; | ||
+ | \q | ||
+ | |||
+ | A na konec stáhneme vlastní databázi a naimportujeme ji. | ||
+ | |||
+ | wget https://raw.githubusercontent.com/coinfoundry/miningcore/master/src/MiningCore/Persistence/Postgres/Scripts/createdb.sql | ||
+ | psql -d miningcore -U miningcore -f createdb.sql | ||
+ | Možná bez "-U miningcore" ??? | ||
+ | |||
+ | === Miningcore === | ||
+ | sudo apt-get update -y | ||
+ | sudo apt-get -y install git cmake build-essential libssl-dev pkg-config libboost-all-dev libsodium-dev | ||
+ | git clone https://github.com/coinfoundry/miningcore | ||
+ | cd miningcore/src/MiningCore | ||
+ | ./linux-build.sh | ||
+ | |||
+ | == Nastavení == | ||
+ | Vytvoříme soubor config.json v adresáři miningcore dle následujícího vzoru: | ||
+ | |||
+ | { | ||
+ | "logging": { | ||
+ | "level": "info", | ||
+ | "enableConsoleLog": true, | ||
+ | "enableConsoleColors": true, | ||
+ | |||
+ | // Log file name (full log) | ||
+ | "logFile": "", | ||
+ | |||
+ | // Folder to store log file(s) | ||
+ | "logBaseDirectory": "", | ||
+ | |||
+ | // If enabled, separate log file will be stored for each pool as <pool id>.log | ||
+ | // in the above specific folder. | ||
+ | "perPoolLogFile": false | ||
+ | }, | ||
+ | |||
+ | "banning": { | ||
+ | // "integrated" or "iptables" (linux only - not yet implemented) | ||
+ | "manager": "integrated", | ||
+ | "banOnJunkReceive": true, | ||
+ | "banOnInvalidShares": false | ||
+ | }, | ||
+ | |||
+ | "notifications": { | ||
+ | "enabled": true, | ||
+ | "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 | ||
+ | } | ||
+ | }, | ||
+ | |||
+ | // Where to persist shares and blocks to | ||
+ | "persistence": { | ||
+ | // Persist to postgresql database | ||
+ | "postgres": { | ||
+ | "host": "127.0.0.1", | ||
+ | "port": 5432, | ||
+ | "user": "miningcore", | ||
+ | "password": "yourpassword", | ||
+ | "database": "miningcore" | ||
+ | } | ||
+ | }, | ||
+ | |||
+ | // Generate payouts for recorded shares and blocks | ||
+ | "paymentProcessing": { | ||
+ | "enabled": true, | ||
+ | |||
+ | // How often to process payouts, in milliseconds | ||
+ | "interval": 600, | ||
+ | |||
+ | // Path to a file used to backup shares under emergency conditions, such as | ||
+ | // database outage | ||
+ | "shareRecoveryFile": "recovered-shares.txt" | ||
+ | }, | ||
+ | |||
+ | // API Settings | ||
+ | "api": { | ||
+ | "enabled": true, | ||
+ | |||
+ | // Binding address (Default: 127.0.0.1) | ||
+ | "listenAddress": "127.0.0.1", | ||
+ | |||
+ | // Binding port (Default: 4000) | ||
+ | "port": 4000 | ||
+ | }, | ||
+ | |||
+ | "pools": [{ | ||
+ | |||
+ | // DON'T change the id after a production pool has begun collecting shares! | ||
+ | "id": "dash1", | ||
+ | "enabled": true, | ||
+ | "coin": { | ||
+ | "type": "DASH" | ||
+ | }, | ||
+ | |||
+ | // Address to where block rewards are given (pool wallet) | ||
+ | "address": "yiZodEgQLbYDrWzgBXmfUUHeBVXBNr8rwR", | ||
+ | |||
+ | // Block rewards go to the configured pool wallet address to later be paid out | ||
+ | // to miners, except for a percentage that can go to, for examples, | ||
+ | // pool operator(s) as pool fees or or to donations address. Addresses or hashed | ||
+ | // public keys can be used. Here is an example of rewards going to the main pool | ||
+ | // "op" | ||
+ | "rewardRecipients": [ | ||
+ | { | ||
+ | // Pool wallet | ||
+ | "address": "yiZodEgQLbYDrWzgBXmfUUHeBVXBNr8rwR", | ||
+ | "percentage": 1.5 | ||
+ | } | ||
+ | ], | ||
+ | |||
+ | // How often to poll RPC daemons for new blocks, in milliseconds | ||
+ | "blockRefreshInterval": 400, | ||
+ | |||
+ | // Some miner apps will consider the pool dead/offline if it doesn't receive | ||
+ | // anything new jobs for around a minute, so every time we broadcast jobs, | ||
+ | // set a timeout to rebroadcast in this many seconds unless we find a new job. | ||
+ | // Set to zero to disable. (Default: 0) | ||
+ | "jobRebroadcastTimeout": 10, | ||
+ | |||
+ | // Remove workers that haven't been in contact for this many seconds. | ||
+ | // Some attackers will create thousands of workers that use up all available | ||
+ | // socket connections, usually the workers are zombies and don't submit shares | ||
+ | // after connecting. This features detects those and disconnects them. | ||
+ | "clientConnectionTimeout": 600, | ||
+ | |||
+ | // If a worker is submitting a high threshold of invalid shares, we can | ||
+ | // temporarily ban their IP to reduce system/network load. | ||
+ | "banning": { | ||
+ | "enabled": true, | ||
+ | |||
+ | // How many seconds to ban worker for | ||
+ | "time": 600, | ||
+ | |||
+ | // What percent of invalid shares triggers ban | ||
+ | "invalidPercent": 50, | ||
+ | |||
+ | // Check invalid percent when this many shares have been submitted | ||
+ | "checkThreshold": 50 | ||
+ | }, | ||
+ | |||
+ | // Each pool can have as many ports for your miners to connect to as you wish. | ||
+ | // Each port can be configured to use its own pool difficulty and variable | ||
+ | // difficulty settings. 'varDiff' is optional and will only be used for the ports | ||
+ | // you configure it for. | ||
+ | "ports": { | ||
+ | // Binding port for your miners to connect to | ||
+ | "3052": { | ||
+ | // Binding address (Default: 127.0.0.1) | ||
+ | "listenAddress": "0.0.0.0", | ||
+ | |||
+ | // Pool difficulty | ||
+ | "difficulty": 0.02, | ||
+ | |||
+ | // Variable difficulty is a feature that will automatically adjust difficulty | ||
+ | // for individual miners based on their hash rate in order to lower | ||
+ | // networking overhead | ||
+ | "varDiff": { | ||
+ | |||
+ | // Minimum difficulty | ||
+ | "minDiff": 0.01, | ||
+ | |||
+ | // Maximum difficulty. Network difficulty will be used if it is lower than | ||
+ | // this. Set to null to disable. | ||
+ | "maxDiff": null, | ||
+ | |||
+ | // Try to get 1 share per this many seconds | ||
+ | "targetTime": 15, | ||
+ | |||
+ | // Check to see if we should retarget every this many seconds | ||
+ | "retargetTime": 90, | ||
+ | |||
+ | // Allow time to very this % from target without retargeting | ||
+ | "variancePercent": 30, | ||
+ | |||
+ | // Do not alter difficulty by more than this during a single retarget in | ||
+ | // either direction | ||
+ | "maxDelta": 500 | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | |||
+ | // Recommended to have at least two daemon instances running in case one drops | ||
+ | // out-of-sync or offline. For redundancy, all instances will be polled for | ||
+ | // block/transaction updates and be used for submitting blocks. Creating a backup | ||
+ | // daemon involves spawning a daemon using the "-datadir=/backup" argument which | ||
+ | // creates a new daemon instance with it's own RPC config. For more info on this, | ||
+ | // visit: https:// en.bitcoin.it/wiki/Data_directory and | ||
+ | // https:// en.bitcoin.it/wiki/Running_bitcoind | ||
+ | "daemons": [{ | ||
+ | "host": "127.0.0.1", | ||
+ | "port": 15001, | ||
+ | "user": "user", | ||
+ | "password": "pass", | ||
+ | |||
+ | // Enable streaming Block Notifications via ZeroMQ messaging from Bitcoin | ||
+ | // Family daemons. Using this is highly recommended. The value of this option | ||
+ | // is a string that should match the value of the -zmqpubhashblock parameter | ||
+ | // passed to the coin daemon. If you enable this, you should lower | ||
+ | // 'blockRefreshInterval' to 1000 or 0 to disable polling entirely. | ||
+ | "zmqBlockNotifySocket": "tcp://127.0.0.1:15101", | ||
+ | |||
+ | // Enable streaming Block Notifications via WebSocket messaging from Ethereum | ||
+ | // family Parity daemons. Using this is highly recommended. The value of this | ||
+ | // option is a string that should match the value of the --ws-port parameter | ||
+ | // passed to the parity coin daemon. When using --ws-port, you should also | ||
+ | // specify --ws-interface all and | ||
+ | // --jsonrpc-apis "eth,net,web3,personal,parity,parity_pubsub,rpc" | ||
+ | // If you enable this, you should lower 'blockRefreshInterval' to 1000 or 0 | ||
+ | // to disable polling entirely. | ||
+ | "portWs": 18545, | ||
+ | } | ||
+ | ], | ||
+ | |||
+ | // Generate payouts for recorded shares | ||
+ | "paymentProcessing": { | ||
+ | "enabled": true, | ||
+ | |||
+ | // Minimum payment in pool-base-currency (ie. Bitcoin, NOT Satoshis) | ||
+ | "minimumPayment": 0.01, | ||
+ | "payoutScheme": "PPLNS", | ||
+ | "payoutSchemeConfig": { | ||
+ | "factor": 2.0 | ||
+ | } | ||
+ | } | ||
+ | }] | ||
+ | } | ||
+ | |||
+ | == Zpuštění == | ||
+ | cd ../../build | ||
+ | dotnet MiningCore.dll -c config.json | ||
== Zpět == | == Zpět == |
Aktuální verze z 12. 6. 2018, 21:29
Jde o multipool z https://coinfoundry.org/ zveřejnený na https://github.com/coinfoundry/miningcore
Obsah
Instalace
Postup instalace, jak sjem se snažil:
Net Core
Je pořeba nainstalovat. Více je na stránkách https://www.microsoft.com/net/download/linux-package-manager/rhel/runtime-current z kterých jsem vycházel.
PostgreSQL
Dale je třeba nainstalovat PostgreSQL databázi. Patřičnou verzi z postupem nalezneme na https://www.postgresql.org/download/.
Coin Core
Pro vlastní těžbu a transakce musí být k dispozici "plnohodnotné" peněženky. Instalaci jednotlivých peněženek zde nebudu uvádět a věřím že půjde použít i peněženky na jiném PC.
Nastavení databáze
sudo -u postgres -i createuser miningcore createdb miningcore psql (heslo pro postgres)
Heslo nebylo potřeba ??? Následně nastavíme práva - ale nevím která varianta ...:
alter user miningcore with password 'ps888sQl'; alter user miningcore with encrypted password 'heslo-databaze'; grant all privileges on database miningcore to miningcore; \q
A na konec stáhneme vlastní databázi a naimportujeme ji.
wget https://raw.githubusercontent.com/coinfoundry/miningcore/master/src/MiningCore/Persistence/Postgres/Scripts/createdb.sql psql -d miningcore -U miningcore -f createdb.sql
Možná bez "-U miningcore" ???
Miningcore
sudo apt-get update -y sudo apt-get -y install git cmake build-essential libssl-dev pkg-config libboost-all-dev libsodium-dev git clone https://github.com/coinfoundry/miningcore cd miningcore/src/MiningCore ./linux-build.sh
Nastavení
Vytvoříme soubor config.json v adresáři miningcore dle následujícího vzoru:
{ "logging": { "level": "info", "enableConsoleLog": true, "enableConsoleColors": true, // Log file name (full log) "logFile": "", // Folder to store log file(s) "logBaseDirectory": "", // If enabled, separate log file will be stored for each pool as <pool id>.log // in the above specific folder. "perPoolLogFile": false }, "banning": { // "integrated" or "iptables" (linux only - not yet implemented) "manager": "integrated", "banOnJunkReceive": true, "banOnInvalidShares": false }, "notifications": { "enabled": true, "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 } }, // Where to persist shares and blocks to "persistence": { // Persist to postgresql database "postgres": { "host": "127.0.0.1", "port": 5432, "user": "miningcore", "password": "yourpassword", "database": "miningcore" } }, // Generate payouts for recorded shares and blocks "paymentProcessing": { "enabled": true, // How often to process payouts, in milliseconds "interval": 600, // Path to a file used to backup shares under emergency conditions, such as // database outage "shareRecoveryFile": "recovered-shares.txt" }, // API Settings "api": { "enabled": true, // Binding address (Default: 127.0.0.1) "listenAddress": "127.0.0.1", // Binding port (Default: 4000) "port": 4000 }, "pools": [{ // DON'T change the id after a production pool has begun collecting shares! "id": "dash1", "enabled": true, "coin": { "type": "DASH" }, // Address to where block rewards are given (pool wallet) "address": "yiZodEgQLbYDrWzgBXmfUUHeBVXBNr8rwR", // Block rewards go to the configured pool wallet address to later be paid out // to miners, except for a percentage that can go to, for examples, // pool operator(s) as pool fees or or to donations address. Addresses or hashed // public keys can be used. Here is an example of rewards going to the main pool // "op" "rewardRecipients": [ { // Pool wallet "address": "yiZodEgQLbYDrWzgBXmfUUHeBVXBNr8rwR", "percentage": 1.5 } ], // How often to poll RPC daemons for new blocks, in milliseconds "blockRefreshInterval": 400, // Some miner apps will consider the pool dead/offline if it doesn't receive // anything new jobs for around a minute, so every time we broadcast jobs, // set a timeout to rebroadcast in this many seconds unless we find a new job. // Set to zero to disable. (Default: 0) "jobRebroadcastTimeout": 10, // Remove workers that haven't been in contact for this many seconds. // Some attackers will create thousands of workers that use up all available // socket connections, usually the workers are zombies and don't submit shares // after connecting. This features detects those and disconnects them. "clientConnectionTimeout": 600, // If a worker is submitting a high threshold of invalid shares, we can // temporarily ban their IP to reduce system/network load. "banning": { "enabled": true, // How many seconds to ban worker for "time": 600, // What percent of invalid shares triggers ban "invalidPercent": 50, // Check invalid percent when this many shares have been submitted "checkThreshold": 50 }, // Each pool can have as many ports for your miners to connect to as you wish. // Each port can be configured to use its own pool difficulty and variable // difficulty settings. 'varDiff' is optional and will only be used for the ports // you configure it for. "ports": { // Binding port for your miners to connect to "3052": { // Binding address (Default: 127.0.0.1) "listenAddress": "0.0.0.0", // Pool difficulty "difficulty": 0.02, // Variable difficulty is a feature that will automatically adjust difficulty // for individual miners based on their hash rate in order to lower // networking overhead "varDiff": { // Minimum difficulty "minDiff": 0.01, // Maximum difficulty. Network difficulty will be used if it is lower than // this. Set to null to disable. "maxDiff": null, // Try to get 1 share per this many seconds "targetTime": 15, // Check to see if we should retarget every this many seconds "retargetTime": 90, // Allow time to very this % from target without retargeting "variancePercent": 30, // Do not alter difficulty by more than this during a single retarget in // either direction "maxDelta": 500 } } }, // Recommended to have at least two daemon instances running in case one drops // out-of-sync or offline. For redundancy, all instances will be polled for // block/transaction updates and be used for submitting blocks. Creating a backup // daemon involves spawning a daemon using the "-datadir=/backup" argument which // creates a new daemon instance with it's own RPC config. For more info on this, // visit: https:// en.bitcoin.it/wiki/Data_directory and // https:// en.bitcoin.it/wiki/Running_bitcoind "daemons": [{ "host": "127.0.0.1", "port": 15001, "user": "user", "password": "pass", // Enable streaming Block Notifications via ZeroMQ messaging from Bitcoin // Family daemons. Using this is highly recommended. The value of this option // is a string that should match the value of the -zmqpubhashblock parameter // passed to the coin daemon. If you enable this, you should lower // 'blockRefreshInterval' to 1000 or 0 to disable polling entirely. "zmqBlockNotifySocket": "tcp://127.0.0.1:15101", // Enable streaming Block Notifications via WebSocket messaging from Ethereum // family Parity daemons. Using this is highly recommended. The value of this // option is a string that should match the value of the --ws-port parameter // passed to the parity coin daemon. When using --ws-port, you should also // specify --ws-interface all and // --jsonrpc-apis "eth,net,web3,personal,parity,parity_pubsub,rpc" // If you enable this, you should lower 'blockRefreshInterval' to 1000 or 0 // to disable polling entirely. "portWs": 18545, } ], // Generate payouts for recorded shares "paymentProcessing": { "enabled": true, // Minimum payment in pool-base-currency (ie. Bitcoin, NOT Satoshis) "minimumPayment": 0.01, "payoutScheme": "PPLNS", "payoutSchemeConfig": { "factor": 2.0 } } }] }
Zpuštění
cd ../../build dotnet MiningCore.dll -c config.json