先行版
This commit is contained in:
475
test/algo.json
Normal file
475
test/algo.json
Normal file
@@ -0,0 +1,475 @@
|
||||
{
|
||||
"lolminer": {
|
||||
"Alephium": {
|
||||
"coins": [
|
||||
"ALPH"
|
||||
],
|
||||
"fee": 0.75
|
||||
},
|
||||
"Autolykos V2": {
|
||||
"coins": [
|
||||
"ERG"
|
||||
],
|
||||
"fee": 1.5
|
||||
},
|
||||
"BeamHash III": {
|
||||
"coins": [
|
||||
"BEAM"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"Cuckoo 29": {
|
||||
"coins": [
|
||||
"GRIN-C29"
|
||||
],
|
||||
"fee": 2.0
|
||||
},
|
||||
"CuckarooD 29": {
|
||||
"coins": [
|
||||
"GRIN-CD29"
|
||||
],
|
||||
"fee": 2.0
|
||||
},
|
||||
"CuckarooM 29": {
|
||||
"coins": [
|
||||
"GRIN-CM29"
|
||||
],
|
||||
"fee": 2.0
|
||||
},
|
||||
"Cuckaroo 30 CTXC": {
|
||||
"coins": [
|
||||
"CTXC"
|
||||
],
|
||||
"fee": 2.5
|
||||
},
|
||||
"Cuckatoo 31": {
|
||||
"coins": [
|
||||
"GRIN-C31"
|
||||
],
|
||||
"fee": 2.0
|
||||
},
|
||||
"Cuckatoo 32": {
|
||||
"coins": [
|
||||
"GRIN-C32"
|
||||
],
|
||||
"fee": 2.0
|
||||
},
|
||||
"Cuckaroo 29-32": {
|
||||
"coins": [
|
||||
"GRIN-C29-32"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"Cuckaroo 29-40": {
|
||||
"coins": [
|
||||
"GRIN-C29-40"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"Dual ETC + (KAS/ALEPH)": {
|
||||
"coins": [
|
||||
"ETC",
|
||||
"ALPH/KAS"
|
||||
],
|
||||
"fee": "1.0 / 0.0"
|
||||
},
|
||||
"Dual ETH (ETHW) + (KAS/ALEPH)": {
|
||||
"coins": [
|
||||
"ETHW",
|
||||
"ALPH/KAS"
|
||||
],
|
||||
"fee": "1.0 / 0.0"
|
||||
},
|
||||
"Dual RTH + (ALEPH/GRAM/KLS/PYI/RXD)": {
|
||||
"coins": [
|
||||
"RTH",
|
||||
"ALPH/GRAM/KLS/PYI/RXD"
|
||||
],
|
||||
"fee": "1.0 / 0.75 - 1.0"
|
||||
},
|
||||
"Dual IRON + (ALEPH/GRAM/KLS/PYI/RXD)": {
|
||||
"coins": [
|
||||
"IRON",
|
||||
"ALPH/GRAM/KLS/PYI/RXD"
|
||||
],
|
||||
"fee": "1.0 / 0.75 - 1.0"
|
||||
},
|
||||
"Equihash 144/5": {
|
||||
"coins": [
|
||||
"EQUIHASH144/5"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"Equihash 192/7": {
|
||||
"coins": [
|
||||
"EQUIHASH192/7"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"Equihash 210/9": {
|
||||
"coins": [
|
||||
"EQUIHASH210/9"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"Etchash": {
|
||||
"coins": [
|
||||
"ETC"
|
||||
],
|
||||
"fee": 0.7
|
||||
},
|
||||
"Ethash (ETHW)": {
|
||||
"coins": [
|
||||
"ETHW"
|
||||
],
|
||||
"fee": 0.7
|
||||
},
|
||||
"Ironfish": {
|
||||
"coins": [
|
||||
"IRON"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"Kaspa": {
|
||||
"coins": [
|
||||
"KAS"
|
||||
],
|
||||
"fee": 0.75
|
||||
},
|
||||
"Karlsen": {
|
||||
"coins": [
|
||||
"KLS"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"Nexa": {
|
||||
"coins": [
|
||||
"NEXA"
|
||||
],
|
||||
"fee": 2.0
|
||||
},
|
||||
"Pyrin": {
|
||||
"coins": [
|
||||
"PYI"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"Radiant": {
|
||||
"coins": [
|
||||
"RAD"
|
||||
],
|
||||
"fee": 0.75
|
||||
},
|
||||
"Rethereum": {
|
||||
"coins": [
|
||||
"RTH"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"TON/GRAM": {
|
||||
"coins": [
|
||||
"TON",
|
||||
"GRAM"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"ZelHash (Flux)": {
|
||||
"coins": [
|
||||
"FLUX"
|
||||
],
|
||||
"fee": "1.0 / 1.5"
|
||||
}
|
||||
},
|
||||
"bzminer": {
|
||||
"aidepin": {
|
||||
"coins": [
|
||||
"AI-DEPIN"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"aipg": {
|
||||
"coins": [
|
||||
"AIPG"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"alph": {
|
||||
"coins": [
|
||||
"ALPH"
|
||||
],
|
||||
"fee": 0.5
|
||||
},
|
||||
"blocx": {
|
||||
"coins": [
|
||||
"BLOX"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"clore": {
|
||||
"coins": [
|
||||
"CLORE"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"canxium": {
|
||||
"coins": [
|
||||
"CANXIUM"
|
||||
],
|
||||
"fee": 0.5
|
||||
},
|
||||
"dynex": {
|
||||
"coins": [
|
||||
"DNX"
|
||||
],
|
||||
"fee": 2.0
|
||||
},
|
||||
"ergo": {
|
||||
"coins": [
|
||||
"ERG"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"etchash": {
|
||||
"coins": [
|
||||
"ETC"
|
||||
],
|
||||
"fee": 0.5
|
||||
},
|
||||
"ethw": {
|
||||
"coins": [
|
||||
"ETHW"
|
||||
],
|
||||
"fee": 0.5
|
||||
},
|
||||
"gamepass": {
|
||||
"coins": [
|
||||
"GAMEPASS"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"ironfish": {
|
||||
"coins": [
|
||||
"IRON"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"ixi": {
|
||||
"coins": [
|
||||
"IXI"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"karlsen": {
|
||||
"coins": [
|
||||
"KLS"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"kaspa": {
|
||||
"coins": [
|
||||
"KAS"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"neoxa": {
|
||||
"coins": [
|
||||
"NEOX"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"nexa": {
|
||||
"coins": [
|
||||
"NEXA"
|
||||
],
|
||||
"fee": 2.0
|
||||
},
|
||||
"novo": {
|
||||
"coins": [
|
||||
"NOVO"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"meowcoin": {
|
||||
"coins": [
|
||||
"MEOW"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"octa": {
|
||||
"coins": [
|
||||
"OCTA"
|
||||
],
|
||||
"fee": 0.5
|
||||
},
|
||||
"olhash": {
|
||||
"coins": [
|
||||
"OLHASH"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"radiant": {
|
||||
"coins": [
|
||||
"RAD"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"rethereum": {
|
||||
"coins": [
|
||||
"RTH"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"rvn": {
|
||||
"coins": [
|
||||
"RVN"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"warthog": {
|
||||
"coins": [
|
||||
"WARTHOG"
|
||||
],
|
||||
"fee": 2.0
|
||||
},
|
||||
"woodcoin": {
|
||||
"coins": [
|
||||
"WOOD"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"xna": {
|
||||
"coins": [
|
||||
"XNA"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"zil": {
|
||||
"coins": [
|
||||
"ZIL"
|
||||
],
|
||||
"fee": 0.0
|
||||
}
|
||||
},
|
||||
"rigel": {
|
||||
"abelian": {
|
||||
"coins": [
|
||||
"ABEL"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"alephium": {
|
||||
"coins": [
|
||||
"ALPH"
|
||||
],
|
||||
"fee": 0.7
|
||||
},
|
||||
"autolykos2": {
|
||||
"coins": [
|
||||
"ERG"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"etchash": {
|
||||
"coins": [
|
||||
"ETC"
|
||||
],
|
||||
"fee": 0.7
|
||||
},
|
||||
"ethash": {
|
||||
"coins": [
|
||||
"ETHW",
|
||||
"XPB",
|
||||
"OCTA"
|
||||
],
|
||||
"fee": 0.7
|
||||
},
|
||||
"ethashb3": {
|
||||
"coins": [
|
||||
"HYP"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"fishhash": {
|
||||
"coins": [
|
||||
"IRON"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"karlsenhashv2": {
|
||||
"coins": [
|
||||
"KLS"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"kawpow": {
|
||||
"coins": [
|
||||
"RVN",
|
||||
"AIPG",
|
||||
"XNA",
|
||||
"CLORE",
|
||||
"NEOX"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"nexapow": {
|
||||
"coins": [
|
||||
"NEXA"
|
||||
],
|
||||
"fee": 2.0
|
||||
},
|
||||
"octopus": {
|
||||
"coins": [
|
||||
"CFX"
|
||||
],
|
||||
"fee": 2.0
|
||||
},
|
||||
"progpowz": {
|
||||
"coins": [
|
||||
"ZANO"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"quai": {
|
||||
"coins": [
|
||||
"QUAI"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"sha256ton": {
|
||||
"coins": [
|
||||
"GRAM"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"sha3x": {
|
||||
"coins": [
|
||||
"XTM"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"sha512256d": {
|
||||
"coins": [
|
||||
"RXD"
|
||||
],
|
||||
"fee": 1.0
|
||||
},
|
||||
"xelishash": {
|
||||
"coins": [
|
||||
"XEL"
|
||||
],
|
||||
"fee": 3.0
|
||||
},
|
||||
"xelishashv2": {
|
||||
"coins": [
|
||||
"XEL"
|
||||
],
|
||||
"fee": 2.0
|
||||
},
|
||||
"zil": {
|
||||
"coins": [
|
||||
"ZIL"
|
||||
],
|
||||
"fee": 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
46
test/auth.machineCode.json
Normal file
46
test/auth.machineCode.json
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"id": "2060 Super X8\n.03000200-0400-0500-0006-000700080009",
|
||||
"method": "auth.machineCode",
|
||||
"params": {
|
||||
"0": {
|
||||
"brand": "NVIDIA",
|
||||
"model": "NVIDIA GeForce RTX 2060 SUPER",
|
||||
"mem": 8192
|
||||
},
|
||||
"1": {
|
||||
"brand": "NVIDIA",
|
||||
"model": "NVIDIA GeForce RTX 2060 SUPER",
|
||||
"mem": 8192
|
||||
},
|
||||
"2": {
|
||||
"brand": "NVIDIA",
|
||||
"model": "NVIDIA GeForce RTX 2060 SUPER",
|
||||
"mem": 8192
|
||||
},
|
||||
"3": {
|
||||
"brand": "NVIDIA",
|
||||
"model": "NVIDIA GeForce RTX 2060 SUPER",
|
||||
"mem": 8192
|
||||
},
|
||||
"4": {
|
||||
"brand": "NVIDIA",
|
||||
"model": "NVIDIA GeForce RTX 2060 SUPER",
|
||||
"mem": 8192
|
||||
},
|
||||
"5": {
|
||||
"brand": "NVIDIA",
|
||||
"model": "NVIDIA GeForce RTX 2060 SUPER",
|
||||
"mem": 8192
|
||||
},
|
||||
"6": {
|
||||
"brand": "NVIDIA",
|
||||
"model": "NVIDIA GeForce RTX 2060 SUPER",
|
||||
"mem": 8192
|
||||
},
|
||||
"7": {
|
||||
"brand": "NVIDIA",
|
||||
"model": "NVIDIA GeForce RTX 2060 SUPER",
|
||||
"mem": 8192
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
test/client.exe
Normal file
BIN
test/client.exe
Normal file
Binary file not shown.
70
test/draft_script
Normal file
70
test/draft_script
Normal file
@@ -0,0 +1,70 @@
|
||||
str := "#!/bin/bash\n"
|
||||
str += "POOL=" + cfg.PoolUrl + "\n"
|
||||
str += "WALLET=" + cfg.WalletAddress + "." + cfg.WorkerID + "\n"
|
||||
str += "ALGO=" + cfg.Algo + "\n"
|
||||
str += "END_TIMESTAMP=" + strconv.FormatUint(cfg.EndTimestamp, 10) + "\n"
|
||||
str += "\n"
|
||||
str += "# 在后台启动挖矿程序\n"
|
||||
str += "./lolMiner --algo $ALGO --pool $POOL --user $WALLET $@ &\n"
|
||||
str += "MINER_PID=$!\n"
|
||||
str += "\n"
|
||||
str += "# 循环检查时间戳,直到超过结束时间\n"
|
||||
str += "while true; do\n"
|
||||
str += " CURRENT_TIMESTAMP=$(date +%s)\n"
|
||||
str += " if [ $CURRENT_TIMESTAMP -ge $END_TIMESTAMP ]; then\n"
|
||||
str += " echo \"时间戳已超过结束时间,退出挖矿脚本\"\n"
|
||||
str += " kill $MINER_PID 2>/dev/null\n"
|
||||
str += " wait $MINER_PID 2>/dev/null\n"
|
||||
str += " exit 0\n"
|
||||
str += " fi\n"
|
||||
str += " sleep 10\n"
|
||||
str += "done\n"
|
||||
|
||||
|
||||
|
||||
str := "#!/bin/bash\n"
|
||||
str += "POOL=" + cfg.PoolUrl + "\n"
|
||||
str += "WALLET=" + cfg.WalletAddress + "." + cfg.WorkerID + "\n"
|
||||
str += "ALGO=" + cfg.Algo + "\n"
|
||||
str += "END_TIMESTAMP=" + strconv.FormatUint(cfg.EndTimestamp, 10) + "\n"
|
||||
str += "\n"
|
||||
str += "# 在后台启动挖矿程序\n"
|
||||
str += "./bzminer -a $ALGO -w $WALLET -p $POOL\n"
|
||||
str += "MINER_PID=$!\n"
|
||||
str += "\n"
|
||||
str += "# 循环检查时间戳,直到超过结束时间\n"
|
||||
str += "while true; do\n"
|
||||
str += " CURRENT_TIMESTAMP=$(date +%s)\n"
|
||||
str += " if [ $CURRENT_TIMESTAMP -ge $END_TIMESTAMP ]; then\n"
|
||||
str += " echo \"时间戳已超过结束时间,退出挖矿脚本\"\n"
|
||||
str += " kill $MINER_PID 2>/dev/null\n"
|
||||
str += " wait $MINER_PID 2>/dev/null\n"
|
||||
str += " exit 0\n"
|
||||
str += " fi\n"
|
||||
str += " sleep 10\n"
|
||||
str += "done\n"
|
||||
|
||||
|
||||
|
||||
str := "#!/bin/bash\n"
|
||||
str += "POOL=" + cfg.PoolUrl + "\n"
|
||||
str += "WALLET=" + cfg.WalletAddress + "\n"
|
||||
str += "USER=" + cfg.WorkerID + "\n"
|
||||
str += "ALGO=" + cfg.Algo + "\n"
|
||||
str += "END_TIMESTAMP=" + strconv.FormatUint(cfg.EndTimestamp, 10) + "\n"
|
||||
str += "\n"
|
||||
str += "# 在后台启动挖矿程序\n"
|
||||
str += "./rigel -a $ALGO -o $POOL -u $WALLET -w $USER --log-file logs/miner.log\n"
|
||||
str += "MINER_PID=$!\n"
|
||||
str += "\n"
|
||||
str += "# 循环检查时间戳,直到超过结束时间\n"
|
||||
str += "while true; do\n"
|
||||
str += " CURRENT_TIMESTAMP=$(date +%s)\n"
|
||||
str += " if [ $CURRENT_TIMESTAMP -ge $END_TIMESTAMP ]; then\n"
|
||||
str += " echo \"时间戳已超过结束时间,退出挖矿脚本\"\n"
|
||||
str += " kill $MINER_PID 2>/dev/null\n"
|
||||
str += " wait $MINER_PID 2>/dev/null\n"
|
||||
str += " exit 0\n"
|
||||
str += " fi\n"
|
||||
str += " sleep 10\n"
|
||||
str += "done\n"
|
||||
12
test/mining.linux.conf
Normal file
12
test/mining.linux.conf
Normal file
@@ -0,0 +1,12 @@
|
||||
#请确认您的主机上安装了下列挖矿软件,确认后可以打开注释,并修改其路径,如果没有安装,请勿打开注释
|
||||
[bzminer]
|
||||
# path=/path/bzminer
|
||||
[lolminer]
|
||||
# path=/home/a11/桌面/lolminer/1.98
|
||||
[rigel]
|
||||
# path=/path/rigel
|
||||
|
||||
#如果您的网络无法直接连通各个矿池,需要使用各大矿池专用网咯,请打开proxy的注释
|
||||
#打开此注释后会使用各大矿池的专用网络,每笔订单额外增加1%的网络费用
|
||||
[proxy]
|
||||
# proxy=true
|
||||
13
test/mining.windows.conf
Normal file
13
test/mining.windows.conf
Normal file
@@ -0,0 +1,13 @@
|
||||
#请确认您的主机上安装了下列挖矿软件,确认后可以打开注释,并修改其路径,如果没有安装,请勿打开注释
|
||||
#请使用双\\,否则可能无法解析出准确的路径
|
||||
[bzminer]
|
||||
# path=C:\\path\\bzminer
|
||||
[lolminer]
|
||||
# path=C:\\path\\lolminer
|
||||
[rigel]
|
||||
# path=C:\\path\\rigel
|
||||
|
||||
#如果您的网络无法直接连通各个矿池,需要使用各大矿池专用网咯,请打开proxy的注释
|
||||
#打开此注释后会使用各大矿池的专用网络,每笔订单额外增加1%的网络费用
|
||||
[proxy]
|
||||
# proxy=true
|
||||
108
test/pool.json
Normal file
108
test/pool.json
Normal file
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"DxPool": {
|
||||
"wallet_mining": false,
|
||||
"coins": {"GPU": ["XTM", "ERG"], "ASIC": []},
|
||||
"XTM": {"full_name": "Tari(XTM)", "algos": ["SHA3X"], "pay_interval": 24, "min_pay": 100, "model_fee": {"PROP": 0.03}, "mining_url": {"tcp": {"GPU": "xtm.ss.dxpool.com:3301", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"ERG": {"full_name": "Ergo", "algos": ["Autolykos2"], "pay_interval": "10:00~12:00 (UTC+8)", "min_pay": 1, "model_fee": {"PPS": 0.025}, "mining_url": {"tcp": {"GPU": "erg.ss.dxpool.com:8888", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""}
|
||||
},
|
||||
"pool.kryptex": {
|
||||
"wallet_mining": true,
|
||||
"coins": {"GPU": ["XTM", "XNA", "CLORE", "CFX", "IRON", "NEXA", "KLS", "RVN", "ERG", "XEL"], "ASIC": []},
|
||||
"XTM": {"full_name": "Tari(XTM)", "algos": ["SHA3X"], "pay_interval": -1, "min_pay": 200, "model_fee": {"PROP": 0.01, "SOLO": 0.01}, "mining_url": {"tcp": {"GPU": "xtm-sha3x-sg.kryptex.network:7039", "ASIC": ""}, "ssl": {"GPU": "xtm-sha3x-sg.kryptex.network:8039", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"XNA": {"full_name": "Neurai", "algos": ["KawPow"], "pay_interval": -1, "min_pay": 100, "model_fee": {"PROP": 0.01, "SOLO": 0.01}, "mining_url": {"tcp": {"GPU": "xna-sg.kryptex.network:7024", "ASIC": ""}, "ssl": {"GPU": "xna-sg.kryptex.network:8024", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"CLORE": {"full_name": "Clore.ai", "algos": ["KawPow"], "pay_interval": -1, "min_pay": 5, "model_fee": {"PROP": 0.01, "SOLO": 0.01}, "mining_url": {"tcp": {"GPU": "clore-sg.kryptex.network:7025", "ASIC": ""}, "ssl": {"GPU": "clore-sg.kryptex.network:8025", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"CFX": {"full_name": "Conflux", "algos": ["Octopus"], "pay_interval": -1, "min_pay": 1, "model_fee": {"PPS+": 0.01, "SOLO": 0.01}, "mining_url": {"tcp": {"GPU": "cfx-sg.kryptex.network:7027", "ASIC": ""}, "ssl": {"GPU": "cfx-sg.kryptex.network:8027", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"IRON": {"full_name": "Iron Fish", "algos": ["IronFish"], "pay_interval": -1, "min_pay": 0.1, "model_fee": {"PPS+": 0.01, "SOLO": 0.01}, "mining_url": {"tcp": {"GPU": "iron-sg.kryptex.network:7017", "ASIC": ""}, "ssl": {"GPU": "iron-sg.kryptex.network:8017", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"NEXA": {"full_name": "Nexa", "algos": ["NexaPow"], "pay_interval": -1, "min_pay": 20000, "model_fee": {"PPS+": 0.03, "SOLO": 0.01}, "mining_url": {"tcp": {"GPU": "nexa-sg.kryptex.network:7026", "ASIC": ""}, "ssl": {"GPU": "nexa-sg.kryptex.network:8026", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"KLS": {"full_name": "Karlsen", "algos": ["KarlsenHash"], "pay_interval": -1, "min_pay": 10, "model_fee": {"PROP": 0.01, "SOLO": 0.01}, "mining_url": {"tcp": {"GPU": "kls-sg.kryptex.network:7022", "ASIC": ""}, "ssl": {"GPU": "kls-sg.kryptex.network:8022", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"RVN": {"full_name": "Ravencoin", "algos": ["KawPow"], "pay_interval": -1, "min_pay": 10, "model_fee": {"PPS+": 0.01}, "mining_url": {"tcp": {"GPU": "rvn-sg.kryptex.network:7031", "ASIC": ""}, "ssl": {"GPU": "rvn-sg.kryptex.network:8031", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"ERG": {"full_name": "Ergo", "algos": ["Autolykos"], "pay_interval": -1, "min_pay": 1, "model_fee": {"PPS+": 0.01, "SOLO": 0.01}, "mining_url": {"tcp": {"GPU": "erg-sg.kryptex.network:7021", "ASIC": ""}, "ssl": {"GPU": "erg-sg.kryptex.network:8021", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"XEL": {"full_name": "Xelis", "algos": ["Xelishashv2"], "pay_interval": -1, "min_pay": 0.1, "model_fee": {"PROP": 0.01, "SOLO": 0.01}, "mining_url": {"tcp": {"GPU": "xel-sg.kryptex.network:7019", "ASIC": ""}, "ssl": {"GPU": "xel-sg.kryptex.network:8019", "ASIC": ""}}, "hashrate_url": ""}
|
||||
},
|
||||
"2miners": {
|
||||
"wallet_mining": true,
|
||||
"coins": {"GPU": ["XNA", "CLORE", "NEXA", "RVN", "ERG"], "ASIC": []},
|
||||
"XNA": {"full_name": "Neurai", "algos": ["KawPOW"], "pay_interval": 2, "min_pay": 1000, "model_fee": {"PPLNS": 0.01, "SOLO": 0.015}, "mining_url": {"tcp": {"GPU": "xna.2miners.com:6060", "ASIC": ""}, "ssl": {"GPU": "xna.2miners.com:16060", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"CLORE": {"full_name": "Clore.ai", "algos": ["KawPOW"], "pay_interval": 2, "min_pay": 10, "model_fee": {"PPLNS": 0.01, "SOLO": 0.015}, "mining_url": {"tcp": {"GPU": "clore.2miners.com:2020", "ASIC": ""}, "ssl": {"GPU": "clore.2miners.com:12020", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"NEXA": {"full_name": "Nexa", "algos": ["NexaPow"], "pay_interval": 2, "min_pay": 50000, "model_fee": {"PPLNS": 0.01, "SOLO": 0.015}, "mining_url": {"tcp": {"GPU": "nexa.2miners.com:5050", "ASIC": ""}, "ssl": {"GPU": "nexa.2miners.com:15050", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"RVN": {"full_name": "Ravencoin", "algos": ["KawPOW"], "pay_interval": 2, "min_pay": 10, "model_fee": {"PPLNS": 0.01, "SOLO": 0.015}, "mining_url": {"tcp": {"GPU": "asia-rvn.2miners.com:6060", "ASIC": ""}, "ssl": {"GPU": "asia-rvn.2miners.com:16060", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"ERG": {"full_name": "Ergo", "algos": ["Autolykos"], "pay_interval": 2, "min_pay": 1, "model_fee": {"PPLNS": 0.01, "SOLO": 0.015}, "mining_url": {"tcp": {"GPU": "asia-erg.2miners.com:8888", "ASIC": ""}, "ssl": {"GPU": "asia-erg.2miners.com:18888", "ASIC": ""}}, "hashrate_url": ""}
|
||||
},
|
||||
"vipor.net": {
|
||||
"wallet_mining": true,
|
||||
"coins": {"GPU": ["XNA", "CLORE", "NEXA", "XEL"], "ASIC": []},
|
||||
"XNA": {"full_name": "Neurai", "algos": ["KawPOW"], "pay_interval": 1, "min_pay": 1, "model_fee": {"PPLNS": 0.008, "SOLO": 0.008}, "mining_url": {"tcp": {"GPU": "cn.vipor.net:5090", "ASIC": ""}, "ssl": {"GPU": "cn.vipor.net:5190", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"CLORE": {"full_name": "Clore.ai", "algos": ["KawPOW"], "pay_interval": 1, "min_pay": 1, "model_fee": {"PPLNS": 0.008, "SOLO": 0.008}, "mining_url": {"tcp": {"GPU": "cn.vipor.net:5030", "ASIC": ""}, "ssl": {"GPU": "cn.vipor.net:5130", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"NEXA": {"full_name": "Nexa", "algos": ["NexaPow"], "pay_interval": 1, "min_pay": 5000, "model_fee": {"PPLNS": 0.01, "SOLO": 0.01}, "mining_url": {"tcp": {"GPU": "cn.vipor.net:5084", "ASIC": ""}, "ssl": {"GPU": "cn.vipor.net:5184", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"XEL": {"full_name": "Xelis", "algos": ["XelisHashV2"], "pay_interval": 1, "min_pay": 0.05, "model_fee": {"PPLNS": 0.008, "SOLO": 0.008}, "mining_url": {"tcp": {"GPU": "cn.vipor.net:5077", "ASIC": ""}, "ssl": {"GPU": "cn.vipor.net:5177", "ASIC": ""}}, "hashrate_url": ""}
|
||||
},
|
||||
"herominers": {
|
||||
"wallet_mining": true,
|
||||
"coins": {"GPU": ["CLORE", "CFX", "IRON", "KLS", "RVN", "ERG", "XEL"], "ASIC": []},
|
||||
"CLORE": {"full_name": "Clore.ai", "algos": ["KawPow"], "pay_interval": 1, "min_pay": 10, "model_fee": {"PROP": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "hk.clore.herominers.com:1163", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"CFX": {"full_name": "Conflux", "algos": ["Octopus"], "pay_interval": 1, "min_pay": 1, "model_fee": {"PROP": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "hk.conflux.herominers.com:1170", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"IRON": {"full_name": "Iron Fish", "algos": ["FishHash"], "pay_interval": 1, "min_pay": 0.05, "model_fee": {"PROP": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "hk.ironfish.herominers.com:1145", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"KLS": {"full_name": "Karlsen", "algos": ["KarlsenHashv2"], "pay_interval": 1, "min_pay": 1, "model_fee": {"PROP": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "hk.karlsen.herominers.com:1195", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"RVN": {"full_name": "Ravencoin", "algos": ["KawPow"], "pay_interval": 1, "min_pay": 5, "model_fee": {"PROP": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "hk.ravencoin.herominers.com:1140", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"ERG": {"full_name": "Ergo", "algos": ["Autolykos v2"], "pay_interval": 1, "min_pay": 0.5, "model_fee": {"PROP": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "hk.ergo.herominers.com:1180", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"XEL": {"full_name": "Xelis", "algos": ["Xelishashv2"], "pay_interval": 1, "min_pay": 0.1, "model_fee": {"PROP": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "hk.xelis.herominers.com:1225", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""}
|
||||
},
|
||||
"rplant.xyz": {
|
||||
"wallet_mining": true,
|
||||
"coins": {"GPU": ["CLORE", "NEXA"], "ASIC": []},
|
||||
"CLORE": {"full_name": "Clore.ai", "algos": ["kawpow"], "pay_interval": 1, "min_pay": 1, "model_fee": {"PROP": 0.01, "SOLO": 0.02}, "mining_url": {"tcp": {"GPU": "asia.rplant.xyz:17083", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"NEXA": {"full_name": "Nexa", "algos": ["nexapow"], "pay_interval": 2, "min_pay": 5000, "model_fee": {"PROP": 0.009, "SOLO": 0.018}, "mining_url": {"tcp": {"GPU": "asia.rplant.xyz:17092", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""}
|
||||
},
|
||||
"f2pool": {
|
||||
"wallet_mining": false,
|
||||
"coins": {"GPU": ["CFX", "NEXA"], "ASIC": []},
|
||||
"CFX": {"full_name": "Conflux", "algos": ["Octopus"], "pay_interval": "00:00--08:00 UTC", "min_pay": 1, "model_fee": {"PPLNS": 0.01}, "mining_url": {"tcp": {"GPU": "cfx.f2pool.com:6800", "ASIC": ""}, "ssl": {"GPU": "cfxssl.f2pool.com:6820", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"NEXA": {"full_name": "Nexa", "algos": ["NexaPow"], "pay_interval": "00:00--08:00 UTC", "min_pay": 50000, "model_fee": {"PPLNS": 0.01}, "mining_url": {"tcp": {"GPU": "nexa.f2pool.com:3400", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""}
|
||||
},
|
||||
"ntminerpool": {
|
||||
"wallet_mining": true,
|
||||
"coins": {"GPU": ["CLORE", "CFX", "IRON", "NEXA", "KLS", "RVN", "ERG"], "ASIC": []},
|
||||
"CLORE": {"full_name": "Clore.ai", "algos": ["KawPow"], "pay_interval": 24, "min_pay": 10, "model_fee": {"PPLNS": 0}, "mining_url": {"tcp": {"GPU": "clore.ntminer.vip:13688", "ASIC": ""}, "ssl": {"GPU": "clore.ntminer.vip:13699", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"CFX": {"full_name": "Conflux", "algos": ["Octopus"], "pay_interval": 24, "min_pay": 100, "model_fee": {"PPS+": 0.005}, "mining_url": {"tcp": {"GPU": "cfx.ntminer.vip:26060", "ASIC": ""}, "ssl": {"GPU": "cfx.ntminer.vip:25050", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"IRON": {"full_name": "IronFish", "algos": ["FishHash"], "pay_interval": 24, "min_pay": 0.05, "model_fee": {"PPS+": 0}, "mining_url": {"tcp": {"GPU": "iron.ntminer.vip:9688", "ASIC": ""}, "ssl": {"GPU": "iron.ntminer.vip:9699", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"NEXA": {"full_name": "Nexa", "algos": ["NexaPow"], "pay_interval": 24, "min_pay": 50000, "model_fee": {"PPLNS": 0}, "mining_url": {"tcp": {"GPU": "nexa.ntminer.vip:14688", "ASIC": ""}, "ssl": {"GPU": "nexa.ntminer.vip:14699", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"KLS": {"full_name": "Karlsen", "algos": ["KarlsenHashv2"], "pay_interval": 24, "min_pay": 10, "model_fee": {"PPLNS": 0}, "mining_url": {"tcp": {"GPU": "kls.ntminer.vip:8699", "ASIC": ""}, "ssl": {"GPU": "kls.ntminer.vip:8688", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"RVN": {"full_name": "Ravencoin", "algos": ["KawPow"], "pay_interval": 24, "min_pay": 10, "model_fee": {"PPS+": 0}, "mining_url": {"tcp": {"GPU": "rvn.ntminer.vip:22020", "ASIC": ""}, "ssl": {"GPU": "rvn.ntminer.vip:21010", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"ERG": {"full_name": "Ergo", "algos": ["Autolykos2"], "pay_interval": 24, "min_pay": 1, "model_fee": {"PPS+": 0}, "mining_url": {"tcp": {"GPU": "ergo.ntminer.vip:24040", "ASIC": ""}, "ssl": {"GPU": "ergo.ntminer.vip:23030", "ASIC": ""}}, "hashrate_url": ""}
|
||||
},
|
||||
"woolypooly": {
|
||||
"wallet_mining": true,
|
||||
"coins": {"GPU": ["XNA","CLORE","CFX","NEXA","KLS","RVN","ERG","XEL"], "ASIC": []},
|
||||
"XNA": {"full_name": "Neurai", "algos": ["KawPow"], "pay_interval": -1, "min_pay": 1000, "model_fee": {"PPLNS": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "pool.zh.woolypooly.com:3128", "ASIC": ""}, "ssl": {"GPU": "pool.zh.woolypooly.com:3128", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"CLORE": {"full_name": "Clore.ai", "algos": ["KawPow"], "pay_interval": -1, "min_pay": 10, "model_fee": {"PPLNS": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "pool.zh.woolypooly.com:3126", "ASIC": ""}, "ssl": {"GPU": "pool.zh.woolypooly.com:3126", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"CFX": {"full_name": "Conflux", "algos": ["Octopus"], "pay_interval": -1, "min_pay": 1, "model_fee": {"PPLNS": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "pool.zh.woolypooly.com:3094", "ASIC": ""}, "ssl": {"GPU": "pool.zh.woolypooly.com:3094", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"NEXA": {"full_name": "Nexa", "algos": ["NexaPow"], "pay_interval": -1, "min_pay": 50000, "model_fee": {"PPLNS": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "pool.zh.woolypooly.com:3124", "ASIC": ""}, "ssl": {"GPU": "pool.zh.woolypooly.com:3124", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"KLS": {"full_name": "Karlsen", "algos": ["KarlsenV2"], "pay_interval": -1, "min_pay": 25, "model_fee": {"PPLNS": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "pool.zh.woolypooly.com:3132", "ASIC": ""}, "ssl": {"GPU": "pool.zh.woolypooly.com:3132", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"RVN": {"full_name": "Ravencoin", "algos": ["kawpow"], "pay_interval": -1, "min_pay": 5, "model_fee": {"PPLNS": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "pool.zh.woolypooly.com:55555", "ASIC": ""}, "ssl": {"GPU": "pool.zh.woolypooly.com:55555", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"ERG": {"full_name": "Ergo", "algos": ["Autolykos"], "pay_interval": -1, "min_pay": 1, "model_fee": {"PPLNS": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "pool.zh.woolypooly.com:3100", "ASIC": ""}, "ssl": {"GPU": "pool.zh.woolypooly.com:3100", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"XEL": {"full_name": "Xelis", "algos": ["Xelishash"], "pay_interval": -1, "min_pay": 0.1, "model_fee": {"PPLNS": 0.009, "SOLO": 0.009}, "mining_url": {"tcp": {"GPU": "pool.zh.woolypooly.com:3150", "ASIC": ""}, "ssl": {"GPU": "pool.zh.woolypooly.com:3150", "ASIC": ""}}, "hashrate_url": ""}
|
||||
},
|
||||
"K1pool": {
|
||||
"wallet_mining": false,
|
||||
"coins": {"GPU": ["CLORE", "RVN", "ERG", "XEL"], "ASIC": []},
|
||||
"CLORE": {"full_name": "CLORE", "algos": ["KAWPOW"], "pay_interval": 0.3, "min_pay": 100, "model_fee": {"PPLNS": 0.01, "SOLO":0.01}, "mining_url": {"tcp": {"GPU": "cn.clore.k1pool.com:5030", "ASIC": ""}, "ssl": {"GPU": "cn.clore.k1pool.com:5030", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"RVN": {"full_name": "Ravencoin", "algos": ["KAWPOW"], "pay_interval": 0.3, "min_pay": 100, "model_fee": {"PPLNS": 0.01, "SOLO":0.01}, "mining_url": {"tcp": {"GPU": "cn.rvn.k1pool.com:7861", "ASIC": ""}, "ssl": {"GPU": "cn.rvn.k1pool.com:7861", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"ERG": {"full_name": "Ergo", "algos": ["Autolykos2"], "pay_interval": 0.3, "min_pay": 2, "model_fee": {"PPLNS": 0.01, "SOLO":0.01}, "mining_url": {"tcp": {"GPU": "cn.erg.k1pool.com:3746", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""},
|
||||
"XEL": {"full_name": "Xelis", "algos": ["Xelishashv2"], "pay_interval": 4, "min_pay": 1, "model_fee": {"PPLNS": 0.01, "SOLO":0.01}, "mining_url": {"tcp": {"GPU": "cn.xel.k1pool.com:9351", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""}
|
||||
},
|
||||
"hiveon.net": {
|
||||
"wallet_mining": true,
|
||||
"coins": {"GPU": ["RVN"], "ASIC": []},
|
||||
"RVN": {"full_name": "Ravencoin", "algos": ["kawpow"], "pay_interval": "07:30 UTC", "min_pay": 10, "model_fee": {"PPS+": 0.005}, "mining_url": {"tcp": {"GPU": "rvn.hiveon.com:8888", "ASIC": ""}, "ssl": {"GPU": "rvn.hiveon.com:7777", "ASIC": ""}}, "hashrate_url": ""}
|
||||
},
|
||||
"ravenminer": {
|
||||
"wallet_mining": true,
|
||||
"coins": {"GPU": ["RVN"], "ASIC": []},
|
||||
"RVN": {"full_name": "Ravencoin", "algos": ["kawpow"], "pay_interval": 3, "min_pay": 5, "model_fee": {"PPLNS":0.005, "PPS+": 0.01, "SOLO":0.005}, "mining_url": {"tcp": {"GPU": "stratum.ravenminer.com:3838", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""}
|
||||
},
|
||||
"antpool": {
|
||||
"wallet_mining": false,
|
||||
"coins": {"GPU": ["RVN"], "ASIC": []},
|
||||
"RVN": {"full_name": "Ravencoin", "algos": ["kawpow"], "pay_interval": "08:00-16:00", "min_pay": 1, "model_fee": {"PPS": 0.03}, "mining_url": {"tcp": {"GPU": "rvn.antpool.com:8003", "ASIC": ""}, "ssl": {"GPU": "", "ASIC": ""}}, "hashrate_url": ""}
|
||||
}
|
||||
}
|
||||
10
test/test.bat
Normal file
10
test/test.bat
Normal file
@@ -0,0 +1,10 @@
|
||||
@echo off
|
||||
cd /d %~dp0
|
||||
go build -o .\client.exe test.go
|
||||
if %errorlevel% equ 0 (
|
||||
echo 编译成功!可执行文件位于: .\client.exe
|
||||
) else (
|
||||
echo 编译失败!
|
||||
exit /b %errorlevel%
|
||||
)
|
||||
|
||||
52
test/test.go
Normal file
52
test/test.go
Normal file
@@ -0,0 +1,52 @@
|
||||
// package main
|
||||
|
||||
// import (
|
||||
// "log"
|
||||
// "time"
|
||||
|
||||
// message "client/internal/msg"
|
||||
// "client/internal/src/linux"
|
||||
// )
|
||||
|
||||
// func main() {
|
||||
// auth := "lzx"
|
||||
// l := linux.NewLinuxClient(auth)
|
||||
// go func() {
|
||||
// gpus, err := l.GetGPUInfo()
|
||||
// if err != nil {
|
||||
// log.Fatalf("获取GPU信息失败:%v", err)
|
||||
// return
|
||||
// }
|
||||
// log.Println(gpus)
|
||||
// }()
|
||||
// now_ts := time.Now().Unix()
|
||||
// cfg := message.ConfigurationMiningMsg{
|
||||
// Coin: "NEXA",
|
||||
// Algo: "NexaPow",
|
||||
// Pool: "m2pool",
|
||||
// PoolUrl: "47.108.221.51:3333",
|
||||
// WalletAddress: "m2test",
|
||||
// PoolUser: "m2test",
|
||||
// WorkerID: "go",
|
||||
// EndTimestamp: uint64(now_ts + 600),
|
||||
// }
|
||||
// if err := l.Mining(cfg); err != nil {
|
||||
// log.Fatalf("配置挖矿失败: %v", err)
|
||||
// }
|
||||
|
||||
// endTime := time.Unix(int64(cfg.EndTimestamp), 0)
|
||||
// waitDuration := time.Until(endTime)
|
||||
// if waitDuration < 0 {
|
||||
// waitDuration = 0
|
||||
// }
|
||||
// // 等待挖矿任务自然结束,额外多等 5 秒确保清理完成
|
||||
// time.Sleep(waitDuration + 5*time.Second)
|
||||
// }
|
||||
|
||||
package main
|
||||
|
||||
import client "client/internal"
|
||||
|
||||
func main() {
|
||||
client.Star()
|
||||
}
|
||||
10
test/test.sh
Normal file
10
test/test.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
cd "$(dirname "$0")"
|
||||
go build -o ./test/client test.go
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "编译成功!可执行文件位于: ./test/client"
|
||||
else
|
||||
echo "编译失败!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user