Coinfoundry: Porovnání verzí
(→PostgreSQL) |
(→Instalace) |
||
| (Není zobrazeno 10 mezilehlých verzí od stejného uživatele.) | |||
| Řádka 12: | Řádka 12: | ||
=== Coin Core === | === 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. | 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