Stratum Pool Node für Altcoins
Dieser Beitrag wurde 9090 mal angezeigt.
Hy Leute,
Wer nicht selber einen Pool einrichten möchte, darf gerne auf meinen zurück greifen.
Heute möchte ich euch einmal erklären wie man einen Stratum Pool aufsetzt.
Es gibt 2 Pools die ich beschreiben kann. Einmal für Node.js Basis und einen auf Python Basis.
Wenn ihr einen Altcoin Pool aufsetzten wollt benötigt ihr in den meisten Fällen ein Stratum Pool.
Dies gilt für Litecoin, einem Script Coin also, oder einem SHA-256 Coin, zb. eMark (DEM)
Für die Einrichtung benutze ich einen CentOS 64bit Server. Da dieser sehr stabil im Webbereich läuft.
Installieren eines Node.js Pools
Als erstes möchte ich den Node.js Pool erklären.
Step 1
Als erstes benötigen wie Node, dies ist etwas Tricky, da wenn man nicht gcc auf den neusten Stand bringt, wir probleme beim Installieren haben.
Daher machen wir im selben Schritt auch ein Update von gcc auf die 4.7. Version. Dies wird für das Node Module multi-hashing benötigt.
yum -y groupinstall "Development Tools" yum -y install screen git jemalloc yum repolist rpm --import https://fedoraproject.org/static/0608B895.txt rpm -Uvh http://download-i2.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm yum install nodejs npm --enablerepo=epel cd /etc/yum.repos.d wget http://people.centos.org/tru/devtools-1.1/devtools-1.1.repo yum --enablerepo=testing-1.1-devtools-6 install devtoolset-1.1-gcc devtoolset-1.1-gcc-c++ export CC=/opt/centos/devtoolset-1.1/root/usr/bin/gcc export CPP=/opt/centos/devtoolset-1.1/root/usr/bin/cpp export CXX=/opt/centos/devtoolset-1.1/root/usr/bin/c++ cd /opt/ wget http://download.redis.io/releases/redis-2.8.13.tar.gz tar xzf redis-2.8.13.tar.gz cd redis-2.8.13/deps/ make hiredis lua jemalloc linenoise cd .. make && make install screen -d -m -S redis /opt/redis-2.8.13/src/redis-server
Step 2
Da wir nun Node installiert haben, können wir uns den Pool von Git besorgen:
mkdir /opt/Pools/ cd /opt/Pools/ git clone https://github.com/zone117x/node-open-mining-portal.git nomp cd nomp CC=/opt/centos/devtoolset-1.1/root/usr/bin/gcc CXX=/opt/centos/devtoolset-1.1/root/usr/bin/gcc npm install multi-hashing npm update
Wenn ihr keine Errors bekommt, habt ihr Node installiert. Nun können wir diesen konfigurieren.
Ich gehe jetzt mal davon aus, das ihr bereits ein Altcoin Wallet installiert habt. Falls nicht, findet ihr hier die Anleitung.
Step 3
Als nächstes öffnen wir die Datei „config_example.json
“
Hier können wir alle Einstellungen für unseren Coin hinterlegen. Dies könnt ihr mit „nano“ machen oder über einen Editor wie NotePad++.
Unsere Beispiel Datei sind zur Zeit noch so aus :
{ "logLevel": "debug", "logColors": true, "cliPort": 17117, "clustering": { "enabled": true, "forks": "auto" }, "defaultPoolConfigs": { "blockRefreshInterval": 1000, "jobRebroadcastTimeout": 55, "connectionTimeout": 600, "emitInvalidBlockHashes": false, "validateWorkerUsername": true, "tcpProxyProtocol": false, "banning": { "enabled": true, "time": 600, "invalidPercent": 50, "checkThreshold": 500, "purgeInterval": 300 }, "redis": { "host": "127.0.0.1", "port": 6379 } }, "website": { "enabled": true, "host": "0.0.0.0", "port": 80, "stratumHost": "cryppit.com", "stats": { "updateInterval": 60, "historicalRetention": 43200, "hashrateWindow": 300 }, "adminCenter": { "enabled": true, "password": "password" } }, "redis": { "host": "127.0.0.1", "port": 6379 }, "switching": { "switch1": { "enabled": false, "algorithm": "sha256", "ports": { "3333": { "diff": 10, "varDiff": { "minDiff": 16, "maxDiff": 512, "targetTime": 15, "retargetTime": 90, "variancePercent": 30 } } } }, "switch2": { "enabled": false, "algorithm": "scrypt", "ports": { "4444": { "diff": 10, "varDiff": { "minDiff": 16, "maxDiff": 512, "targetTime": 15, "retargetTime": 90, "variancePercent": 30 } } } }, "switch3": { "enabled": false, "algorithm": "x11", "ports": { "5555": { "diff": 0.001, "varDiff": { "minDiff": 0.001, "maxDiff": 1, "targetTime": 15, "retargetTime": 60, "variancePercent": 30 } } } } }, "profitSwitch": { "enabled": false, "updateInterval": 600, "depth": 0.90, "usePoloniex": true, "useCryptsy": true, "useMintpal": true, "useBittrex": true } }
Dies ändern wir nun für unseren Coin ab. Ich nehme als Coin den eMark (DEM) Coin der auf SHA256 basiert.
Hier ändern wir den stratumHost auf unseren Server und den Port den wir nutzen wollen.
Falls ihr schon eine Webseite habt, könnt ihr den Webdienst mit enabled = false bei Webseite deaktivieren.
Unter switching können wir nun unsere Pool Infos hinterlegen. zb. um welches Script es sich handelt und welchen Port wir dafür nutzen wollen usw.
Für unseren DEM Coin hinterlege ich :
"switching": { "switch1": { "enabled": true, "algorithm": "sha256", "ports": { "3333": { "diff": 32, "varDiff": { "minDiff": 32, "maxDiff": 2056, "targetTime": 15, "retargetTime": 60, "variancePercent": 30 } } } }
Hier können wir auch mehrere Pools hinterlegen, falls wir ein Multi Pool betreiben wollen und speichern diese unter „config.json"
Step 4
Nun kommen die Coin einstellen, dazu wechseln wir in den Ordner coins und öffnen.
Falls hier unser Coin schon vorhanden ist, brauchen wir nichts machen. Falls nicht müsst ihr diesen erstellen. Es befinden sich genügend Muster in dem Ordner.
Step 5
Als nächstes kommt die Pool Config. Dazu öffnen wir den Ordner „pool_configs“ und erstellen eine neue Datei mit dem Namen emark.json
Beispiel Aufbau für Litecoin:
{ "enabled": true, //Set this to false and a pool will not be created from this config file "coin": "litecoin.json", //Reference to coin config file in 'coins' directory "address": "mi4iBXbBsydtcc5yFmsff2zCFVX4XG7qJc", //Address to where block rewards are given /* 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, a pool co-owner, and NOMP donation. */ "rewardRecipients": { "n37vuNFkXfk15uFnGoVyHZ6PYQxppD3QqK": 1.5, //1.5% goes to pool op "mirj3LtZxbSTharhtXvotqtJXUY7ki5qfx": 0.5, //0.5% goes to a pool co-owner /* 0.1% donation to NOMP. This pubkey can accept any type of coin, please leave this in your config to help support NOMP development. */ "22851477d63a085dbc2398c8430af1c09e7343f6": 0.1 }, "paymentProcessing": { "enabled": true, /* Every this many seconds get submitted blocks from redis, use daemon RPC to check their confirmation status, if confirmed then get shares from redis that contributed to block and send out payments. */ "paymentInterval": 30, /* Minimum number of coins that a miner must earn before sending payment. Typically, a higher minimum means less transactions fees (you profit more) but miners see payments less frequently (they dislike). Opposite for a lower minimum payment. */ "minimumPayment": 0.01, /* This daemon is used to send out payments. It MUST be for the daemon that owns the configured 'address' that receives the block rewards, otherwise the daemon will not be able to confirm blocks or send out payments. */ "daemon": { "host": "127.0.0.1", "port": 19332, "user": "testuser", "password": "testpass" } }, /* 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": { "3032": { //A port for your miners to connect to "diff": 32, //the pool difficulty for this port /* Variable difficulty is a feature that will automatically adjust difficulty for individual miners based on their hashrate in order to lower networking overhead */ "varDiff": { "minDiff": 8, //Minimum difficulty "maxDiff": 512, //Network difficulty will be used if it is lower than this "targetTime": 15, //Try to get 1 share per this many seconds "retargetTime": 90, //Check to see if we should retarget every this many seconds "variancePercent": 30 //Allow time to very this % from target without retargeting } }, "3256": { //Another port for your miners to connect to, this port does not use varDiff "diff": 256 //The pool difficulty } }, /* More than one daemon instances can be setup in case one drops out-of-sync or dies. */ "daemons": [ { //Main daemon instance "host": "127.0.0.1", "port": 19332, "user": "testuser", "password": "testpass" } ], /* This allows the pool to connect to the daemon as a node peer to receive block updates. It may be the most efficient way to get block updates (faster than polling, less intensive than blocknotify script). It requires the additional field "peerMagic" in the coin config. */ "p2p": { "enabled": false, /* Host for daemon */ "host": "127.0.0.1", /* Port configured for daemon (this is the actual peer port not RPC port) */ "port": 19333, /* If your coin daemon is new enough (i.e. not a shitcoin) then it will support a p2p feature that prevents the daemon from spamming our peer node with unnecessary transaction data. Assume its supported but if you have problems try disabling it. */ "disableTransactions": true }, /* Enabled this mode and shares will be inserted into in a MySQL database. You may also want to use the "emitInvalidBlockHashes" option below if you require it. The config options "redis" and "paymentProcessing" will be ignored/unused if this is enabled. */ "mposMode": { "enabled": false, "host": "127.0.0.1", //MySQL db host "port": 3306, //MySQL db port "user": "me", //MySQL db user "password": "mypass", //MySQL db password "database": "ltc", //MySQL db database name /* Checks for valid password in database when miners connect. */ "checkPassword": true, /* Unregistered workers can automatically be registered (added to database) on stratum worker authentication if this is true. */ "autoCreateWorker": false } }
Hier hinterlegen wir nun alle nötigen Informationen.
- Bei „address“ geben wir unsere Server Wallet Adresse ein.
- Unter „rewardRecipients“ geben wir die Adresse ein, an dem unsere Pool Fee gehen soll, falls wir diese nehmen möchten.
Dies kann man, wenn man möchste auf weg lassen. - Unter „deamon“ tragen wir nun unsere Wallet Daten ein, die für den Pool benutzt werden sollen. (rpcuser, rpcpass, rpcport)
- Falls wir mehrere Pools haben, können wir auch mehrere deamons absprechen.
- MySQL Connection. Damit unsere Shares an den Pool auch gezählt werden, brauchen wir eine MySQL Verbindung sowie eine Datenbank.
- Dies können wir unter mposMode einstellen.
Hier mal eine Beispiel Config:
{ "enabled": true, //Set this to false and a pool will not be created from this config file "coin": "emark.json", //Reference to coin config file in 'coins' directory "address": "Your ADDRESS", //Address to where block rewards are given /* 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, a pool co-owner, and NOMP donation. */ "rewardRecipients": { "NWtFftChrx28mvYgqfopmDejxoHiZmAK7u": 1.5, //1.5% goes to pool op "NWtFftChrx28mvYgqfopmDejxoHiZmAK7u": 0.5 //0.5% for donation }, "paymentProcessing": { "enabled": true, /* Every this many seconds get submitted blocks from redis, use daemon RPC to check their confirmation status, if confirmed then get shares from redis that contributed to block and send out payments. */ "paymentInterval": 30, /* Minimum number of coins that a miner must earn before sending payment. Typically, a higher minimum means less transactions fees (you profit more) but miners see payments less frequently (they dislike). Opposite for a lower minimum payment. */ "minimumPayment": 0.01, /* This daemon is used to send out payments. It MUST be for the daemon that owns the configured 'address' that receives the block rewards, otherwise the daemon will not be able to confirm blocks or send out payments. */ "daemon": { "host": "127.0.0.1", "port": 8925, "user": "WALLET USER", "password": "WALLET PASS" } }, /* 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": { "3334": { //A port for your miners to connect to "diff": 32, //the pool difficulty for this port /* Variable difficulty is a feature that will automatically adjust difficulty for individual miners based on their hashrate in order to lower networking overhead */ "varDiff": { "minDiff": 32, //Minimum difficulty "maxDiff": 2056, //Network difficulty will be used if it is lower than this "targetTime": 15, //Try to get 1 share per this many seconds "retargetTime": 90, //Check to see if we should retarget every this many seconds "variancePercent": 30 //Allow time to very this % from target without retargeting } }, "3256": { //Another port for your miners to connect to, this port does not use varDiff "diff": 256 //The pool difficulty } }, /* More than one daemon instances can be setup in case one drops out-of-sync or dies. */ "daemons": [ { //Main daemon instance "host": "127.0.0.1", "port": 19332, "user": "testuser", "password": "testpass" } ], /* This allows the pool to connect to the daemon as a node peer to receive block updates. It may be the most efficient way to get block updates (faster than polling, less intensive than blocknotify script). It requires the additional field "peerMagic" in the coin config. */ "p2p": { "enabled": false, /* Host for daemon */ "host": "127.0.0.1", /* Port configured for daemon (this is the actual peer port not RPC port) */ "port": 19333, /* If your coin daemon is new enough (i.e. not a shitcoin) then it will support a p2p feature that prevents the daemon from spamming our peer node with unnecessary transaction data. Assume its supported but if you have problems try disabling it. */ "disableTransactions": true }, /* Enabled this mode and shares will be inserted into in a MySQL database. You may also want to use the "emitInvalidBlockHashes" option below if you require it. The config options "redis" and "paymentProcessing" will be ignored/unused if this is enabled. */ "mposMode": { "enabled": true, "host": "127.0.0.1", //MySQL db host "port": 3306, //MySQL db port "user": "me", //MySQL db user "password": "mypass", //MySQL db password "database": "ltc", //MySQL db database name /* Checks for valid password in database when miners connect. */ "checkPassword": true, /* Unregistered workers can automatically be registered (added to database) on stratum worker authentication if this is true. */ "autoCreateWorker": false } }
Damit unser Pool auch eine Datenbank findet, müssen wir diese natürlich anlegen und die entsprechenden Daten in der Config hinterlegen.
Wir können die SQL Einstellungen vom mpos übernehmen:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; CREATE TABLE IF NOT EXISTS `accounts` ( `id` int(255) NOT NULL AUTO_INCREMENT, `is_admin` tinyint(1) NOT NULL DEFAULT '0', `is_anonymous` tinyint(1) NOT NULL DEFAULT '0', `no_fees` tinyint(1) NOT NULL DEFAULT '0', `username` varchar(40) NOT NULL, `pass` varchar(255) NOT NULL, `email` varchar(255) DEFAULT NULL COMMENT 'Assocaited email: used for validating users, and re-setting passwords', `timezone` varchar(35) NOT NULL DEFAULT '415', `notify_email` VARCHAR( 255 ) NULL DEFAULT NULL, `loggedIp` varchar(255) DEFAULT NULL, `is_locked` tinyint(1) NOT NULL DEFAULT '0', `failed_logins` int(5) unsigned DEFAULT '0', `failed_pins` int(5) unsigned DEFAULT '0', `signup_timestamp` int(10) DEFAULT '0', `last_login` int(10) DEFAULT NULL, `pin` varchar(255) NOT NULL COMMENT 'four digit pin to allow account changes', `api_key` varchar(255) DEFAULT NULL, `token` varchar(65) DEFAULT NULL, `donate_percent` float DEFAULT '0', `ap_threshold` float DEFAULT '0', `coin_address` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`), UNIQUE KEY `email` (`email`), UNIQUE KEY `coin_address` (`coin_address`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `blocks` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `height` int(10) unsigned NOT NULL, `blockhash` char(65) NOT NULL, `confirmations` int(10) NOT NULL, `amount` double NOT NULL, `difficulty` double NOT NULL, `time` int(11) NOT NULL, `accounted` tinyint(1) NOT NULL DEFAULT '0', `account_id` int(255) unsigned DEFAULT NULL, `worker_name` varchar(50) DEFAULT 'unknown', `shares` int(255) unsigned DEFAULT NULL, `share_id` bigint(30) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `height` (`height`,`blockhash`), KEY `time` (`time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Discovered blocks persisted from Litecoin Service'; CREATE TABLE IF NOT EXISTS `coin_addresses` ( `id` int(11) NOT NULL AUTO_INCREMENT, `account_id` int(11) NOT NULL, `currency` varchar(5) NOT NULL, `coin_address` varchar(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `coin_address` (`coin_address`), KEY `account_id` (`account_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `invitations` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `account_id` int(11) unsigned NOT NULL, `email` varchar(50) NOT NULL, `token_id` int(11) NOT NULL, `is_activated` tinyint(1) NOT NULL DEFAULT '0', `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `monitoring` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `type` varchar(15) NOT NULL, `value` varchar(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Monitoring events from cronjobs'; CREATE TABLE IF NOT EXISTS `news` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `account_id` int(10) unsigned NOT NULL, `header` varchar(255) NOT NULL, `content` text NOT NULL, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `active` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `notifications` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `type` varchar(25) NOT NULL, `data` varchar(255) NOT NULL, `active` tinyint(1) NOT NULL DEFAULT '1', `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `account_id` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`), KEY `active` (`active`), KEY `data` (`data`), KEY `account_id` (`account_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `notification_settings` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `type` varchar(15) NOT NULL, `account_id` int(11) NOT NULL, `active` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `account_id` (`account_id`), UNIQUE KEY `account_id_type` (`account_id`,`type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `payouts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `account_id` int(11) NOT NULL, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `completed` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `account_id` (`account_id`,`completed`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `pool_worker` ( `id` int(255) NOT NULL AUTO_INCREMENT, `account_id` int(255) NOT NULL, `username` char(50) DEFAULT NULL, `password` char(255) DEFAULT NULL, `difficulty` float NOT NULL DEFAULT '0', `monitor` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`), KEY `account_id` (`account_id`), KEY `pool_worker_username` (`username`(10)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `settings` ( `name` varchar(255) NOT NULL, `value` text DEFAULT NULL, PRIMARY KEY (`name`), UNIQUE KEY `setting` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `settings` (`name`, `value`) VALUES ('DB_VERSION', '0.0.12'); CREATE TABLE IF NOT EXISTS `shares` ( `id` bigint(30) NOT NULL AUTO_INCREMENT, `rem_host` varchar(255) NOT NULL, `username` varchar(120) NOT NULL, `our_result` enum('Y','N') NOT NULL, `upstream_result` enum('Y','N') DEFAULT NULL, `reason` varchar(50) DEFAULT NULL, `solution` varchar(257) NOT NULL, `difficulty` float NOT NULL DEFAULT '0', `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `time` (`time`), KEY `upstream_result` (`upstream_result`), KEY `our_result` (`our_result`), KEY `username` (`username`), KEY `shares_username` (`username`(10)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `shares_archive` ( `id` bigint(30) unsigned NOT NULL AUTO_INCREMENT, `share_id` bigint(30) unsigned NOT NULL, `username` varchar(120) NOT NULL, `our_result` enum('Y','N') DEFAULT NULL, `upstream_result` enum('Y','N') DEFAULT NULL, `block_id` int(10) unsigned NOT NULL, `difficulty` float NOT NULL DEFAULT '0', `time` datetime NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `share_id` (`share_id`), KEY `time` (`time`), KEY `our_result` (`our_result`), KEY `username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Archive shares for potential later debugging purposes'; CREATE TABLE IF NOT EXISTS `statistics_shares` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `account_id` int(10) unsigned NOT NULL, `block_id` int(10) unsigned NOT NULL, `valid` int(11) NOT NULL, `invalid` int(11) NOT NULL DEFAULT '0', `pplns_valid` int(11) NOT NULL, `pplns_invalid` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `account_id` (`account_id`), KEY `block_id` (`block_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `tokens` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `account_id` int(11) NOT NULL, `token` varchar(65) NOT NULL, `type` tinyint(4) NOT NULL, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `token` (`token`), KEY `account_id` (`account_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `token_types` ( `id` tinyint(4) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(25) NOT NULL, `expiration` INT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `token_types` (`id`, `name`, `expiration`) VALUES (1, 'password_reset', 3600), (2, 'confirm_email', 0), (3, 'invitation', 0), (4, 'account_unlock', 0), (5, 'account_edit', 3600), (6, 'change_pw', 3600), (7, 'withdraw_funds', 3600); CREATE TABLE IF NOT EXISTS `transactions` ( `id` int(255) NOT NULL AUTO_INCREMENT, `account_id` int(255) unsigned NOT NULL, `type` varchar(25) DEFAULT NULL, `coin_address` varchar(255) DEFAULT NULL, `amount` double DEFAULT '0', `block_id` int(255) DEFAULT NULL, `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `txid` varchar(256) DEFAULT NULL, `archived` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `block_id` (`block_id`), KEY `account_id` (`account_id`), KEY `type` (`type`), KEY `archived` (`archived`), KEY `account_id_archived` (`account_id`,`archived`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `templates` ( `template` varchar(255) NOT NULL, `active` tinyint(1) NOT NULL DEFAULT 0, `content` mediumtext, `modified_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`template`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Diese findet ihr auf git: https://github.com/MPOS/php-mpos/tree/development/sql
Dies können wir nun abspeichern und wir können den Pool mit
screen -d -m -S redis /opt/redis-2.8.13/src/redis-server cd /opt/Pools/nomp/ && screen -d -m -S node_server node init.js
starten.
Wenn ihr alles richtig gemacht habt, sollte der Pool nun starten:
2014-07-14 22:29:35 [POSIX] [Connection Limit] (Safe to ignore) POSIX module not installed and resource (connection) limit was not raised 2014-07-14 22:29:35 [Master] [CLI] CLI listening on port 17117 2014-07-14 22:29:35 [Master] [PoolSpawner] Spawned 1 pool(s) on 1 thread(s) 2014-07-14 22:29:37 [Payments] [emark] Payment processing setup to run every 30 second(s) with daemon (656DJSpAcEDeViL656@127.0.0.1:8925) and redis (127.0.0.1:8925) 2014-07-14 22:29:37 [Website] [Server] Website started on 0.0.0.0:81 2014-07-14 22:29:37 [Switching] [Setup] (Thread 1) Loading last proxy state from redis 2014-07-14 22:29:37 [Pool] [emark] (Thread 1) Could not start pool, error with init batch RPC call: {"type":"offline","message":"connect ECONNREFUSED"} ^C[root@centOS nomp]# node init.js 2014-07-14 22:33:41 [POSIX] [Connection Limit] (Safe to ignore) POSIX module not installed and resource (connection) limit was not raised 2014-07-14 22:33:41 [Master] [CLI] CLI listening on port 17117 2014-07-14 22:33:41 [Master] [PoolSpawner] Spawned 1 pool(s) on 1 thread(s) 2014-07-14 22:33:43 [Payments] [emark] Payment processing setup to run every 30 second(s) with daemon (656DJSpAcEDeViL656@127.0.0.1:8925) and redis (127.0.0.1:8925) 2014-07-14 22:33:43 [Website] [Server] Website started on 0.0.0.0:81 2014-07-14 22:33:43 [Switching] [Setup] (Thread 1) Loading last proxy state from redis 2014-07-14 22:33:43 [Pool] [emark] (Thread 1) Stratum Pool Server Started for emark [DEM] {sha256} Network Connected: Mainnet Detected Reward Type: POS Current Block Height: 196757 Current Connect Peers: 8 Current Block Diff: 319373.081954508 Network Difficulty: 322218.01046224 Network Hash Rate: 9.26 TH Stratum Port(s): 3256, 3334 Pool Fee Percent: 0.5% Block polling every: 1000 ms 2014-07-14 22:33:43 [Switching] [Setup] (sha256) Setting proxy difficulties after pool start 2014-07-14 22:34:38 [Pool] [emark] (Thread 1) No new blocks for 55 seconds - updating transactions & rebroadcasting work 2014-07-14 22:35:25 [Pool] [emark] (Thread 1) Block notification via RPC polling
There is a problem with your setup. You need to remove this:
„rewardRecipients“: {
„NWtFftChrx28mvYgqfopmDejxoHiZmAK7u“: 1.5, //1.5% goes to pool op
„NWtFftChrx28mvYgqfopmDejxoHiZmAK7u“: 0.5 //0.5% for donation
},
And you need to change:
„paymentProcessing“: {
„enabled“: true,
To:
„enabled“: false,
The reason is because MPOS will handle the payouts and will take out the mining fees itself, if you leave the rewardRecipients in, the pool fee is taken out of each block twice.
Also, change „checkPassword“: true, to:
„checkPassword“: false,
It is not necessry to validate worker passwords, and in the future the password will be used to choose which coin to mine on a multipool.
If you’re setting up the pool to be running only in MPOS mode, you cannot use the coin switching features at all, but it is possible to have NOMP running as MPOS stratum while also running other coins in a multipool all at once. If you’re only using MPOS mode, make sure the „website“ is false.
A lot dont work anymore
like yum –enablerepo=testing-1.1-devtools-6 install devtoolset-1.1-gcc devtoolset-1.1-gcc-c++
to try waste of time without updates on site.
Hy,
thats right. I write a new instruction with docker. That is a lot easier. 😉
I wait for it 🙂