IPFS挖矿实战演习之Storj

为什么是Storj

在目前已经部署的分布式存储型虚拟币里面,storj是发展还算稳定同时挖矿模式最接近ipfs的币种。可以把它简单理解为百度网盘的区块链版,当然后面还有更广的应用前景,已和多家网络公司包括区块链达成合作关系,比如著名的开源FTP软件FileZilla,2017年7月份开始已经可以利用FileZilla的客户端软件直接上传文件到storj的网络中,很方便。合作的区块链最近有SONM,DOC.AI,BitClave等等。我们的目的是验证我们的硬件和网络是否能够胜任即将到来的IPFS挖矿,其中网络优化是重头,storj挖矿并不需要抵押物也没有惩罚机制,随时开挖,随时抛弃,可以很方便的上手。

挖矿收益

现在被人诟病最多的就是它的支付系统和存储系统是分离的,也就是说挖矿的结算工作目前为止还是手动的,每月月初在官方聊天频道公布google在线表格给大家查询上月的收益(以美元计算),然后月中转账,收益是以月中转账之前的市场价格再转换成storj的代币,这种折中做法必然会引起不满和质疑,官方承诺后面会用算法来实现自动结算。

收益情况每个月都不太一样,跟你当月存储数据和下载数据有关。如果大家简单以存储多少容量数据来看,这收益数据差异会非常大。以我自己为例,11月份我平均存储大概是37T的数据,表格显示收益为$670,平均每T有$18一个月,而12月份我的平均存储是40T,但工资表格显示我的收益为$260,存储数据比上月略有增加,收益却还不及上月的40%,这是什么原因造成的呢?我们先来看下官方的收益计算公式:

paymentModelFunction = function(gbHours, downloadedBytes) { HOURS_IN_MONTH = (24 * 365) / 12  
  ## Average number of hours in a month
  STORJ_USD_RATE = 2.20    
  ## This is determined by value reported on https://coinmarketcap.com/ at time 
  ## of payout calculation. 
  gbHoursScaled =  sapply((gbHours - median(gbHours)) / sd(gbHours), 
  function(x) ifelse(x < 0, 0, x))
  downloadedBytesScaled = sapply((downloadedBytes - median(downloadedBytes)) / sd(downloadedBytes),
  function(x) ifelse(x < 0, 0, x))
  ## Both gbHoursScaled and downloadedBytesScaled can not be less than 0 to 
  ## ensure everyone gets at least the base payout amount. 
  downloadedBytesFlag = as.numeric(downloadedBytes > 0)
  gbHoursFlag = as.numeric(gbHours >= 730)
  isQualifiedFlag = sapply(gbHoursFlag + downloadedBytesFlag,
  function(x) ifelse(x > 0, 1, 0))
  ## At least one of the above criteria must be met to qualify for a payment. 
  basePayout = (1.50 / STORJ_USD_RATE) * isQualifiedFlag
  ## The current base payout is set to $1.50 USD.
  ghHourPayout = 4.3536 * gbHoursScaled * isQualifiedFlag
  downloadedBytesPayout = 3.0060 * downloadedBytesScaled * isQualifiedFlag
  payoutAmountSTORJ = ghHourPayout + downloadedBytesPayout + basePayout
  payoutAmountUsd = payoutAmountSTORJ * STORJ_USD_RATE
  cbind(payoutAmountSTORJ, payoutAmountUsd)
}

附11月和12月的官方工资表单下载

是不是看不懂?没事,我也看不懂,只需要知道其中一些重点:

  • 最小支付额度为$1.5
  • 至少需要存储1G数据并保持整月24小时运行,差不多是730小时
  • GigabyteHours是你存储到的数据并按照月均730小时算出来的平均值
  • DownloadedBytes是存储用户从你这边下载到的数据总量

通过对比表格我们发现差异来自于DownloadedBytes,11月的时候,我总共为用户提供了1.4T的下载,而12月份只提供了5G而已,所以只有用户多下载数据,我才能获得更多的收益。假定我们是存储用户,不会总是保持去网盘里下载文件,storj有计划开放公有下载,到时候文件可以被分享,矿工就能获得更多的流量收益。点击访问PC字节计算转换器

准备工作

  • 一台主机 可以是树莓派,也可以是你的游戏PC主机,CPU和内存大小的配置取决于你打算运行多少节点和配置多少存储空间。storj windows界面版设定每一个CPU线程可以创建一个节点,单个节点最大存储被限定在8T,节点越多你获取的挖矿任务就越多,相应的内存消耗和网络负担也随之提高。因为国内storj的知名度并不高,存储用户少,所以有必要建立更多的节点来增大任务获取。现在是僧多粥少的局面,空闲的时间多,内存按照每TB 0.5G内存就够了。
  • 硬盘 经常看到一个问题就是有没有必要上红盘及以上的专业硬盘,我觉得就storj来说没必要,它没有长时间的周期性读写数据,至于IPFS要等挖矿细节的进一步公布才知道。
  • 网络 这里重点讲,现在国内100M带宽已经相当普及,使用三大运营商(电信,移动,联通)的带宽会比较稳妥,因为其他小运营商最大的问题是NAT环境复杂,可能会嵌套多层NAT并且无法分配外网IP,这就很麻烦了。我们知道这类存储型挖矿本质上就跟我们P2P的老祖宗BT下载差不多,都涉及到上传与下载。P2P现在用的最多的2个协议,一个是基于Kademila的DHT(分布式哈希表,点击查阅百科),一个是UPNP(通用即插即用,点击查阅百科) 80后可能都知道在吸血迅雷出现之前BT非常流行,如果要增大下载和上传速度就必须做端口映射。我们以送快递来打个比方,在没做端口映射之前,你人在小区的某栋楼里,快递员第一次来要通过门卫来获知你那栋楼的准确位置,找到并送到你手上,做了端口映射就是快递员无需询问位置,直线到你家取货,显然这样是高效的。storj我验证下来,拥有一定的NAT穿透能力(较有限),但面对NAT环境复杂的小运营商,storj的网桥可能无法连接到你,结果就是无法挖矿,虽然借助第三方软件和服务可以达到NAT穿透的效果,但这样做绝对是低效的而且需要额外的费用,这里并不推荐。如果三大运营商没有给你分配外网IP,一般打电话投诉就能解决,在后面挖矿优化环节我会再详细讲解端口映射和UPNP的设置。
  • 钱包地址 设置一个ETH钱包地址用来每月接收storj挖矿收入,官方推荐使用Parity,Mist,以及在线钱包生成的MyEtherWallet

挖矿设置

Windows界面版使用方法

下载storj界面版挖矿程序64位7.3.1

下载storj界面版挖矿程序32位7.3.1

下载时间同步工具NetTime3.14

  • 安装设置NetTimeWindows历代系统的时间同步一直是个槽点,大部分时候只是几秒到几十秒的差异,我们平时感觉不到,而storj为了保持各节点时间戳的一致,要求上下不得超过500毫秒的误差,否则挖矿连接失败,所以这里必须要安装。一路默认完成安装后在托盘处找到NetTime,按右键找到属性设置
  • 按照下图,国内设置以下服务器,更改同步时间为15分钟,点击更新后就可以关掉了,程序会在后台自动运行更新

hk.pool.ntp.org
jp.pool.ntp.org
kr.pool.ntp.org
0.asia.pool.ntp.org

 

  • 安装挖矿程序默认为NAT(UPNP)连接方式,UPNP可以理解为自动端口映射,只要有外网IP并且软件,系统,网络设备3方都支持并且开启UPNP功能就能正常使用(如果UPNP失败则会启用备用方案反向http隧道来进行NAT连接)打开安装程序,勾选添加防火墙规则

安装完成点击开始设置,第一步,填写钱包地址

第二步,设置你的挖矿数据存放文件夹

第三步,设置文件夹的大小,后面有单位可以改

第四步,默认Reachable不勾选就是以UPNP方式连接

完成之后我们可以看到已经连接上桥(Bridges),Delta显示为绿色延迟数表示正常,端口那里显示随机数橙色Tunnel也代表upnp工作正常

    最后我们要通过官方API来确认我们的节点(node)是否已经进入挖矿队列,复制NodeID列表的一段字符串放到以下地址查询https://api.storj.io/contacts/你的NodeID 比如我这边的示范 https://api.storj.io/contacts/c004bfed2e16884b83c63148b5aac9367f767cae

如有看到"responseTime":10000," 这个参数说明一切正常,如果没有就把节点删除重新添加一遍。

windows命令行版本使用方法

对于性能要求高的玩家,建议使用此方式,因为少了界面显示不需要图形渲染,这样你即使在用显卡挖矿也不影响显卡速度,其次不受GUI版本的CPU线程限制,可以无限建立节点,但每个节点最少需要1G内存支持,比界面版略复杂。

下载Git 2.15.1 64位

下载NodeJS 8.9.4 64位

  • *安装环境支持 * 两个程序一路NEXT安装完成,点击开始菜单,输入cmd打开命令提示符,分别输入
node --version
npm --version

若返回版本号说明一切正常

  • 安装命令行客户端在开始菜单输入powershell,按右键,选择以管理员方式打开

在打开的命令行输入 npm install--globalwindows-build-tools安装Visual Studio Build工具包,安装完看到两项绿色就说明安装完成

时间同步和上面界面版一样安装设置

关闭powershell,重新打开cmd,输入 npm install-g storjshare-daemon安装命令行挖矿程序

安装完成输入 storjshare--version如返回版本号说明安装成功

在电脑创建一个目录,比如我这里的示例是C盘linkcoin.net1的文件夹,然后在命令行输入 storjshare-create--storj0xfeb5c46006fca94f5022c7d693b3d22bb7295ee7--storage C:\linkcoin.net1--size3GB--outfile C:\linkcoin.net1\config.json--logdir C:\linkcoin.net1 这样就创建了一个节点,每个节点的目录必须单独设置

输入 storjshare daemon启动进程

输入 storjshare start--config C:\linkcoin.net1\config.json运行挖矿节点,成功会弹出Node.exe窗口,防火墙记得放行

输入 storjshare status可以获得当前状态

最后记得按照上面windows界面版的网址查询官方api的Node运行状态

Linux使用方法

这里以Debian/Ubuntu为例,按照以下步骤执行命令,最后显示 +storjshare-[email protected].3.0就是安装成功了

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.3/install.sh | bash
退出命令行
新开一个临时命令行
nvm install --lts
重启命令行
sudo apt-get update && sudo apt-get dist-upgrade
sudo apt-get install git python build-essential -y
npm config set user 0
npm config set unsafe-perm true
npm install --global storjshare-daemon

在根目录新建一个文件夹比如linkcoin.net,因为我是用的vultr服务器做演示,本身就是外网,无需UPNP和转发端口,所以直接输入直连的命令(请自行替换自己的钱包地址,IP地址和目录位置):

storjshare-create --storj 0xfeb5c46006fca94f5022c7d693b3d22bb7295ee7 --storage /linkcoin.net --size 1GB --outfile /linkcoin.net/config.json --rpcaddress 198.13.54.178 --rpcport 5000 --manualforwarding true --logdir /linkcoin.net

回车后弹出配置文件编辑框,输入 :wq保存

 

输入 storjshare daemon运行主程序,输入 storjshare start--config/linkcoin.net/config.json启动挖矿进程

 

linux系统无需同步时间,输入 storjshare status显示挖矿状态


最后按照windows界面版给的网址查询官方api的Node运行状态,如果没有 responseTime参数,则需要删掉重新建立Node,否则你会发现挂了10天也没数据

进阶优化

下载花生壳官方客户端

  • 端口转发和动态域名

我们看到以默认upnp方式运行的端口显示的是黄色的Tunnel,而直连显示的是绿色的TCP,光从颜色我们已经知道绿色肯定是最佳状态,事实也是如此,upnp会占用额外的资源来保持连接稳定,直连才是性能最佳选择,而IPFS到时也会遇到这种情况,看完此篇你就知道如何处理了。下面假定你拥有外网动态IP(家用宽带基本全是动态,非固定IP),可以做如下处理来实现直连。

如果你是用猫直接拨号,只需申请一个免费动态域名来绑定你的动态IP,国内提供免费动态域名的商家有不少,我这里以花生壳来做演示

安装完打开客户端点击注册,申请一个免费账号,注册成功可以获取一个二级域名,无需购买付费域名

 

注册完登陆客户端,无需其他操作,这时你ping花生壳提供的二级域名已经会返回你的公网IP地址

 

对于使用路由器拨号的朋友,我们需要额外进路由后台设置端口映射,首先要知道我们的内网地址,打开命令提示符,输入 ipconfig获得网卡设置,找到你的内网IP地址和网关地址

 

打开网卡设置,如果你的网卡是自动获取IP,那就要按照下图的顺序改为手动,来固定住内网IP

 

接着打开路由器后台,如果你不知道路由器后台地址可以去看下路由器背后的标签,一般都会写。因为路由器品种实在繁多,系统也大相径庭,无法展示所有,我只能给出我自己路由器的配置地方,大体上都有这么一个端口转发功能,需要仔细找找。在转发列表里面添加本地IP为我的内网IP地址,端口随意设置,只要跟storj里设置的一样就行,我这里演示设置4000,协议可以选BOTH,添加完点击应用即可

 

现在进入最后的storj设置,我们以界面版第一个节点为例,在设置面板,点开Edit进行编辑,如果你没安装过第三方文本软件,可以用记事本打开,方便排版

 

rpcAddress填入你的花生壳二级域名,端口设置为和路由器转发列表的一样, doNotTraverseNat设置为 true改好保存关闭

在托盘处右键退出storj挖矿程序并重新打开,现在已经可以看到端口处已经显示绿色的TCP,如不确定映射端口是否成功,可以打开这个 端口映射网站 进行测试,如结果为open说明端口映射和动态域名都是正常状态。

最后附上我在虚拟机下测试的14小时NAT和TCP直连的对比图,当然这差异只能作为参考,时间不够长

 

  • 配置文件解析以下引用官方说明里的范例,除了中文标注的其他不用管,保持默认即可。要是需要切换 直连/UPNP(NAT) 可以编辑你创建节点时保存的 .config文件来修改配置,修改完需要保存并重新启动storj。
{
  // 设置ETH钱包地址
  "paymentAddress": "0x4646fBd7323521929DC06b3Aff9DEb338a966ade",
  // Subscribes to the given contract topics
  // See https://storj.github.io/core/tutorial-contract-topics.html
  "opcodeSubscriptions": [
> "0f01020202",
    "0f02020202",
  ],
  // An array of bridges to connect and accept contracts,
  // send exchange reports and discover network seeds.
  "bridges": [
      "url": "https://api.storj.io",
      "extendedKey": "xpub6AHweYHAxk1EhJSBctQD1nLWPog6Sy2eTpKQLExR1hfzTyyZQWvU4EYNXv1NJN7GpLYXnDLt4PzN874g6zSjAQdFCHZN7U7nbYKYVDUzD42"
    {
    }
  ],
  // Known preferred seeds in form of a storj URI
  // Example: "storj://[ip.or.hostname]:[port]/[nodeid]"
  "seedList": [],
  // 直连需要设置这里,静态外网IP直接写IP,动态外网IP写动态域名,UPNP(NAT)方式写127.0.0.1
  "rpcAddress": "89.180.103.39",
  // 直连需要设置的端口,upnp不用管
  "rpcPort": 4000,
  // UPNP(NAT)开关,设置为true表示直连,设置为false表示启用UPNP
  "doNotTraverseNat": true,
  // NAT通道数设置,如果在UPNP模式下连接不理想可以适当调大此参数
  "maxTunnels": 0,
  // 最大并发连接数,默认即可
  "maxConnections": 150,
  // UPNP模式下设置的端口区间,如无特殊需要,默认即可
  "tunnelGatewayRange": {
    "min": 0,
    "max": 0
  },
  // Number of times to retry joining the network and the wait time between
  "joinRetry": {
    "times": 3,
    "interval": 5000
  // Temporarily stop sending OFFER messages if more than this number of shard
  // transfers are active
  },
  "offerBackoffLimit": 4,
  // ECDSA private key for your network identity, your Node ID is derived from
  // this and it is used to sign and verify messages
  "networkPrivateKey": "b9cd6834fc097ef00c3a3ddf46928cf10f60f7de8c4365d737041b03b932f532",
  // 日志记录细节设定,可以设置0关闭日志
  // 4 - DEBUG | 3 - INFO | 2 - WARN | 1 - ERROR | 0 - SILENT
  "loggerVerbosity": 3,
  // 日志保存路径设置,如不写,默认在这个位置:
  // $HOME/.config/storjshare/logs/[nodeid].log
  "loggerOutputFile": "C:\\Users\\user\\.config\\storjshare\\logs",
  // 此节点存储位置
  "storagePath": "C:\\Users\\storj",
  // 此节点准备提供的硬盘空间,单位支持B, KB, MB, GB, TB
  "storageAllocation": "7TB"
}

 

除了上面公开的配置还有一项隐藏设置就是接收碎片的大小设定,如果遇到节点崩溃,就是Restarts那一列数字增大,可以调整这个参数 maxShardSize,写在空间大小设置下面,官方推荐从50-100M开始设置,然后每次降低几M来寻找适合你硬件的最佳设置

"storageAllocation": "2GB",
  // Max size of shards that will be accepted and stored
  // Use this and make this lower if you don't have a strong internet connection
  "maxShardSize": "100MB",

 

  • 命令解析 命令命令信息start启动一个挖矿节点stop停止一个挖矿节点restart重启一个挖矿节点status检查节点状态logs最近的节点日志create创建新的配置文件destroy结束挖矿进程killall结束所有挖矿进程并停止挖矿守护程序Daemon启动挖矿守护程序Help[CMD]显示帮助[cmd] 守护进程命令
执行命令的例子                               执行命令的信息
storjshare daemon                             启动守护进程
storjshare start --config path/to/config.json          启动指定目录的挖矿节点配置程序
storjshare start --config <path> --unsafe             在非安全模式运行节点,跳过资源监察
storjshare stop --nodeid <nodeID>                  停止指定节点
storjshare restart --nodeid <nodeID>                重启指定节点
storjshare status                             检查节点状态
storjshare logs --nodeid <nodeID>                  节点最近日志
storjshare create --storj <address>                创建一个新节点
storjshare destroy --nodeid <nodeID>                结束指定节点
storjshare killall                            结束所有节点进程并停止守护程序
storehouse help logs                           显示日志的帮助命令
storjshare save                               保存正在运行的节点快照
storjshare load                               从快照加载所有节点

其中 storjshare savestorjshare load挺好用,创建完所有节点运行下save,这样下次启动就不需要一个个运行config了,直接运行load快照,自动加载并运行所有节点,load前要先用storjshare daemon开启守护程序

故障排除

  • 防火墙端口未开放,表现为端口号显示黑色

解决办法:进系统防火墙设置添加放行,在开始菜单输入防火墙打开,进高级设置,在入站规则中添加storj的进程

 

写在最后

由于国内的网络节点数目较少,使用storj的上传者更少,所以国内的挖矿收益并不可观,甚至大部分测试过的朋友跟我说还跑不赢电费,建议大家用来测试挖矿环境玩玩练手即可,不建议以大投入来挖这个币,如有任何操作问题可以去我社区留言https://bbs.linkcoin.net/d/3

来源:原文来自微信公众号:Link大社区(LinkCoinS),文章为原文作者独立观点,不代表ipfs立场。

83

扫一扫,分享到微信

猜你喜欢

文章评论

电子邮件地址不会被公开。 必填项已用*标注

获取验证码
后发表评论

  • zengxiaosheng

    老大,我的电脑CPU是i5 4200 四线程的,也就是说可以创建4和nodeID,对吗

    zengxiaosheng
  • rounder

    请教一下,开启挖矿一个多小时以后,Allocs和Shared下面一直没有分配到任务属于正常吗?获取任务需要等待很久?有什么条件呢?

    rounder
  • pencil

    实用!我也实践一下!

    pencil
  • lanyuer

    您好,我也是按照教程来安装storj share,创建了节点后,如图 0 d8474549eae87aa4e336339d543fa8b86b252fb5 ON D:\迅雷游戏\ 45m 13s 0 223 Connected 0 (0 received) ... (...%) 41ms 4000 (uPnP) Options 该显示颜色的地方都是绿色 可是 打开 https://api.storj.io/contacts/d8474549eae87aa4e336339d543fa8b86b252fb5 却显示 {"lastSeen":"2018-01-31T14:19:54.178Z","port":4000,"address":"100.100.233.140","userAgent":"8.5.0","protocol":"1.2.0","spaceAvailable":true,"nodeID":"d8474549eae87aa4e336339d543fa8b86b252fb5"} 看上去 没有成功的 responsetime,请问是什么原因,可以帮我看看 非常感谢啊

    lanyuer
  • falcoon

    原谅我这个小白还是没看懂

    falcoon
  • meaverick

    实际效果并不好,尤其对中国用户

    meaverick
  • qiuuvijw

    厉害了老铁,牛逼

    qiuuvijw
  • taojin

    很多东西不能下载呀。需要翻墙吗

    taojin
  • Fmlyb98

    矿机呢?性能较好价格适中的?求推荐

    Fmlyb98
  • diligent

    最近IPFS挺火的,想挖矿,可我有些地方不太懂,是不是买台矿机挖矿相对简单一些,大家有什么建议?

    diligent
  • wangjh

    最近IPFS挺火的,想挖矿,可我有些地方不太懂,是不是买台矿机挖矿相对简单一些,大家有什么建议?

    wangjh
  • chingmon

    请教一下,按您的方法设置,Port 已显示端口数和Tcp,但是是黑色,在防火墙入网规则按您的方法设置后伊然是黑色,把防火墙关闭也还是黑色,请老师指点。

    chingmon
微信公众号

知识星球