应该是第一篇比较完整的Windows+Docker挖矿教程吧

没节操的先广告一波,如果觉得这个教程对你有那么一点帮助,欢迎点击 点赞专用链接 帮我去点个赞(小心心)咯,对,就是那个龙猫头像的!


首先,这是一个韭菜的教程,也是第一次写这种教程,有问题请轻喷,中间遇到了好几个问题,感谢群里的 @可 @Orange @stwith 的帮助支持~

另外可能会有人问 Docker 跟 Vmware这种虚拟机的区别,简单点说 Docker 更轻量,对硬件要求更低,用起来应该更丝滑,具体请大家自行 Google:Docker和虚拟机的区别。

OK,Let’s go~

下载安装Docker

既然是Docker,那么首先肯定是下载安装了,这里别问我Docker是什么,请自行Google。

具体的大家可以直接参考这篇文章,我就不重复造轮子了:

Docker 详细安装步骤

写的很详细,应该没有问题,如果有,请私聊我,收 CKB 解决,哈哈哈

对了,有个问题,安装完需要注销或者重启才能打开Docker(对就是那个背着集装箱的小鲸鱼),教程中没提到,即使你能打开,也建议注销或重启再打开。

获取CKB镜像

在开始菜单中找到“命令提示符”或者Win+R键输入“CMD”打开命令行界面

2019-05-22-23-59-30

在命令提示符中输入:docker run --rm -it nervos/ckb:latest run

配置

Win+R输入“CMD”新打开一个命令行

挂载目录:docker volume create ckb-testnet

查看是否挂在成功:docker volume ls,成功的话可以看到VOLUM NAME叫ckb-testnet的。

初始化目录:docker run --rm -it -v ckb-testnet:/var/lib/ckb nervos/ckb:latest init --spec testnet --force

创建一个节点并运行:docker create -it -v ckb-testnet:/var/lib/ckb –-name ckb-testnet-node nervos/ckb:latest run

这个指出一下:酒馆里的教程这里有个小错误,--name中少了一个-,会让小白一脸懵逼。

接下来把配置文件复制出来:

docker cp ckb-testnet-node:/var/lib/ckb/ckb.toml .

docker cp ckb-testnet-node:/var/lib/ckb/ckb-miner.toml .

然后需要编辑配置文件,*修改ckb.toml文件中的argshash_code参数,

这里可能会出现韭菜三问:文件在哪?怎么编辑?这两个参数哪里来??

我们一个个解答:

** 1. 文件在哪?**

默认在C盘-用户(Users)-当前登录用户名的文件夹根目录:

2. 怎么编辑?

记事本也可以,但是不推荐,小白的话可以尝试下一个Notepad++] (https://notepad-plus-plus.org/download/v7.7.html)这个编辑器进行编辑。

编辑器打开后,不要动,我们去获得这两个参数。

3. 这两个参数哪里来?

简单点说这两个参数需要用一个随机生成的私钥然后通过CKB来加密生成。

好,继续操作,首先新打开一个命令行,这里我们需要用Docker跑起来一个简单的Ubuntu系统:

用Docker下载Ubuntu镜像

docker pull ubuntu

2019-05-23-01-37-11

然后运行Ubuntu系统

docker run -ti ubuntu bash

先更新Ubuntu的下载源,防止后面安装软件出现奇怪问题

apt-get update

安装opensslxxd两个依赖包:

apt-get -y install openssl

apt-get -y install xxd

接下来通过运行下面的命令获得一个公钥(PubKey)和私钥(PrivKey)。


openssl ecparam -genkey -name secp256k1 -text -noout -outform DER | \

xxd -p -c 1000 | \

sed 's/41534e31204f49443a20736563703235366b310a30740201010420/PrivKey: /' | \

sed 's/a00706052b8104000aa144034200/\'$'\nPubKey: /'

得到的公钥和私钥:

这两个一定要复制保存好,后面有用,另外这个命令行窗口别关闭,后面也有用。接下来我们需要再回到CBK。

tips: 很多人如果第一次用可能不知道怎么复制,这里不要用Crtl+C复制,按住鼠标左键,选择要复制的内容,然后到命令行的顶部边框,右键-编辑-复制。如下图:

2019-05-25-00-21-55

我们再新开一个命令行,使用docker ps -a查看当前所有的容器,找到一个有端口的镜像是nervos/ckb:latest的容器,记住它的ID,然后执行docker exec -it <ckb_id> /bin/bash将中间的<ckb_id>换成刚刚记住的ID,进入CBK的命令行。

进入后执行命令

ckb cli secp256k1-lock <pubkey>

其中的<pubkey>改成前面自己生成的公钥

这时候就能得到自己的code_hashargs

继续复制保存好。

然后回到前面在电脑上打开的ckb.toml文件,将其中(最后三行)的code_hash和args替换成自己的并解除注释(删除前面的#号,如果前面有#的话)。

然后使用exit命令退出CKB的命令行界面,回到Docker,执行

tar -cf - ckb.toml ckb-miner.toml | docker cp - ckb-testnet-node:/var/lib/ckb

将改过的配置文件放回去。

>这里如果不确定有没有改成功,可以按如下步骤校验:

新开一个命令提示行,通过docker ps -a找到NAMES是 ckb-testnet-node的容器,确定ID,然后执行docker exec -it <ckb_id> /bin/bash<ckb_id>替换为对应的ID

这样就进入了节点的命令提示行,输入ls命令执行,可以看到ckb.toml文件,再通过tail -n 4 ckb.toml命令查看文件最后4行,确认是自己填的内容即可。

挖矿!挖矿!挖矿!

新开一个命令行,执行下面命令,启动CKB节点,开始同步区块
docker start -i ckb-testnet-node

再开一个命令行,执行下面的命令,启动挖矿程序开始挖矿
docker exec ckb-testnet-node ckb miner

OK,上面如果没有啥报错,并且你的内容跟我的显示差不多话,恭喜你,你已经成功挖矿了!

tips:这里还需要注意一下,必须等上面节点的区块全部同步好,才能正确的查到相关数据,可以通过查看上面的block:后面的最新的数字,跟区块浏览器上的最新区块对比,如果一样表示已经同步好了。

我的钱包呢?

上面其实已经可以挖矿了,但是还是有个大问题的,那就是我的钱包地址是多少?怎么去查挖到多少CKB了?

这里就告诉大家怎么获得钱包地址。

获得钱包地址,需要用到前面Ubuntu系统和在里面随机生成privkey,所以前面让大家保存好~

OK,回到上面用Docker运行的Ubuntu的命令行窗口,希望你没关,关了的话,把那个步骤重新跑一下吧。

在Ubuntu命令行执行以下命令安装依赖:

apt install -y git-core curl build-essential libssl-dev libreadline-dev libyaml-dev libcurl4-openssl-dev libffi-dev autoconf autogen libtool pkg-config libsodium-dev libsecp256k1-dev

安装Ruby环境:

apt install -y ruby-full

2019-05-23-01-59-42

完成后再执行:

gem install bundler

上面完成后,继续执行:

git clone https://github.com/nervosnetwork/ckb-sdk-ruby && cd ckb-sdk-ruby

2019-05-23-01-59-42

git checkout master

2019-05-23-01-56-32

最后执行下面的命令,这一步可能需要花比较久的时间,大家保持耐心:

bundle

执行完成后,窗口别管!

再开一个命令行运行:docker ps 查看当前运行的docker 容器(这一步可以跟上一步同步进行),我们会看到一个NAMES是ckb-testnet-node的容器。

运行命令:docker inspect --format='{{.NetworkSettings.IPAddress}}' ckb-testnet-node 会得到一个IP地址。

请记住这个IP地址。

这里我们再回到上面Ubuntu的命令行,

运行命令行:curl -d '{"id": 2, "jsonrpc": "2.0", "method":"get_tip_header","params": []}' -H 'content-type:application/json' 'http://<ip>:8114'把中间的<ip>换成你刚刚得的IP

不报错并且得到跟图片里差不多的结果后,运行bin/console,进入 CKB 的ruby命令行,大概是这样子的,注意前面的区别:

2019-05-25-01-02-25

就下来就是关键时刻了,我们要开始生成我们的钱包地址了

在ruby命令行中,输入命令:

rpc = CKB::RPC.new(host: 'http://<ip>:8114')

把中间的<ip>换成你前面得到的IP

tips: 这里可以通过 rpc.get_tip_header查看是否调用成功,成功的样子如下:

再输入下面的命令得到钱包对象:

wallet = CKB::Wallet.from_hex(rpc, privkey)

这里注意了,privkey要换成我们前面在Ubuntu里随机生成privkey,并且要在前面加上0x

再通过wallet.address得到钱包地址。

tips: 假如生成的privkey是4381aee933174c34162edcebccc9d7bcfd40921a962f4d501425305990938aab,则命令的样子应该是 wallet = CKB::Wallet.from_hex(rpc, "0x4381aee933174c34162edcebccc9d7bcfd40921a962f4d501425305990938aab"),前面加上了0x,并外围包裹着英文输入法的双括号

到这里,我们就获得了钱包的地址,可以去区块浏览器上搜索查看了~

OK,教程差不多到这里,上面的步骤是一遍遍并能正确跑出来的,但依然不确定是否有遗漏,如果有遗漏或者错误欢迎留言指出来,感谢~

最后欢迎点击 点赞专用链接 去帮我去点个赞(小心心)咯,对,就是那个龙猫头像的!

-EOF-

12 Likes

超级赞了!

厉害厉害

写的很赞:+1:

超级赞 超级详细 :+1:

哈哈,谢啦~求去点赞,我要猿~:sunglasses:

哈哈,谢啦~你这名字有点牛逼,求去点赞,我要猿~:sunglasses:

谢谢老板,求赞一枚~~

:kissing_heart::kissing_heart:

& 被转义了 :rofl:

git clone https://github.com/nervosnetwork/ckb-sdk-ruby && cd ckb-sdk-ruby

ckb cli secp256k1-lock <pubkey> 新命令,学习了

openssl ecparam -genkey -name secp256k1 -text -noout -outform DER | \
xxd -p -c 1000 | \
sed 's/41534e31204f49443a20736563703235366b310a30740201010420/PrivKey: /' | \
sed 's/a00706052b8104000aa144034200/\'$'\nPubKey: /'

41534e31204f49443a20736563703235366b310a30740201010420

a00706052b8104000aa144034200
是什么,在每次输出中 好像 都是固定的值

@jueduizone 这是固定的值, 下面的文章有介绍, 不是随机种子

How do these OpenSSL commands create a Bitcoin private/key from a ECDSA keypair

How to convert an ECDSA key to PEM format

改过了,谢谢小哥哥~:sunglasses:

还真没注意,要研究一下,是不是seed,应该是可以改的,保证随机性?

我完成这步后校验发现ckb.toml配置文件没有修改成功,我把步骤重复甚至把整个操作从头做一遍也无法将改过的配置文件放回去。
请问是哪里出现问题了呢?谢谢!


厉害了···

最近有点忙,刚看到,不好意思,问题解决了么?
估计是Dokcer文件的映射哪里有问题,可以试试直接在校验那里用echo直接写入文件

放弃docker了,后面我通过Windows+WSL挖到了。