最近在给百事通部署新的服务器,想到服务器平时应对访问量的需求并没有那么大,就有了给服务器平时找点其他事做的想法。于是挖币的点子就有了。然后我在网上查了一下现在比较受关注的一些数字币种,发现Monero(门罗币)是目前被广泛接受,对CPU/GPU算法友好的一种数字币。然后就决定在百事通的服务器上跑一个挖Monero的程序,让公众号多个收入来源。

开始我完全按照网上的教程去做,基本都是让你去编译安装一个叫xmr-stak的GitHub项目(https://github.com/fireice-uk/xmr-stak)。但编译安装的过程在服务器的环境上并不顺利,最终并没有实现。之后我去GitHub上这个项目的主页翻了一下,发现它已经有linux版的二进制分发包了,那我还去折腾编译安装干嘛……分发版本里会有2%的抽水(你的机器算100分钟,有2分钟是会给作者的钱包创造收益),抽水率也不算过分,直接用二进制分发包,省去了一堆配环境的麻烦是更值得关注的。

第一次运行挖矿程序的时候会有一步是让你填你的钱包地址,所以得先注册一个Monero钱包。直接用https://mymonero.com/提供的服务就好,任意一种客户端下载之后打开,按照它的说明,完成注册一个钱包的流程,注意保存好对应到app的查看密码和对应到钱包的Mnemoic,钱包地址的问题就解决了。

然后是选一个挖矿用的矿池。矿池的原理就是大家把算力集中起来到一个人身上来挖,这样这个矿工的算力就很强,挖到币的概率就大一些。然后挖到币以后,矿池再根据每个矿工的算力贡献来分配。下面列举一些矿池,大家可以根据自己的需求选择:

1.https://xmr.nanopool.org 
矿池地址:xmr-us-east1.nanopool.org:14444 (冒号后为端口,下面不再说明) 
nanopool的难度固定设置为12万。矿池总税为1%,现手续费固定为0.015XMR,最低0.3提现。本矿池适合算力比较大的矿工。

2.https://supportxmr.com/ 
矿池地址: 
pool.supportxmr.com:7777 (最大难度2.5W) 
pool.supportxmr.com:5555(最大难度1.5W) 
pool.supportxmr.com:3333(最大难度3K)

supportxmr的矿池总税为0.6%,最低0.3提现,提现手续费不详。难度会根据你的电脑算力自动调整,一般的电脑连接5555端口即可。

3.http://www.minexmr.com/ 
矿池地址: 
Europe (France, Germany): pool.minexmr.com 
France: fr.minexmr.com 
Germany: de.minexmr.com 
Canada: ca.minexmr.com

端口: 4444,5555,起始难度15000 
端口: 7777, 80, 443,起始难度35000 
端口: 3333,起始难度200000 
端口: 6666,起始难度35000

本矿池特点是有80和443端口,适合于公司或者企业防火墙策略屏蔽掉对外网其它端口访问的人群。矿池总税为1%。.

4 . https://get.bi-chi.com 
碧池,这个应该是国内挖矿人数最多的门罗币矿池,相对于上述几家,总算力大概7到8W,略低。经营者是在我们国内,但是服务器是在国外。 
矿池: 
get.bi-chi.com:3333 
get.bi-chi.com:5555 
get.bi-chi.com:7777 
以上矿池难度从地到高,但是矿池会根据你电脑算力来自动调整,一般1K以下的算力,就选择5555端口好了。矿池总税为1.6%

5.https://monero.crypto-pool.fr/ 
这是一个法国的矿池,但是我们测试的时候惊人地发现这个矿池的ping值非常小,几乎相当于在国内。 
矿池地址:xmr.crypto-pool.fr 
矿池端口:3333 6666 7777, 80,8080,443。难度18000 
矿池端口:8888,难度30000 
矿池端口:9999,8443,难度50000 
矿池总税2%。此矿池开通80和443端口,对于防火墙策略屏蔽了对外网端口访问的,也可以使用此矿池。

我使用的矿池是pool.supportxmr.com:80,没错,这个矿池现在也支持80端口,所以大家选矿池的时候可以参看一下感兴趣矿池网站自己的介绍,能获取到时效性更强的信息。

钱包地址和矿池地址选择完毕之后,就可以下载好对应环境的xml-stak,然后去运行它。当前版本(2.10.4)运行后,会依次让你去选择配置模式(选简单模式,输Y)、币种(我们挖的是monero)、矿池地址(要带上端口号,即使你选择是80、443端口)、钱包地址、密码(对supportxmr矿池,随便输一个字符串,但不能不输入。其他矿池参照其他矿池的guide)、TLS/SSL支持(一般都输入N),然后程序就能正常在前台运行,去挖矿了。前台运行时可以通过r(result)、h(hash rate)、c(connection)查看程序当前的工作状态。

有时程序开始运行时会提示

MEMORY ALLOC FAILED: mmap failed

虽然只是警告,但确实会影响到挖矿的效率。Linux下的解决方式如下:

  • 编辑文件/etc/security/limits.conf,在末尾增加:
* soft memlock 262144
* hard memlock 262144
  • 再在每次运行挖矿程序前,运行如下指令:
sudo sysctl -w vm.nr_hugepages=128

该条命令在服务器重启后会失效,需要每次运行挖矿程序前都重新运行一次。

经过上述步骤,该问题应得到解决。但还有一个问题:我们运行的程序现在还是在前台运行的,如果我们注销掉当前登陆账户,那么程序也就被关闭了,达不到我们期望的在后台持续运行的效果。解决方案是用如下所示的指令去运行挖矿程序:

nohup ./xmr-stak >/dev/null 2>&1 &

解读:nohup让程序忽略HUP信号,保证用户登出时程序不会被HUP信号杀掉。最后一个&符号是指定程序在后台运行。但如果只加上这两个元素,又有一个问题:nohup默认状态下会把程序的stdout和stderr重定向到nohup.out文件中。但xmr-stak运行时会不断输出当前挖矿的状态,这样的结果是我们会得到一个随程序运行而不断增大的nohup.out,而其中的内容对我们又并没有啥意义。现在的问题是我们想完全丢弃程序的stdout和stderr。>/dev/null 2>&1就是完成这个任务的。>/dev/null把标准输出重定向到null文件,可以理解成让一个黑洞吸走标准输出吐出来的所有东西。2>&1是把标准错误重定向到标准输出。因为标准输出已经被重定向到了null,所以标准错误的输出也被null照单全吞。这样我们就达到了让程序静悄悄地在后台运行的目的。

https://xmr.omine.org/web_miner.html

这个链接里的内容最近没啥时间去研究,是关于web页面嵌入代码,让浏览器所在的机器帮着去挖门罗币的。有兴趣的读者也可以自己看一看这个网站的介绍。它也算是个不存在的网站,要访问的话需要点额外手段。

最后放一个逗趣的思考题:

百事通server钱包的挖矿速度
自用钱包的挖矿速度

两相对比,server也太惨了吧……那么问题来了,能否猜一猜我的钱包有哪些算力来源呢?打个赌,我不说的话没人能猜到全。