Compare commits
8 Commits
152b4318c3
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
614f16a8b6 | ||
|
|
7e63afd621 | ||
|
|
90ae1d1852 | ||
|
|
9fe4d9145a | ||
|
|
2d8675368f | ||
|
|
da5d4ba5bc | ||
|
|
e16db3a835 | ||
|
|
7f83bf4b2d |
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
config/*.conf
|
||||||
|
gitignore
|
||||||
68
README
68
README
@@ -1,68 +0,0 @@
|
|||||||
m2pool app module code
|
|
||||||
|
|
||||||
environment:
|
|
||||||
nodejs v16.10.0 +
|
|
||||||
express
|
|
||||||
axios
|
|
||||||
mysql2
|
|
||||||
ioredis
|
|
||||||
|
|
||||||
if you want to support enx, kas...
|
|
||||||
add environment:
|
|
||||||
kaspa-rpc-client
|
|
||||||
|
|
||||||
### start common example ###
|
|
||||||
node app.js <method> <coin>
|
|
||||||
|
|
||||||
# if you used pm2, you can use this command
|
|
||||||
pm2 start app.js --name <pm2 process name> -- <method> <coin>
|
|
||||||
|
|
||||||
############# pm2 start common #############
|
|
||||||
pm2 start app.js --name nexa-hashratev2 -- hashrate nexa
|
|
||||||
pm2 start app.js --name nexa-reportv2 -- report nexa
|
|
||||||
pm2 start app.js --name nexa-confirm -- confirm nexa
|
|
||||||
pm2 start app.js --name nexa-distributionv2 -- distribution nexa
|
|
||||||
pm2 start app.js --name email -- notice nexa
|
|
||||||
pm2 start app.js --name nexa-balance -- balance nexa
|
|
||||||
|
|
||||||
pm2 start app.js --name grs-hashratev2 -- hashrate grs
|
|
||||||
pm2 start app.js --name grs-reportv2 -- report grs
|
|
||||||
pm2 start app.js --name grs-confirm -- confirm grs
|
|
||||||
pm2 start app.js --name grs-distributionv2 -- distribution grs
|
|
||||||
pm2 start app.js --name grs-balance -- balance grs
|
|
||||||
|
|
||||||
pm2 start app.js --name mona-hashratev2 -- hashrate mona
|
|
||||||
pm2 start app.js --name mona-reportv2 -- report mona
|
|
||||||
pm2 start app.js --name mona-confirm -- confirm mona
|
|
||||||
pm2 start app.js --name mona-distributionv2 -- distribution mona
|
|
||||||
pm2 start app.js --name mona-balance -- balance mona
|
|
||||||
|
|
||||||
pm2 start app.js --name dgbs-hashratev2 -- hashrate dgbs
|
|
||||||
pm2 start app.js --name dgbs-reportv2 -- report dgbs
|
|
||||||
pm2 start app.js --name dgbs-confirm -- confirm dgbs
|
|
||||||
pm2 start app.js --name dgbs-distributionv2 -- distribution dgbs
|
|
||||||
# pm2 start app.js --name dgbs-balance -- balance dgbs
|
|
||||||
|
|
||||||
pm2 start app.js --name dgbq-hashratev2 -- hashrate dgbq
|
|
||||||
pm2 start app.js --name dgbq-reportv2 -- report dgbq
|
|
||||||
pm2 start app.js --name dgbq-confirm -- confirm dgbq
|
|
||||||
pm2 start app.js --name dgbq-distributionv2 -- distribution dgbq
|
|
||||||
# pm2 start app.js --name dgbq-balance -- balance dgbq
|
|
||||||
|
|
||||||
pm2 start app.js --name dgbo-hashratev2 -- hashrate dgbo
|
|
||||||
pm2 start app.js --name dgbo-reportv2 -- report dgbo
|
|
||||||
pm2 start app.js --name dgbo-confirm -- confirm dgbo
|
|
||||||
pm2 start app.js --name dgbo-distributionv2 -- distribution dgbo
|
|
||||||
pm2 start app.js --name dgb-balance -- balance dgbo
|
|
||||||
|
|
||||||
pm2 start app.js --name rxd-hashratev2 -- hashrate rxd
|
|
||||||
pm2 start app.js --name rxd-reportv2 -- report rxd
|
|
||||||
pm2 start app.js --name rxd-confirm -- confirm rxd
|
|
||||||
pm2 start app.js --name rxd-distributionv2 -- distribution rxd
|
|
||||||
pm2 start app.js --name rxd-balance -- balance rxd
|
|
||||||
|
|
||||||
pm2 start app.js --name enx-hashrate -- hashrate enx
|
|
||||||
pm2 start app.js --name enx-report -- report enx
|
|
||||||
|
|
||||||
pm2 start app.js --name alph-report -- report alph
|
|
||||||
pm2 start app.js --name alph-hashrate -- hashrate alph
|
|
||||||
196
README.md
Normal file
196
README.md
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
### start common example ###
|
||||||
|
```
|
||||||
|
node app.js <method> <coin>
|
||||||
|
```
|
||||||
|
|
||||||
|
# if you used pm2, you can use this command
|
||||||
|
```
|
||||||
|
pm2 start app.js --name <pm2 process name> -- <method> <coin>
|
||||||
|
```
|
||||||
|
|
||||||
|
# config like this
|
||||||
|
```
|
||||||
|
// this file please use .conf
|
||||||
|
{
|
||||||
|
"master":{
|
||||||
|
"pooldb":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
},
|
||||||
|
"sharesdb":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
},
|
||||||
|
"distribution":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
},
|
||||||
|
"hashrate":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
},
|
||||||
|
"users_addresses":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
},
|
||||||
|
"balance":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"slave":{
|
||||||
|
"pooldb_slave":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
},
|
||||||
|
"sharesdb_slave":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"redis_options":{
|
||||||
|
"redis1":{
|
||||||
|
"host":"",
|
||||||
|
"port":,
|
||||||
|
"db":,
|
||||||
|
"connectTimeout":
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_options":{
|
||||||
|
"node1":{
|
||||||
|
"rpcUser":"",
|
||||||
|
"rpcPassword":"<alph api-key>",
|
||||||
|
"rpcPort":,
|
||||||
|
"rpcHost":""
|
||||||
|
},
|
||||||
|
"node2":{
|
||||||
|
"rpcUser":"",
|
||||||
|
"rpcPassword":"<alph api-key>",
|
||||||
|
"rpcPort":,
|
||||||
|
"rpcHost":""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"retry_options":{
|
||||||
|
"node":{
|
||||||
|
"max_retries":,
|
||||||
|
"retry_delay":
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"REPORT_ADDRESS":"",
|
||||||
|
"MAX_MATURE":,
|
||||||
|
"distribution_conf":{
|
||||||
|
"PPLNS_SIZE":,
|
||||||
|
"MODEL_PERCENT":{
|
||||||
|
"SCORE":,
|
||||||
|
"PPLNS":,
|
||||||
|
"PROPDIF":
|
||||||
|
},
|
||||||
|
"SCORE_PERCENT":{
|
||||||
|
"HASHRATE":,
|
||||||
|
"STDDEVS":
|
||||||
|
},
|
||||||
|
"POOL_FEE":
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# start examples
|
||||||
|
``` pm2 start common
|
||||||
|
pm2 start app.js --name nexa-hashratev2 -- hashrate nexa
|
||||||
|
pm2 start app.js --name nexa-reportv2 -- report nexa
|
||||||
|
pm2 start app.js --name nexa-confirm -- confirm nexa
|
||||||
|
pm2 start app.js --name nexa-distributionv2 -- distribution nexa
|
||||||
|
pm2 start app.js --name email -- notice nexa
|
||||||
|
pm2 start app.js --name nexa-balance -- balance nexa
|
||||||
|
|
||||||
|
pm2 start app.js --name grs-hashratev2 -- hashrate grs
|
||||||
|
pm2 start app.js --name grs-reportv2 -- report grs
|
||||||
|
pm2 start app.js --name grs-confirm -- confirm grs
|
||||||
|
pm2 start app.js --name grs-distributionv2 -- distribution grs
|
||||||
|
pm2 start app.js --name grs-balance -- balance grs
|
||||||
|
|
||||||
|
pm2 start app.js --name mona-hashratev2 -- hashrate mona
|
||||||
|
pm2 start app.js --name mona-reportv2 -- report mona
|
||||||
|
pm2 start app.js --name mona-confirm -- confirm mona
|
||||||
|
pm2 start app.js --name mona-distributionv2 -- distribution mona
|
||||||
|
pm2 start app.js --name mona-balance -- balance mona
|
||||||
|
|
||||||
|
pm2 start app.js --name dgbs-hashratev2 -- hashrate dgbs
|
||||||
|
pm2 start app.js --name dgbs-reportv2 -- report dgbs
|
||||||
|
pm2 start app.js --name dgbs-confirm -- confirm dgbs
|
||||||
|
pm2 start app.js --name dgbs-distributionv2 -- distribution dgbs
|
||||||
|
|
||||||
|
pm2 start app.js --name dgbq-hashratev2 -- hashrate dgbq
|
||||||
|
pm2 start app.js --name dgbq-reportv2 -- report dgbq
|
||||||
|
pm2 start app.js --name dgbq-confirm -- confirm dgbq
|
||||||
|
pm2 start app.js --name dgbq-distributionv2 -- distribution dgbq
|
||||||
|
|
||||||
|
pm2 start app.js --name dgbo-hashratev2 -- hashrate dgbo
|
||||||
|
pm2 start app.js --name dgbo-reportv2 -- report dgbo
|
||||||
|
pm2 start app.js --name dgbo-confirm -- confirm dgbo
|
||||||
|
pm2 start app.js --name dgbo-distributionv2 -- distribution dgbo
|
||||||
|
pm2 start app.js --name dgb-balance -- balance dgbo
|
||||||
|
|
||||||
|
pm2 start app.js --name rxd-hashratev2 -- hashrate rxd
|
||||||
|
pm2 start app.js --name rxd-reportv2 -- report rxd
|
||||||
|
pm2 start app.js --name rxd-confirm -- confirm rxd
|
||||||
|
pm2 start app.js --name rxd-distributionv2 -- distribution rxd
|
||||||
|
pm2 start app.js --name rxd-balance -- balance rxd
|
||||||
|
|
||||||
|
pm2 start app.js --name enx-hashrate -- hashrate enx
|
||||||
|
pm2 start app.js --name enx-report -- report enx
|
||||||
|
|
||||||
|
pm2 start app.js --name alph-report -- report alph
|
||||||
|
pm2 start app.js --name alph-hashrate -- hashrate alph
|
||||||
|
pm2 start app.js --name alph-confirm -- confirm alph
|
||||||
|
pm2 start app.js --name alph-distribution -- distribution alph
|
||||||
|
pm2 start app.js --name alph-balance -- balance alph
|
||||||
|
```
|
||||||
86
app.js
86
app.js
@@ -1,13 +1,11 @@
|
|||||||
const schedule = require("node-schedule");
|
const schedule = require("node-schedule");
|
||||||
// const executeWithRetry = require("./public/retry")
|
|
||||||
const Times = require("./public/times");
|
const Times = require("./public/times");
|
||||||
const HashRate = require("./src/hashrate");
|
const HashRate = require("./src/hashrate");
|
||||||
const {Report, ReportEnx} = require("./src/report");
|
const { Report, ReportEnx } = require("./src/report");
|
||||||
const Confirm = require("./src/confirm");
|
const Confirm = require("./src/confirm");
|
||||||
const Distribution = require("./src/distribution");
|
const Distribution = require("./src/distribution");
|
||||||
const { Balance, DGBBlance } = require("./src/blanace");
|
const { Balance, DGBBlance } = require("./src/blanace");
|
||||||
const Stats = require("./src/stat");
|
const ClearDBData = require("./src/clear");
|
||||||
const ClearDBData = require("./src/clear")
|
|
||||||
const Notice = require("./src/notice");
|
const Notice = require("./src/notice");
|
||||||
|
|
||||||
const method = process.argv[2];
|
const method = process.argv[2];
|
||||||
@@ -43,8 +41,8 @@ if (method === "hashrate") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (method === "report") {
|
if (method === "report") {
|
||||||
let report
|
let report;
|
||||||
if(coin === "enx"){
|
if (coin === "enx") {
|
||||||
report = new ReportEnx(coin);
|
report = new ReportEnx(coin);
|
||||||
} else {
|
} else {
|
||||||
report = new Report(coin);
|
report = new Report(coin);
|
||||||
@@ -60,40 +58,39 @@ if (method === "report") {
|
|||||||
}, interval);
|
}, interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (method === "confirm") {
|
|
||||||
// // schedule.scheduleJob({hour:[1], minute:[30], second:[0]}, async () =>{
|
|
||||||
// // confirm.main();
|
|
||||||
// // })
|
|
||||||
// let interval = 600000;
|
|
||||||
// if (coin === "rxd") {
|
|
||||||
// interval = 1800000;
|
|
||||||
// }
|
|
||||||
// const confirm = new Confirm(coin);
|
|
||||||
// setInterval(() => {
|
|
||||||
// confirm.main();
|
|
||||||
// }, interval);
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
if (method === "confirm") {
|
if (method === "confirm") {
|
||||||
|
let interval = 60000;
|
||||||
|
if (coin === "rxd") {
|
||||||
|
interval = 300000;
|
||||||
|
} else if (coin === "nexa") {
|
||||||
|
interval = 120000;
|
||||||
|
}
|
||||||
const confirm = new Confirm(coin);
|
const confirm = new Confirm(coin);
|
||||||
schedule.scheduleJob({hour:[1], minute:[30], second:[0]}, async () =>{
|
setInterval(() => {
|
||||||
confirm.main();
|
confirm.main();
|
||||||
})
|
}, interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// if (method === "confirm") {
|
||||||
|
// const confirm = new Confirm(coin);
|
||||||
|
// schedule.scheduleJob({ hour: [1], minute: [30], second: [0] }, async () => {
|
||||||
|
// confirm.main();
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
if (method === "distribution") {
|
if (method === "distribution") {
|
||||||
const distribution = new Distribution(coin);
|
const distribution = new Distribution(coin);
|
||||||
schedule.scheduleJob({ hour: [0], minute: [1], second: [0] }, async () => {
|
// schedule.scheduleJob({ hour: [0], minute: [1], second: [0] }, async () => {
|
||||||
const now_ts = Date.now().valueOf();
|
const now_ts = Date.now().valueOf();
|
||||||
const last_ts = now_ts - 1000 * 60 * 60 * 24;
|
const last_ts = now_ts - 1000 * 60 * 60 * 24;
|
||||||
const ymd_now = Times.utcTime(now_ts);
|
const ymd_now = Times.utcTime(now_ts);
|
||||||
const ymd_last = Times.utcTime(last_ts);
|
const ymd_last = Times.utcTime(last_ts);
|
||||||
const end_time = ymd_now.split(" ")[0] + " 00:00:00";
|
const end_time = ymd_now.split(" ")[0] + " 00:00:00";
|
||||||
const start_time = ymd_last.split(" ")[0] + " 00:00:00";
|
const start_time = ymd_last.split(" ")[0] + " 00:00:00";
|
||||||
await distribution.main(start_time, end_time);
|
distribution.main(start_time, end_time);
|
||||||
});
|
// });
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (method === "balance") {
|
// if (method === "balance") {
|
||||||
@@ -117,7 +114,6 @@ if (method === "distribution") {
|
|||||||
// });
|
// });
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
if (method === "balance") {
|
if (method === "balance") {
|
||||||
const special_coins = ["dgbo", "dgbs", "dgbq"];
|
const special_coins = ["dgbo", "dgbs", "dgbq"];
|
||||||
let balance;
|
let balance;
|
||||||
@@ -126,39 +122,37 @@ if (method === "balance") {
|
|||||||
} else {
|
} else {
|
||||||
balance = new Balance(coin);
|
balance = new Balance(coin);
|
||||||
}
|
}
|
||||||
|
|
||||||
let hour = 4
|
let hour = 4;
|
||||||
if(coin === "rxd"){
|
if (coin === "rxd" || coin === "alph") {
|
||||||
hour = 9
|
hour = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function task(balance) {
|
async function task(balance) {
|
||||||
let count = 0; // 让 count 成为 task 内部变量,避免多个 schedule 共享 count
|
let count = 0; // 让 count 成为 task 内部变量,避免多个 schedule 共享 count
|
||||||
const last_height = await balance.node.getblockcount()
|
const last_height = await balance.node.getblockcount();
|
||||||
while (count < 36) { // 最多执行 36 次 (6小时)
|
while (count < 36) {
|
||||||
|
// 最多执行 36 次 (6小时)
|
||||||
const enable = await balance.query_now_height(last_height);
|
const enable = await balance.query_now_height(last_height);
|
||||||
if (enable) {
|
if (enable) {
|
||||||
await balance.main();
|
const result = await balance.main();
|
||||||
console.log(`${coin}转账已完成`);
|
if(!result){
|
||||||
return; // 成功执行后退出循环
|
console.log(`${coin}转账已完成`);
|
||||||
|
return; // 成功执行后退出循环
|
||||||
|
}
|
||||||
}
|
}
|
||||||
console.log(`等待中... (已等待 ${count * 10} 分钟)`);
|
console.log(`等待中... (已等待 ${count * 10} 分钟)`);
|
||||||
await balance.sleep(1000 * 60 * 10); // 休眠 10 分钟
|
await balance.sleep(1000 * 60 * 10); // 休眠 10 分钟
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
console.log("等待超时,任务结束!");
|
console.log("等待超时,任务结束!");
|
||||||
}
|
}
|
||||||
schedule.scheduleJob({hour: [hour], minute: [10], second: [0]}, async () => {
|
schedule.scheduleJob({ hour: [hour], minute: [10], second: [0] }, async () => {
|
||||||
await task(balance);
|
await task(balance);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (method === "stats") {
|
|
||||||
const stats = new Stats(coin);
|
|
||||||
stats.caculate_user_should_distribution("2024-11-28 00:00:00");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (method === "clear") {
|
if (method === "clear") {
|
||||||
const clear = new ClearDBData(coin);
|
const clear = new ClearDBData(coin);
|
||||||
clear
|
clear
|
||||||
@@ -183,7 +177,7 @@ if (method === "clear") {
|
|||||||
|
|
||||||
if (method === "notice") {
|
if (method === "notice") {
|
||||||
const notice = new Notice(coin);
|
const notice = new Notice(coin);
|
||||||
schedule.scheduleJob({hour:[9], minute:[30], second:[0]}, () =>{
|
schedule.scheduleJob({ hour: [9], minute: [30], second: [0] }, () => {
|
||||||
notice.main()
|
notice.main();
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
129
config/alph.conf
129
config/alph.conf
@@ -1,129 +0,0 @@
|
|||||||
{
|
|
||||||
"master":{
|
|
||||||
"pooldb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "alphpooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "alphsharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"distribution":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "distribution",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"hashrate":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "hashrate",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"users_addresses":{
|
|
||||||
"host": "13.214.175.13",
|
|
||||||
"user": "root",
|
|
||||||
"password": "m2Pool2024@!",
|
|
||||||
"database": "pool",
|
|
||||||
"port":3123,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"balance":{
|
|
||||||
"host": "18.143.153.132",
|
|
||||||
"user": "app_user",
|
|
||||||
"password": "8xdZ3~FR$c1mqcxwmLs",
|
|
||||||
"database": "mydb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"slave":{
|
|
||||||
"pooldb_slave":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "distribution",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb_slave":{
|
|
||||||
"host": "13.214.176.64",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbosharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"redis_options":{
|
|
||||||
"redis1":{
|
|
||||||
"host":"localhost",
|
|
||||||
"port":6379,
|
|
||||||
"db":9,
|
|
||||||
"connectTimeout":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_options":{
|
|
||||||
"node1":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"0x09e220e226f2feb7a971a2b6f958e7d4b1c187c8",
|
|
||||||
"rpcPort":12973,
|
|
||||||
"rpcHost":"127.0.0.1"
|
|
||||||
},
|
|
||||||
"node2":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"0x09e220e226f2feb7a971a2b6f958e7d4b1c187c8",
|
|
||||||
"rpcPort":12973,
|
|
||||||
"rpcHost":"127.0.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"retry_options":{
|
|
||||||
"node":{
|
|
||||||
"max_retries":10,
|
|
||||||
"retry_delay":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"REPORT_ADDRESS":"1CYKPymfTVex9KZ2i48S3v5cAE7xT6hERG1P6GJiHgWJu",
|
|
||||||
"MAX_MATURE":500,
|
|
||||||
"distribution_conf":{
|
|
||||||
"PPLNS_SIZE":20000,
|
|
||||||
"MODEL_PERCENT":{
|
|
||||||
"SCORE":0,
|
|
||||||
"PPLNS":0.7,
|
|
||||||
"PROPDIF":0.3
|
|
||||||
},
|
|
||||||
"SCORE_PERCENT":{
|
|
||||||
"HASHRATE":1,
|
|
||||||
"STDDEVS":0
|
|
||||||
},
|
|
||||||
"POOL_FEE":0.025
|
|
||||||
}
|
|
||||||
}
|
|
||||||
128
config/dgbo.conf
128
config/dgbo.conf
@@ -1,128 +0,0 @@
|
|||||||
{
|
|
||||||
"master":{
|
|
||||||
"pooldb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbopooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbosharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"distribution":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "distribution",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"hashrate":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "hashrate",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"users_addresses":{
|
|
||||||
"host": "13.214.175.13",
|
|
||||||
"user": "root",
|
|
||||||
"password": "m2Pool2024@!",
|
|
||||||
"database": "pool",
|
|
||||||
"port":3123,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"balance":{
|
|
||||||
"host": "18.143.153.132",
|
|
||||||
"user": "app_user",
|
|
||||||
"password": "8xdZ3~FR$c1mqcxwmLs",
|
|
||||||
"database": "mydb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"slave":{
|
|
||||||
"pooldb_slave":{
|
|
||||||
"host": "13.214.176.64",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbopooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb_slave":{
|
|
||||||
"host": "13.214.176.64",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbosharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"redis_options":{
|
|
||||||
"redis1":{
|
|
||||||
"host":"localhost",
|
|
||||||
"port":6379,
|
|
||||||
"connectTimeout":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_options":{
|
|
||||||
"node1":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":14022,
|
|
||||||
"rpcHost":"127.0.0.1"
|
|
||||||
},
|
|
||||||
"node2":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":14022,
|
|
||||||
"rpcHost":"13.214.176.64"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"retry_options":{
|
|
||||||
"node":{
|
|
||||||
"max_retries":10,
|
|
||||||
"retry_delay":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"REPORT_ADDRESS":"DSdh4rXmRZizpZh7zKGSsyMqHmFE137G96",
|
|
||||||
"MAX_MATURE":50,
|
|
||||||
"distribution_conf":{
|
|
||||||
"PPLNS_SIZE":20000,
|
|
||||||
"MODEL_PERCENT":{
|
|
||||||
"SCORE":0,
|
|
||||||
"PPLNS":0.7,
|
|
||||||
"PROPDIF":0.3
|
|
||||||
},
|
|
||||||
"SCORE_PERCENT":{
|
|
||||||
"HASHRATE":1,
|
|
||||||
"STDDEVS":0
|
|
||||||
},
|
|
||||||
"POOL_FEE":0.025
|
|
||||||
}
|
|
||||||
}
|
|
||||||
128
config/dgbq.conf
128
config/dgbq.conf
@@ -1,128 +0,0 @@
|
|||||||
{
|
|
||||||
"master":{
|
|
||||||
"pooldb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbqpooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbqsharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"distribution":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "distribution",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"hashrate":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "hashrate",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"users_addresses":{
|
|
||||||
"host": "13.214.175.13",
|
|
||||||
"user": "root",
|
|
||||||
"password": "m2Pool2024@!",
|
|
||||||
"database": "pool",
|
|
||||||
"port":3123,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"balance":{
|
|
||||||
"host": "18.143.153.132",
|
|
||||||
"user": "app_user",
|
|
||||||
"password": "8xdZ3~FR$c1mqcxwmLs",
|
|
||||||
"database": "mydb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"slave":{
|
|
||||||
"pooldb_slave":{
|
|
||||||
"host": "13.214.176.64",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbqpooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb_slave":{
|
|
||||||
"host": "13.214.176.64",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbqsharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"redis_options":{
|
|
||||||
"redis1":{
|
|
||||||
"host":"localhost",
|
|
||||||
"port":6379,
|
|
||||||
"connectTimeout":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_options":{
|
|
||||||
"node1":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":14022,
|
|
||||||
"rpcHost":"127.0.0.1"
|
|
||||||
},
|
|
||||||
"node2":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":14022,
|
|
||||||
"rpcHost":"13.214.176.64"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"retry_options":{
|
|
||||||
"node":{
|
|
||||||
"max_retries":10,
|
|
||||||
"retry_delay":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"REPORT_ADDRESS":"DK8ZTp89aahJpmnwdZ8LNsAUNoGA6qS43G",
|
|
||||||
"MAX_MATURE":50,
|
|
||||||
"distribution_conf":{
|
|
||||||
"PPLNS_SIZE":20000,
|
|
||||||
"MODEL_PERCENT":{
|
|
||||||
"SCORE":0,
|
|
||||||
"PPLNS":0.7,
|
|
||||||
"PROPDIF":0.3
|
|
||||||
},
|
|
||||||
"SCORE_PERCENT":{
|
|
||||||
"HASHRATE":1,
|
|
||||||
"STDDEVS":0
|
|
||||||
},
|
|
||||||
"POOL_FEE":0.025
|
|
||||||
}
|
|
||||||
}
|
|
||||||
128
config/dgbs.conf
128
config/dgbs.conf
@@ -1,128 +0,0 @@
|
|||||||
{
|
|
||||||
"master":{
|
|
||||||
"pooldb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbspooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbssharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"distribution":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "distribution",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"hashrate":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "hashrate",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"users_addresses":{
|
|
||||||
"host": "13.214.175.13",
|
|
||||||
"user": "root",
|
|
||||||
"password": "m2Pool2024@!",
|
|
||||||
"database": "pool",
|
|
||||||
"port":3123,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"balance":{
|
|
||||||
"host": "18.143.153.132",
|
|
||||||
"user": "app_user",
|
|
||||||
"password": "8xdZ3~FR$c1mqcxwmLs",
|
|
||||||
"database": "mydb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"slave":{
|
|
||||||
"pooldb_slave":{
|
|
||||||
"host": "13.214.176.64",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbspooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb_slave":{
|
|
||||||
"host": "13.214.176.64",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbssharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"redis_options":{
|
|
||||||
"redis1":{
|
|
||||||
"host":"localhost",
|
|
||||||
"port":6379,
|
|
||||||
"connectTimeout":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_options":{
|
|
||||||
"node1":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":14022,
|
|
||||||
"rpcHost":"127.0.0.1"
|
|
||||||
},
|
|
||||||
"node2":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":14022,
|
|
||||||
"rpcHost":"13.214.176.64"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"retry_options":{
|
|
||||||
"node":{
|
|
||||||
"max_retries":10,
|
|
||||||
"retry_delay":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"REPORT_ADDRESS":"DDQVUDkCNfF5TKjJ5n6jh7BG2wZxr9SNnq",
|
|
||||||
"MAX_MATURE":50,
|
|
||||||
"distribution_conf":{
|
|
||||||
"PPLNS_SIZE":20000,
|
|
||||||
"MODEL_PERCENT":{
|
|
||||||
"SCORE":0,
|
|
||||||
"PPLNS":0.7,
|
|
||||||
"PROPDIF":0.3
|
|
||||||
},
|
|
||||||
"SCORE_PERCENT":{
|
|
||||||
"HASHRATE":1,
|
|
||||||
"STDDEVS":0
|
|
||||||
},
|
|
||||||
"POOL_FEE":0.025
|
|
||||||
}
|
|
||||||
}
|
|
||||||
128
config/enx.conf
128
config/enx.conf
@@ -1,128 +0,0 @@
|
|||||||
{
|
|
||||||
"master":{
|
|
||||||
"pooldb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "enxpooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "enxsharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"distribution":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "distribution",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"hashrate":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "hashrate",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"users_addresses":{
|
|
||||||
"host": "13.214.175.13",
|
|
||||||
"user": "root",
|
|
||||||
"password": "m2Pool2024@!",
|
|
||||||
"database": "pool",
|
|
||||||
"port":3123,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"balance":{
|
|
||||||
"host": "18.143.153.132",
|
|
||||||
"user": "app_user",
|
|
||||||
"password": "8xdZ3~FR$c1mqcxwmLs",
|
|
||||||
"database": "mydb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"slave":{
|
|
||||||
"pooldb_slave":{
|
|
||||||
"host": "13.214.176.64",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbopooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb_slave":{
|
|
||||||
"host": "13.214.176.64",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbosharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"redis_options":{
|
|
||||||
"redis1":{
|
|
||||||
"host":"localhost",
|
|
||||||
"port":6379,
|
|
||||||
"connectTimeout":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_options":{
|
|
||||||
"node1":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":16110,
|
|
||||||
"rpcHost":"10.168.1.162"
|
|
||||||
},
|
|
||||||
"node2":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":16110,
|
|
||||||
"rpcHost":"10.168.1.162"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"retry_options":{
|
|
||||||
"node":{
|
|
||||||
"max_retries":10,
|
|
||||||
"retry_delay":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"REPORT_ADDRESS":"entropyx:qpe7q43ajzuv42az6kjdu84yrzdhzj33w03kpytfg5lx5yk3x0pd6x0r87hhr",
|
|
||||||
"MAX_MATURE":1000,
|
|
||||||
"distribution_conf":{
|
|
||||||
"PPLNS_SIZE":20000,
|
|
||||||
"MODEL_PERCENT":{
|
|
||||||
"SCORE":0,
|
|
||||||
"PPLNS":0.7,
|
|
||||||
"PROPDIF":0.3
|
|
||||||
},
|
|
||||||
"SCORE_PERCENT":{
|
|
||||||
"HASHRATE":1,
|
|
||||||
"STDDEVS":0
|
|
||||||
},
|
|
||||||
"POOL_FEE":0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
130
config/example.txt
Normal file
130
config/example.txt
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
// this file please use .conf
|
||||||
|
{
|
||||||
|
"master":{
|
||||||
|
"pooldb":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
},
|
||||||
|
"sharesdb":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
},
|
||||||
|
"distribution":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
},
|
||||||
|
"hashrate":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
},
|
||||||
|
"users_addresses":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
},
|
||||||
|
"balance":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"slave":{
|
||||||
|
"pooldb_slave":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
},
|
||||||
|
"sharesdb_slave":{
|
||||||
|
"host": "",
|
||||||
|
"user": "",
|
||||||
|
"password": "",
|
||||||
|
"database": "",
|
||||||
|
"port":,
|
||||||
|
"waitForConnections": true,
|
||||||
|
"connectionLimit": 20,
|
||||||
|
"queueLimit": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"redis_options":{
|
||||||
|
"redis1":{
|
||||||
|
"host":"",
|
||||||
|
"port":,
|
||||||
|
"db":,
|
||||||
|
"connectTimeout":
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_options":{
|
||||||
|
"node1":{
|
||||||
|
"rpcUser":"",
|
||||||
|
"rpcPassword":"<alph api-key>",
|
||||||
|
"rpcPort":,
|
||||||
|
"rpcHost":""
|
||||||
|
},
|
||||||
|
"node2":{
|
||||||
|
"rpcUser":"",
|
||||||
|
"rpcPassword":"<alph api-key>",
|
||||||
|
"rpcPort":,
|
||||||
|
"rpcHost":""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"retry_options":{
|
||||||
|
"node":{
|
||||||
|
"max_retries":,
|
||||||
|
"retry_delay":
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"REPORT_ADDRESS":"",
|
||||||
|
"MAX_MATURE":,
|
||||||
|
"distribution_conf":{
|
||||||
|
"PPLNS_SIZE":,
|
||||||
|
"MODEL_PERCENT":{
|
||||||
|
"SCORE":,
|
||||||
|
"PPLNS":,
|
||||||
|
"PROPDIF":
|
||||||
|
},
|
||||||
|
"SCORE_PERCENT":{
|
||||||
|
"HASHRATE":,
|
||||||
|
"STDDEVS":
|
||||||
|
},
|
||||||
|
"POOL_FEE":
|
||||||
|
}
|
||||||
|
}
|
||||||
128
config/grs.conf
128
config/grs.conf
@@ -1,128 +0,0 @@
|
|||||||
{
|
|
||||||
"master":{
|
|
||||||
"pooldb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "grspooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "grssharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"distribution":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "distribution",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"hashrate":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "hashrate",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"users_addresses":{
|
|
||||||
"host": "13.214.175.13",
|
|
||||||
"user": "root",
|
|
||||||
"password": "m2Pool2024@!",
|
|
||||||
"database": "pool",
|
|
||||||
"port":3123,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"balance":{
|
|
||||||
"host": "18.143.153.132",
|
|
||||||
"user": "app_user",
|
|
||||||
"password": "8xdZ3~FR$c1mqcxwmLs",
|
|
||||||
"database": "mydb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"slave":{
|
|
||||||
"pooldb_slave":{
|
|
||||||
"host": "172.17.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "grspooldb",
|
|
||||||
"port":3307,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb_slave":{
|
|
||||||
"host": "172.17.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "grssharesdb",
|
|
||||||
"port":3307,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"redis_options":{
|
|
||||||
"redis1":{
|
|
||||||
"host":"localhost",
|
|
||||||
"port":6379,
|
|
||||||
"connectTimeout":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_options":{
|
|
||||||
"node1":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":1441,
|
|
||||||
"rpcHost":"127.0.0.1"
|
|
||||||
},
|
|
||||||
"node2":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":1441,
|
|
||||||
"rpcHost":"13.213.4.56"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"retry_options":{
|
|
||||||
"node":{
|
|
||||||
"max_retries":10,
|
|
||||||
"retry_delay":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"REPORT_ADDRESS":"3BZgQAB1tAN6zRcseavQ6vcMtXXiwThTvL",
|
|
||||||
"MAX_MATURE":20,
|
|
||||||
"distribution_conf":{
|
|
||||||
"PPLNS_SIZE":20000,
|
|
||||||
"MODEL_PERCENT":{
|
|
||||||
"SCORE":0,
|
|
||||||
"PPLNS":0.7,
|
|
||||||
"PROPDIF":0.3
|
|
||||||
},
|
|
||||||
"SCORE_PERCENT":{
|
|
||||||
"HASHRATE":1,
|
|
||||||
"STDDEVS":0
|
|
||||||
},
|
|
||||||
"POOL_FEE":0.025
|
|
||||||
}
|
|
||||||
}
|
|
||||||
128
config/mona.conf
128
config/mona.conf
@@ -1,128 +0,0 @@
|
|||||||
{
|
|
||||||
"master":{
|
|
||||||
"pooldb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "monapooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "monasharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"distribution":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "distribution",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"hashrate":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "hashrate",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"users_addresses":{
|
|
||||||
"host": "13.214.175.13",
|
|
||||||
"user": "root",
|
|
||||||
"password": "m2Pool2024@!",
|
|
||||||
"database": "pool",
|
|
||||||
"port":3123,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"balance":{
|
|
||||||
"host": "18.143.153.132",
|
|
||||||
"user": "app_user",
|
|
||||||
"password": "8xdZ3~FR$c1mqcxwmLs",
|
|
||||||
"database": "mydb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"slave":{
|
|
||||||
"pooldb_slave":{
|
|
||||||
"host": "172.17.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "monapooldb",
|
|
||||||
"port":3307,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb_slave":{
|
|
||||||
"host": "172.17.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "monasharesdb",
|
|
||||||
"port":3307,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"redis_options":{
|
|
||||||
"redis1":{
|
|
||||||
"host":"localhost",
|
|
||||||
"port":6379,
|
|
||||||
"connectTimeout":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_options":{
|
|
||||||
"node1":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":9402,
|
|
||||||
"rpcHost":"127.0.0.1"
|
|
||||||
},
|
|
||||||
"node2":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":9402,
|
|
||||||
"rpcHost":"13.213.4.56"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"retry_options":{
|
|
||||||
"node":{
|
|
||||||
"max_retries":10,
|
|
||||||
"retry_delay":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"REPORT_ADDRESS":"PSq64UuybtHykZvV9eQa77bkkAZyLgLkcG",
|
|
||||||
"MAX_MATURE":20,
|
|
||||||
"distribution_conf":{
|
|
||||||
"PPLNS_SIZE":20000,
|
|
||||||
"MODEL_PERCENT":{
|
|
||||||
"SCORE":0,
|
|
||||||
"PPLNS":0.7,
|
|
||||||
"PROPDIF":0.3
|
|
||||||
},
|
|
||||||
"SCORE_PERCENT":{
|
|
||||||
"HASHRATE":1,
|
|
||||||
"STDDEVS":0
|
|
||||||
},
|
|
||||||
"POOL_FEE":0.025
|
|
||||||
}
|
|
||||||
}
|
|
||||||
128
config/nexa.conf
128
config/nexa.conf
@@ -1,128 +0,0 @@
|
|||||||
{
|
|
||||||
"master":{
|
|
||||||
"pooldb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "m2pooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "sharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"distribution":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "root",
|
|
||||||
"password": "123456",
|
|
||||||
"database": "distribution",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"hashrate":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "root",
|
|
||||||
"password": "123456",
|
|
||||||
"database": "test",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"users_addresses":{
|
|
||||||
"host": "13.214.175.13",
|
|
||||||
"user": "root",
|
|
||||||
"password": "m2Pool2024@!",
|
|
||||||
"database": "pool",
|
|
||||||
"port":3123,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"balance":{
|
|
||||||
"host": "18.143.153.132",
|
|
||||||
"user": "app_user",
|
|
||||||
"password": "8xdZ3~FR$c1mqcxwmLs",
|
|
||||||
"database": "mydb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"slave":{
|
|
||||||
"pooldb_slave":{
|
|
||||||
"host": "172.17.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "m2pooldb",
|
|
||||||
"port":3307,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb_slave":{
|
|
||||||
"host": "172.17.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "sharesdb",
|
|
||||||
"port":3307,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"redis_options":{
|
|
||||||
"redis1":{
|
|
||||||
"host":"localhost",
|
|
||||||
"port":6379,
|
|
||||||
"connectTimeout":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_options":{
|
|
||||||
"node1":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":7227,
|
|
||||||
"rpcHost":"127.0.0.1"
|
|
||||||
},
|
|
||||||
"node2":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":7227,
|
|
||||||
"rpcHost":"18.139.85.190"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"retry_options":{
|
|
||||||
"node":{
|
|
||||||
"max_retries":10,
|
|
||||||
"retry_delay":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"REPORT_ADDRESS":"nexa:nqtsq5g54692xaxstwa8je7u6g83uy2x0mlgl52w75uvrsg4",
|
|
||||||
"MAX_MATURE":20,
|
|
||||||
"distribution_conf":{
|
|
||||||
"PPLNS_SIZE":20000,
|
|
||||||
"MODEL_PERCENT":{
|
|
||||||
"SCORE":0,
|
|
||||||
"PPLNS":0.7,
|
|
||||||
"PROPDIF":0.3
|
|
||||||
},
|
|
||||||
"SCORE_PERCENT":{
|
|
||||||
"HASHRATE":1,
|
|
||||||
"STDDEVS":0
|
|
||||||
},
|
|
||||||
"POOL_FEE":0.025
|
|
||||||
}
|
|
||||||
}
|
|
||||||
128
config/rxd.conf
128
config/rxd.conf
@@ -1,128 +0,0 @@
|
|||||||
{
|
|
||||||
"master":{
|
|
||||||
"pooldb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "rxdpooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "rxdsharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"distribution":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "distribution",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"hashrate":{
|
|
||||||
"host": "13.213.4.56",
|
|
||||||
"user": "pool190",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "hashrate",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"users_addresses":{
|
|
||||||
"host": "13.214.175.13",
|
|
||||||
"user": "root",
|
|
||||||
"password": "m2Pool2024@!",
|
|
||||||
"database": "pool",
|
|
||||||
"port":3123,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"balance":{
|
|
||||||
"host": "18.143.153.132",
|
|
||||||
"user": "app_user",
|
|
||||||
"password": "8xdZ3~FR$c1mqcxwmLs",
|
|
||||||
"database": "mydb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"slave":{
|
|
||||||
"pooldb_slave":{
|
|
||||||
"host": "172.17.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbopooldb",
|
|
||||||
"port":3307,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb_slave":{
|
|
||||||
"host": "172.17.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "dgbosharesdb",
|
|
||||||
"port":3307,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"redis_options":{
|
|
||||||
"redis1":{
|
|
||||||
"host":"localhost",
|
|
||||||
"port":6379,
|
|
||||||
"connectTimeout":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_options":{
|
|
||||||
"node1":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":7332,
|
|
||||||
"rpcHost":"127.0.0.1"
|
|
||||||
},
|
|
||||||
"node2":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":7332,
|
|
||||||
"rpcHost":"18.141.161.129"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"retry_options":{
|
|
||||||
"node":{
|
|
||||||
"max_retries":10,
|
|
||||||
"retry_delay":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"REPORT_ADDRESS":"1MBm1CZGSxa8DbDRjNVigyYXo24gU3AEfv",
|
|
||||||
"MAX_MATURE":10,
|
|
||||||
"distribution_conf":{
|
|
||||||
"PPLNS_SIZE":20000,
|
|
||||||
"MODEL_PERCENT":{
|
|
||||||
"SCORE":0,
|
|
||||||
"PPLNS":0.7,
|
|
||||||
"PROPDIF":0.3
|
|
||||||
},
|
|
||||||
"SCORE_PERCENT":{
|
|
||||||
"HASHRATE":1,
|
|
||||||
"STDDEVS":0
|
|
||||||
},
|
|
||||||
"POOL_FEE":0.025
|
|
||||||
}
|
|
||||||
}
|
|
||||||
128
config/test.conf
128
config/test.conf
@@ -1,128 +0,0 @@
|
|||||||
{
|
|
||||||
"master":{
|
|
||||||
"pooldb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "m2pooldb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "sharesdb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"distribution":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "root",
|
|
||||||
"password": "123456",
|
|
||||||
"database": "distribution",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"hashrate":{
|
|
||||||
"host": "127.0.0.1",
|
|
||||||
"user": "root",
|
|
||||||
"password": "123456",
|
|
||||||
"database": "test",
|
|
||||||
"port":6789,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"users_addresses":{
|
|
||||||
"host": "13.214.175.13",
|
|
||||||
"user": "root",
|
|
||||||
"password": "m2Pool2024@!",
|
|
||||||
"database": "pool",
|
|
||||||
"port":3123,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"balance":{
|
|
||||||
"host": "18.143.153.132",
|
|
||||||
"user": "app_user",
|
|
||||||
"password": "8xdZ3~FR$c1mqcxwmLs",
|
|
||||||
"database": "mydb",
|
|
||||||
"port":3306,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"slave":{
|
|
||||||
"pooldb_slave":{
|
|
||||||
"host": "172.17.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "m2pooldb",
|
|
||||||
"port":3307,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
},
|
|
||||||
"sharesdb_slave":{
|
|
||||||
"host": "172.17.0.1",
|
|
||||||
"user": "m2pool",
|
|
||||||
"password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd",
|
|
||||||
"database": "sharesdb",
|
|
||||||
"port":3307,
|
|
||||||
"waitForConnections": true,
|
|
||||||
"connectionLimit": 20,
|
|
||||||
"queueLimit": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"redis_options":{
|
|
||||||
"redis1":{
|
|
||||||
"host":"localhost",
|
|
||||||
"port":6379,
|
|
||||||
"connectTimeout":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_options":{
|
|
||||||
"node1":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":7227,
|
|
||||||
"rpcHost":"127.0.0.1"
|
|
||||||
},
|
|
||||||
"node2":{
|
|
||||||
"rpcUser":"test",
|
|
||||||
"rpcPassword":"test",
|
|
||||||
"rpcPort":7227,
|
|
||||||
"rpcHost":"18.139.85.190"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"retry_options":{
|
|
||||||
"node":{
|
|
||||||
"max_retries":10,
|
|
||||||
"retry_delay":10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"REPORT_ADDRESS":"nexa:nqtsq5g54692xaxstwa8je7u6g83uy2x0mlgl52w75uvrsg4",
|
|
||||||
"MAX_MATURE":20,
|
|
||||||
"distribution_conf":{
|
|
||||||
"PPLNS_SIZE":20000,
|
|
||||||
"MODEL_PERCENT":{
|
|
||||||
"SCORE":0,
|
|
||||||
"PPLNS":0.7,
|
|
||||||
"PROPDIF":0.3
|
|
||||||
},
|
|
||||||
"SCORE_PERCENT":{
|
|
||||||
"HASHRATE":1,
|
|
||||||
"STDDEVS":0
|
|
||||||
},
|
|
||||||
"POOL_FEE":0.025
|
|
||||||
}
|
|
||||||
}
|
|
||||||
12
lib/node.js
12
lib/node.js
@@ -481,12 +481,18 @@ class ALPHRPCNode extends HttpNode {
|
|||||||
const coinbaseTx = transactions[transactions.length - 1].unsigned
|
const coinbaseTx = transactions[transactions.length - 1].unsigned
|
||||||
if (coinbaseTx.inputs.length === 0) {
|
if (coinbaseTx.inputs.length === 0) {
|
||||||
const {fixedOutputs} = coinbaseTx
|
const {fixedOutputs} = coinbaseTx
|
||||||
if(fixedOutputs.length === 1){
|
for(let item of fixedOutputs){
|
||||||
const {attoAlphAmount, address } = fixedOutputs[0]
|
const {attoAlphAmount, address } = item
|
||||||
if(address === REPORT_ADDRESS){
|
if(address === REPORT_ADDRESS){
|
||||||
return {height, hash: block_hash, time:Math.trunc(timestamp / 1000), block_reward: Number(attoAlphAmount), block_fees: null };
|
return {height, hash: block_hash, time:Math.trunc(timestamp / 1000), block_reward: BigInt(attoAlphAmount), block_fees: null };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// if(fixedOutputs.length === 1){
|
||||||
|
// const {attoAlphAmount, address } = fixedOutputs[0]
|
||||||
|
// if(address === REPORT_ADDRESS){
|
||||||
|
// return {height, hash: block_hash, time:Math.trunc(timestamp / 1000), block_reward: Number(attoAlphAmount), block_fees: null };
|
||||||
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
} catch(err){
|
} catch(err){
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class Balance extends Init {
|
|||||||
async query_now_height(last_height){
|
async query_now_height(last_height){
|
||||||
try{
|
try{
|
||||||
const [chain_height, [db_height]] = await Promise.all([this.node.getblockcount(), this.query_min_height()])
|
const [chain_height, [db_height]] = await Promise.all([this.node.getblockcount(), this.query_min_height()])
|
||||||
return chain_height > db_height.min_height + this.MAX_MATURE && chain_height > last_height + 2// 在成熟高度基础上再+2高度,防止pool_account转账未更新
|
return chain_height > db_height.min_height + this.MAX_MATURE && chain_height > last_height + 5// 在成熟高度基础上再+2高度,防止pool_account转账未更新
|
||||||
} catch(err){
|
} catch(err){
|
||||||
throw err
|
throw err
|
||||||
}
|
}
|
||||||
@@ -152,7 +152,7 @@ class DGBBlance extends Init {
|
|||||||
try{
|
try{
|
||||||
const sql = `SELECT MAX(max_height) AS max_height FROM wallet_in WHERE coin Like "dgb%" AND state = ?;`
|
const sql = `SELECT MAX(max_height) AS max_height FROM wallet_in WHERE coin Like "dgb%" AND state = ?;`
|
||||||
const [chain_height, [db_height]] = await Promise.all([this.node.getblockcount(), this.distribution.exec(sql, [0])])
|
const [chain_height, [db_height]] = await Promise.all([this.node.getblockcount(), this.distribution.exec(sql, [0])])
|
||||||
return chain_height > db_height.max_height + this.MAX_MATURE && chain_height > last_height + 2
|
return chain_height > db_height.max_height + this.MAX_MATURE && chain_height > last_height + 5
|
||||||
} catch(err){
|
} catch(err){
|
||||||
throw err
|
throw err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
const Init = require("./init");
|
const Init = require("./init");
|
||||||
|
const Times = require("../public/times");
|
||||||
|
|
||||||
class Confirm extends Init {
|
class Confirm extends Init {
|
||||||
constructor(coin) {
|
constructor(coin) {
|
||||||
@@ -28,13 +29,27 @@ class Confirm extends Init {
|
|||||||
// 查询当前最高成熟高度,即当前最新高度 - MAX_MATURE
|
// 查询当前最高成熟高度,即当前最新高度 - MAX_MATURE
|
||||||
async query_maxture_height() {
|
async query_maxture_height() {
|
||||||
try {
|
try {
|
||||||
const now_height = await this.node.getblockcount();
|
if(this.coin !== "alph"){
|
||||||
const max_height = Number(now_height) - this.MAX_MATURE;
|
const now_height = await this.node.getblockcount();
|
||||||
if (!this.isPositiveInteger(max_height)) {
|
const max_height = Number(now_height) - this.MAX_MATURE;
|
||||||
console.log(`当前节点最大高度为${now_height}, 当前成熟高度为${max_height}`);
|
if (!this.isPositiveInteger(max_height)) {
|
||||||
return false;
|
console.log(`当前节点最大高度为${now_height}, 当前成熟高度为${max_height}`);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return max_height;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return max_height;
|
const now = Date.now().valueOf()
|
||||||
|
const max_mature_time = now - this.MAX_MATURE * 60 * 1000
|
||||||
|
const ymd = Times.utcTime(max_mature_time)
|
||||||
|
const sql = `SELECT MAX(height) AS max_height FROM alph_blkreportprofitv2 WHERE date <= ? AND state = ?;`
|
||||||
|
const data = await this.distribution.exec(sql, [ymd, 0])
|
||||||
|
if(!data[0]){
|
||||||
|
console.log(`alph当前时间没有需要更新的成熟区块`);
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
return data[0].max_height
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw err;
|
throw err;
|
||||||
@@ -101,13 +116,13 @@ class Confirm extends Init {
|
|||||||
suc_heights.push(item);
|
suc_heights.push(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(err_heights.length === 0 && need_update_heights.length !== 0){
|
// if(err_heights.length === 0 && need_update_heights.length !== 0){
|
||||||
console.log(`${mature_max_height}之前有新报块,且无孤块`);
|
// console.log(`${mature_max_height}之前有新报块,且无孤块`);
|
||||||
} else if(err_heights.length !== 0 && need_update_heights.length === 0){
|
// } else if(err_heights.length !== 0 && need_update_heights.length === 0){
|
||||||
console.log(`${mature_max_height}之前有新报块,但这些报块都是孤块`);
|
// console.log(`${mature_max_height}之前有新报块,但这些报块都是孤块`);
|
||||||
} else if(err_heights.length !== 0 && need_update_heights.length !== 0){
|
// } else if(err_heights.length !== 0 && need_update_heights.length !== 0){
|
||||||
console.log(`${mature_max_height}之前有新报块,且其中有孤块`);
|
// console.log(`${mature_max_height}之前有新报块,且其中有孤块`);
|
||||||
}
|
// }
|
||||||
await this.update_blkreporprofit_state(suc_heights, err_heights);
|
await this.update_blkreporprofit_state(suc_heights, err_heights);
|
||||||
return
|
return
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class Distribution extends Init {
|
|||||||
const result = {};
|
const result = {};
|
||||||
// 计算每个用户的算力占比
|
// 计算每个用户的算力占比
|
||||||
for (let { user, mhs24h } of alluser_mhs24h) {
|
for (let { user, mhs24h } of alluser_mhs24h) {
|
||||||
result[user] = (mhs24h / totalHashrate) * hash_percent;
|
result[user] = Number(((mhs24h / totalHashrate) * hash_percent).toFixed(4));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -79,7 +79,7 @@ class Distribution extends Init {
|
|||||||
* 校验昨天所有报块是否成熟
|
* 校验昨天所有报块是否成熟
|
||||||
* @param {Date} start_time 采用yyyy-MM-dd hh:mm:ss格式,例如"2024-11-11 00:00:00"
|
* @param {Date} start_time 采用yyyy-MM-dd hh:mm:ss格式,例如"2024-11-11 00:00:00"
|
||||||
* @param {Date} end_time 同上
|
* @param {Date} end_time 同上
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
async query_last_day_if_mature(start_time, end_time) {
|
async query_last_day_if_mature(start_time, end_time) {
|
||||||
try {
|
try {
|
||||||
@@ -93,7 +93,7 @@ class Distribution extends Init {
|
|||||||
|
|
||||||
// 动态获取当前小时
|
// 动态获取当前小时
|
||||||
const currentHour = Number(Times.times()[4]);
|
const currentHour = Number(Times.times()[4]);
|
||||||
if(this.coin === "rxd"){
|
if (this.coin === "rxd") {
|
||||||
if (currentHour >= 9) {
|
if (currentHour >= 9) {
|
||||||
console.log("已超过凌晨 9 点,停止检查。");
|
console.log("已超过凌晨 9 点,停止检查。");
|
||||||
return false;
|
return false;
|
||||||
@@ -111,10 +111,10 @@ class Distribution extends Init {
|
|||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询当前挖矿账户状态,包括起付额和钱包地址
|
* 查询当前挖矿账户状态,包括起付额和钱包地址
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
async query_users_address() {
|
async query_users_address() {
|
||||||
try {
|
try {
|
||||||
@@ -142,8 +142,8 @@ class Distribution extends Init {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验报块
|
* 校验报块
|
||||||
* @param {Number} height
|
* @param {Number} height
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
async verify_block(height) {
|
async verify_block(height) {
|
||||||
try {
|
try {
|
||||||
@@ -159,7 +159,7 @@ class Distribution extends Init {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 将漏掉的报块插入到数据库中
|
* 将漏掉的报块插入到数据库中
|
||||||
* @param {Array} data [{time: 1708256800, height: 123456, hash: "0x1234567890", reward: 100, fees: 10}]
|
* @param {Array} data [{time: 1708256800, height: 123456, hash: "0x1234567890", reward: 100, fees: 10}]
|
||||||
*/
|
*/
|
||||||
async insert_blkreportprofit(data) {
|
async insert_blkreportprofit(data) {
|
||||||
try {
|
try {
|
||||||
@@ -179,8 +179,8 @@ class Distribution extends Init {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验昨日是否有漏掉报块的情况
|
* 校验昨日是否有漏掉报块的情况
|
||||||
* @param {Date} date 当前时间
|
* @param {Date} date 当前时间
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
async check_last_data_blk(date) {
|
async check_last_data_blk(date) {
|
||||||
try {
|
try {
|
||||||
@@ -196,8 +196,9 @@ class Distribution extends Init {
|
|||||||
}
|
}
|
||||||
const heights = [];
|
const heights = [];
|
||||||
const query_blk_pool_sql = `SELECT height FROM ${table_name} WHERE DATE(date) >= ?;`;
|
const query_blk_pool_sql = `SELECT height FROM ${table_name} WHERE DATE(date) >= ?;`;
|
||||||
const [master_data, slave_data] = await Promise.all([this.pooldb.exec(query_blk_pool_sql, [yMd]), this.pooldb_slave.exec(`SELECT height FROM ${this.coin}_pool_blkstats WHERE DATE(date) >= ?;`, [yMd])])
|
// const [master_data, slave_data] = await Promise.all([this.pooldb.exec(query_blk_pool_sql, [yMd]), this.pooldb_slave.exec(`SELECT height FROM ${this.coin}_pool_blkstats WHERE DATE(date) >= ?;`, [yMd])])
|
||||||
const pool_data = master_data.concat(slave_data);
|
// const pool_data = master_data.concat(slave_data);
|
||||||
|
const pool_data = await this.pooldb.exec(query_blk_pool_sql, [yMd]);
|
||||||
for (let item of pool_data) {
|
for (let item of pool_data) {
|
||||||
heights.push(item.height);
|
heights.push(item.height);
|
||||||
}
|
}
|
||||||
@@ -235,15 +236,15 @@ class Distribution extends Init {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新wallet_in表中不满足起付额的用户状态
|
* 更新wallet_in表中不满足起付额的用户状态
|
||||||
* @param {Array} min_amount [{"user": amount}]
|
* @param {Array} min_amount [{"user": amount}]
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
async update_state(min_amount) {
|
async update_state(min_amount) {
|
||||||
try {
|
try {
|
||||||
const sql = `SELECT user, SUM(amount) AS profit FROM wallet_in WHERE coin = ? AND state = ? GROUP BY user;`;
|
const sql = `SELECT user, SUM(amount) AS profit FROM wallet_in WHERE coin = ? AND state = ? GROUP BY user;`;
|
||||||
const data = await this.distributiondb.exec(sql, [this.coin, 2]); // []
|
const data = await this.distributiondb.exec(sql, [this.coin, 2]); // []
|
||||||
if (!data || data.length === 0) {
|
if (!data || data.length === 0) {
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
const need_update_state = [];
|
const need_update_state = [];
|
||||||
for (let item of data) {
|
for (let item of data) {
|
||||||
@@ -268,10 +269,10 @@ class Distribution extends Init {
|
|||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将最终分配数据插入wallet_in表中
|
* 将最终分配数据插入wallet_in表中
|
||||||
* @param {Array} data [{coin, user, address, create_date, should_out_date, max_height, amount, state}]
|
* @param {Array} data [{coin, user, address, create_date, should_out_date, max_height, amount, state}]
|
||||||
*/
|
*/
|
||||||
async insert_wallet_in(data) {
|
async insert_wallet_in(data) {
|
||||||
try {
|
try {
|
||||||
@@ -294,7 +295,7 @@ class Distribution extends Init {
|
|||||||
if (!_if) {
|
if (!_if) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const check_result = await this.check_last_data_blk(end_time)
|
const check_result = await this.check_last_data_blk(end_time);
|
||||||
if (!check_result) {
|
if (!check_result) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -306,33 +307,39 @@ class Distribution extends Init {
|
|||||||
console.log("users_address:", users_address);
|
console.log("users_address:", users_address);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const reward = (BigInt(last_day_reward[0].reward) * BigInt((1 - this.POOL_FEE) * 10000)) / BigInt(10000);
|
||||||
const min_amount = {};
|
const min_amount = {};
|
||||||
const score_ratio = this.score(last_day_mhs24h, 1);
|
const score_ratio = this.score(last_day_mhs24h, 1);
|
||||||
const reward = Number(last_day_reward[0].reward) * (1 - this.POOL_FEE);
|
|
||||||
const max_height = last_day_reward[0].max_height;
|
const max_height = last_day_reward[0].max_height;
|
||||||
let should_out_date; // 实际转账时间
|
let should_out_date; // 实际转账时间
|
||||||
let accuracy; // user保留小数位数,100为2位,以此类推
|
let accuracy; // user保留小数位数,100为2位,以此类推
|
||||||
let count // pool_account 保留小数位数
|
let count; // pool_account 保留小数位数
|
||||||
if (this.coin === "nexa") {
|
if (this.coin === "nexa") {
|
||||||
should_out_date = Times.utcTime(new Date(end_time).valueOf() + 1000 * 60 * 60 * 24 * 7);
|
should_out_date = Times.utcTime(new Date(end_time).valueOf() + 1000 * 60 * 60 * 24 * 7);
|
||||||
accuracy = 100;
|
accuracy = 100;
|
||||||
count = 2
|
count = 2;
|
||||||
} else if (this.coin === "rxd") {
|
} else if (this.coin === "rxd") {
|
||||||
accuracy = 100;
|
accuracy = 100;
|
||||||
should_out_date = end_time;
|
should_out_date = end_time;
|
||||||
count = 2
|
count = 2;
|
||||||
|
} else if (this.coin === "alph") {
|
||||||
|
accuracy = 0;
|
||||||
|
should_out_date = end_time;
|
||||||
|
count = 0;
|
||||||
} else {
|
} else {
|
||||||
should_out_date = end_time;
|
should_out_date = end_time;
|
||||||
accuracy = 100000000;
|
accuracy = 100000000;
|
||||||
count = 8
|
count = 8;
|
||||||
}
|
}
|
||||||
let user_profit = 0;
|
let user_profit = BigInt(0)
|
||||||
const result = [];
|
const result = [];
|
||||||
let pool_account_address;
|
let pool_account_address;
|
||||||
for (let user in score_ratio) {
|
for (let user in score_ratio) {
|
||||||
const profit = Math.floor(score_ratio[user] * reward * accuracy) / accuracy;
|
// const profit = Math.floor(score_ratio[user] * reward * accuracy) / accuracy;
|
||||||
if(profit === 0){
|
const ratio = Math.round(score_ratio[user] * 10000);
|
||||||
continue
|
const profit = (reward * BigInt(ratio)) / 10000n;
|
||||||
|
if (profit === 0) {
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
user_profit += profit;
|
user_profit += profit;
|
||||||
for (let item of users_address) {
|
for (let item of users_address) {
|
||||||
@@ -373,4 +380,4 @@ class Distribution extends Init {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Distribution;
|
module.exports = Distribution;
|
||||||
|
|||||||
@@ -363,4 +363,39 @@ ON t1.user = t2.user AND t1.miner = t2.miner AND t1.date = t2.max_date;`;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class HashRateNew extends Init {
|
||||||
|
constructor(coin) {
|
||||||
|
const method = "distribution";
|
||||||
|
super(coin, method);
|
||||||
|
this.count = 0
|
||||||
|
}
|
||||||
|
async query_blk_detail_table_name() {
|
||||||
|
try{
|
||||||
|
const sql = `SELECT \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date < NOW() - INTERVAL 5 MINUTE;`
|
||||||
|
const data = await this.sharesdb.exec(sql);
|
||||||
|
let tables = [`${this.coin}_blk_detail`]
|
||||||
|
if(data.length === 0){
|
||||||
|
return tables
|
||||||
|
}
|
||||||
|
for(let item of data){
|
||||||
|
tables.push(`${this.coin}_block_detail_${item.from}_${Math.trunc(item.to - 1)}`)
|
||||||
|
}
|
||||||
|
return tables
|
||||||
|
} catch(err){
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async query_blk_detail(){
|
||||||
|
try{
|
||||||
|
|
||||||
|
} catch(err){
|
||||||
|
throw err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
module.exports = HashRate
|
module.exports = HashRate
|
||||||
|
|
||||||
|
// SELECT COUNT(*)
|
||||||
|
// FROM information_schema.tables
|
||||||
|
// WHERE table_schema = 'alphsharesdb'
|
||||||
|
// AND table_name = 'alph_blk_detail';
|
||||||
@@ -50,7 +50,7 @@ class Report extends Init {
|
|||||||
const values = [];
|
const values = [];
|
||||||
for (let item of data) {
|
for (let item of data) {
|
||||||
const { date, height, hash, reward, fees } = item;
|
const { date, height, hash, reward, fees } = item;
|
||||||
values.push(date, height, hash, reward, fees, 0);
|
values.push(date, height, hash, reward.toString(), fees, 0);
|
||||||
sql += `(?,?,?,?,?,?), `;
|
sql += `(?,?,?,?,?,?), `;
|
||||||
}
|
}
|
||||||
sql = sql.slice(0, -2);
|
sql = sql.slice(0, -2);
|
||||||
@@ -78,7 +78,7 @@ class Report extends Init {
|
|||||||
if (check_result) {
|
if (check_result) {
|
||||||
const block = this.node.block(check_result);
|
const block = this.node.block(check_result);
|
||||||
const { height, hash, time, block_reward, block_fees } = block;
|
const { height, hash, time, block_reward, block_fees } = block;
|
||||||
suc_data.push({ date: Times.utcTime(time * 1000), height, hash, reward: block_reward, fees: block_fees });
|
suc_data.push({ date: Times.utcTime(time * 1000), height, hash, reward: block_reward.toString(), fees: block_fees });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (suc_data.length === 0) {
|
if (suc_data.length === 0) {
|
||||||
|
|||||||
112
src/stat.js
112
src/stat.js
@@ -1,112 +0,0 @@
|
|||||||
const Times = require("../public/times");
|
|
||||||
const Init = require("./init");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* earliest date : 2024-11-26 00:00:00
|
|
||||||
*/
|
|
||||||
class Stats extends Init {
|
|
||||||
constructor(coin) {
|
|
||||||
const method = "stats";
|
|
||||||
super(coin, method);
|
|
||||||
}
|
|
||||||
|
|
||||||
async query_pooldb_mhs24h(date) {
|
|
||||||
try {
|
|
||||||
const yMd = Times.utcTime(new Date(date).valueOf() - 1000 * 60 * 60 * 24).split(" ")[0];
|
|
||||||
const table_date = yMd.replace(/\-/g, "");
|
|
||||||
let table = `${this.coin}_miners_stats_${table_date}`;
|
|
||||||
console.log(table);
|
|
||||||
|
|
||||||
const sql = `SELECT user, SUM(mhs24h) AS mhs24h FROM ${table} WHERE date >= ? AND date <= ? GROUP BY user;`;
|
|
||||||
const start = yMd + " 23:55:00";
|
|
||||||
const end = yMd + " 23:59:59";
|
|
||||||
const data = await this.pooldb.exec(sql, [start, end]);
|
|
||||||
if (data.length === 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const result = [];
|
|
||||||
for (let item of data) {
|
|
||||||
const { user, mhs24h } = item;
|
|
||||||
result.push({ user, mhs24h: Number(mhs24h) });
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
} catch (err) {
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async query_hashratedb_mhs24h(date) {
|
|
||||||
try {
|
|
||||||
const sql = `SELECT user, SUM(mhs24h) AS mhs24h FROM ${this.coin}_mhsv2 WHERE date = ? GROUP BY user;`;
|
|
||||||
const data = await this.hashratedb.exec(sql, [date]);
|
|
||||||
if (!data || data.length === 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const result = [];
|
|
||||||
for (let item of data) {
|
|
||||||
const { user, mhs24h } = item;
|
|
||||||
result.push({ user, mhs24h: Number(mhs24h) });
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
} catch (err) {
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async query_distribution_data(date) {
|
|
||||||
try {
|
|
||||||
const sql = `SELECT user, amount FROM wallet_in WHERE coin = ? AND create_date = ? AND user != "pool_account";`;
|
|
||||||
const data = await this.distribution.exec(sql, [this.coin, date]);
|
|
||||||
if (!data || data.length === 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const result = [];
|
|
||||||
for (let item of data) {
|
|
||||||
const { user, amount } = item;
|
|
||||||
result.push({ user, amount: Number(amount) });
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
} catch (err) {
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
caculate_mhs24h_percent(data) {
|
|
||||||
const totalAmount = data.reduce((acc, item) => acc + item.mhs24h, 0);
|
|
||||||
const result = data.map((item) => ({
|
|
||||||
user: item.user,
|
|
||||||
mhs24h: item.mhs24h,
|
|
||||||
percentage: Number((item.mhs24h / totalAmount).toFixed(4)), // 保留两位小数
|
|
||||||
}));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
caculate_distribution_percent(data) {
|
|
||||||
const totalAmount = data.reduce((acc, item) => acc + item.amount, 0);
|
|
||||||
const result = data.map((item) => ({
|
|
||||||
user: item.user,
|
|
||||||
should_receive: Number((item.amount / 0.95).toFixed(8)),
|
|
||||||
actual_receive: item.amount,
|
|
||||||
percentage: Number(((item.amount / totalAmount)).toFixed(4)), // 保留两位小数
|
|
||||||
}));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
async caculate_user_should_distribution(date) {
|
|
||||||
try {
|
|
||||||
const [user_mhs24h, user_distribution] = await Promise.all([this.query_hashratedb_mhs24h(date), this.query_distribution_data(date)]);
|
|
||||||
const mhs24h_percent = this.caculate_mhs24h_percent(user_mhs24h)
|
|
||||||
const distribution_percent = this.caculate_distribution_percent(user_distribution)
|
|
||||||
let fees = 0
|
|
||||||
for(let item of distribution_percent){
|
|
||||||
const {user, should_receive, actual_receive, percentage} = item
|
|
||||||
fees += should_receive - actual_receive
|
|
||||||
}
|
|
||||||
console.log(fees);
|
|
||||||
} catch (err) {
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = Stats;
|
|
||||||
116
test/caculate.js
116
test/caculate.js
@@ -1,12 +1,108 @@
|
|||||||
const Times = require('../public/times')
|
const fs = require("fs");
|
||||||
const str = "rxd_miners_stats_20241128"
|
const DBPool = require("../lib/mysql");
|
||||||
|
const Cache = require("../lib/redis");
|
||||||
|
const { NEXARPCNode, GRSRPCNode, MONARPCNode, DGBRPCNode, RXDRPCNode, ALPHRPCNode } = require("../lib/node");
|
||||||
|
|
||||||
let sql = `DROP TABLE IF EXISTS `
|
class Init {
|
||||||
const start = new Date("2024-11-28 00:00:00").valueOf()
|
constructor(coin, method) {
|
||||||
for(let i=0; i<70; i++){
|
this.coin = coin;
|
||||||
const t = Times.utcTime(start + i * 86400000)
|
const config = fs.readFileSync(`../config/${coin}.conf`, "utf-8");
|
||||||
const ymd = t.split(" ")[0].replace(/-/g, "")
|
const { master, slave, redis_options, node_options, distribution_conf, MAX_MATURE, REPORT_ADDRESS } = JSON.parse(config);
|
||||||
sql += ``+ `rxd_miners_stats_${ymd},`
|
const { pooldb, sharesdb, distribution, hashrate, users_addresses, balance } = master;
|
||||||
|
const { pooldb_slave, sharesdb_slave } = slave;
|
||||||
|
const { node1, node2 } = node_options;
|
||||||
|
const { redis1 } = redis_options;
|
||||||
|
const { POOL_FEE } = distribution_conf;
|
||||||
|
const node_map = {
|
||||||
|
mona: MONARPCNode,
|
||||||
|
nexa: NEXARPCNode,
|
||||||
|
grs: GRSRPCNode,
|
||||||
|
dgbs: DGBRPCNode,
|
||||||
|
dgbq: DGBRPCNode,
|
||||||
|
dgbo: DGBRPCNode,
|
||||||
|
rxd: RXDRPCNode,
|
||||||
|
alph: ALPHRPCNode,
|
||||||
|
};
|
||||||
|
|
||||||
|
switch (method) {
|
||||||
|
case "hashrate":
|
||||||
|
this.sharesdb = new DBPool(coin, sharesdb);
|
||||||
|
this.sharesdb_slave = new DBPool(coin, sharesdb_slave);
|
||||||
|
this.pooldb = new DBPool(coin, pooldb);
|
||||||
|
this.redis = new Cache(redis1);
|
||||||
|
// this.pooldb_slave = new DBPool(coin, pooldb_slave)
|
||||||
|
this.hashratedb = new DBPool(coin, hashrate);
|
||||||
|
break;
|
||||||
|
case "report":
|
||||||
|
this.REPORT_ADDRESS = REPORT_ADDRESS;
|
||||||
|
this.node = new node_map[coin](node2);
|
||||||
|
this.distribution = new DBPool(coin, distribution);
|
||||||
|
this.redis = new Cache(redis1);
|
||||||
|
break;
|
||||||
|
case "clear":
|
||||||
|
this.pooldb = new DBPool(coin, pooldb);
|
||||||
|
this.sharesdb = new DBPool(coin, sharesdb);
|
||||||
|
this.hashratedb = new DBPool(coin, hashrate);
|
||||||
|
break;
|
||||||
|
case "distribution":
|
||||||
|
this.pooldb = new DBPool(coin, pooldb);
|
||||||
|
this.hashratedb = new DBPool(coin, hashrate);
|
||||||
|
this.distributiondb = new DBPool(coin, distribution);
|
||||||
|
this.users_addresses = new DBPool(coin, users_addresses);
|
||||||
|
this.node = new node_map[coin](node2);
|
||||||
|
this.REPORT_ADDRESS = REPORT_ADDRESS;
|
||||||
|
this.POOL_FEE = POOL_FEE;
|
||||||
|
console.log(`当前手续费率为:${POOL_FEE}`);
|
||||||
|
// this.balance = new DBPool(coin, balance)
|
||||||
|
break;
|
||||||
|
case "balance":
|
||||||
|
this.distribution = new DBPool(coin, distribution);
|
||||||
|
this.balancedb = new DBPool(coin, balance);
|
||||||
|
break;
|
||||||
|
case "confirm":
|
||||||
|
this.MAX_MATURE = MAX_MATURE;
|
||||||
|
this.REPORT_ADDRESS = REPORT_ADDRESS;
|
||||||
|
this.node = new node_map[coin](node2);
|
||||||
|
this.distribution = new DBPool(coin, distribution);
|
||||||
|
this.pooldb = new DBPool(coin, pooldb);
|
||||||
|
break;
|
||||||
|
case "stats":
|
||||||
|
this.pooldb = new DBPool(coin, pooldb);
|
||||||
|
this.hashratedb = new DBPool(coin, hashrate);
|
||||||
|
this.distribution = new DBPool(coin, distribution);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw `暂不支持${method}方法 init`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sleep(ms) {
|
||||||
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sql = sql.slice(0, -1)
|
|
||||||
console.log(sql);
|
const a = new Init("alph", "report")
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
const sql1 = `SELECT height FROM alph_blkreportprofitv2;`
|
||||||
|
const data1 = await a.distribution.exec(sql1)
|
||||||
|
|
||||||
|
let sql = `UPDATE alph_blkreportprofitv2 SET reward = CASE height `
|
||||||
|
const heights = []
|
||||||
|
|
||||||
|
for (let item of data1) {
|
||||||
|
const { height } = item
|
||||||
|
heights.push(height)
|
||||||
|
|
||||||
|
const data = await a.node.verify_block(height, a.REPORT_ADDRESS)
|
||||||
|
const { block_reward } = data
|
||||||
|
|
||||||
|
sql += `WHEN ${height} THEN ${block_reward} `
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ 加上 END 和 WHERE
|
||||||
|
sql += `END WHERE height IN (${heights.join(",")});`
|
||||||
|
|
||||||
|
await a.distribution.exec(sql)
|
||||||
|
}
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user