×

Alpha Casper FFG 测试网指南

96
liuchengxu
2018.01.01 10:15* 字数 1308

欢迎来到基于 pyethereum的第一个 alpha Casper FFG 测试网版本。该测试网彰显了在加密经济学 POS 上数年的工作成果,以及客户端几个月以来的紧密开发。这是一个功能齐全,完全可用的网络,用户可以发送交易,挖矿和成为验证人。但是,距离网络完全可以上线,仍然还有一些距离。一些参数与最终设置不同,此外,比起其他使用更快语言实现的客户端,目前唯一可用的客户端 pyethereum,在处理容量上相对要低得多。因此,为了保证网络的可持续性,网络参数将会严格受限。千万不要期待测试网的性能可以比得上 Geth 和 Parity 这样优秀的客户端

什么是 Casper FFG,它是如何工作的

这个话题已经超出了本文内容,你可以在下面的链接中找到更多信息:

本文接下来的部分,将假定您对 Casper FFG 已经有了一定的了解。

前言

如果你想要直接运行节点,可以直接进入下一节(“运行节点”)。

在这里查看 ethstats :http://34.203.42.208:3000/

此外,你也可以使用 web3 (通过 sudo pip3 install web3 进行安装),像下面这样连接到一个节点(假设使用 Python 3):

> from web3 import Web3, HTTPProvider
> web3 = Web3(HTTPProvider('http://52.87.179.32:8545'))
> web3.eth.getBlock('latest')
# This should return the head of the chain

然后:

> import urllib.request, json

# This may take a while depending on your internet connection
> casper_abi = json.load(urllib.request.urlopen( "https://gist.githubusercontent.com/vbuterin/868a6213b058fb4f1fdfcf64e54f0e91/raw/33fc177da3863ec320d1ebf95816ba52ffbffbe8/casper_abi"))
> casper = web3.eth.contract(abi=casper_abi, address='0xbd832b0cd3291c39ef67691858f35c71dfb3bf21').call()

# This should return the current epoch
> casper.get_current_epoch()

通过查询 Casper 合约 ,你可以看到可以调用的所有函数。任何公共变量(public variable)都有一个相对应的 getter 方法,比如,如果变量 x 是公开的,那么就会有一个相对应的 getter 方法 get_x();关于有哪些 getter 的更多信息,可以查看 Viper 文档。

运行一个节点

为了运行一个节点,按照下列指引下载并运行一个 Docker 实例:

在 Ubuntu 上安装 docker(如果你还没有安装的话):

curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER

该步完成后,记得一定要退出重新登录。

如果是 macOS,按照以下指引:https://docs.docker.com/docker-for-mac/install/#install-and-run-docker-for-mac

获取测试网节点的 docker 镜像(注意,这会有几百兆的下载):

$ git clone http://github.com/karlfloersch/docker-pyeth-dev
$ cd docker-pyeth-dev
$ make new-account
🌟 Creating keystore directory at ./validator/data/config/keystore
🌟 Enter a new password to encrypt your account:
🌟 Your password is stored at ./validator/data/config/password.txt
🌟 Pyethapp container is creating new address for you, might take few seconds:

运行:

$ make run-node bootstrap_node=enode://d3260a710a752b926bb3328ebe29bfb568e4fb3b4c7ff59450738661113fb21f5efbdf42904c706a9f152275890840345a5bc990745919eeb2dfc2c481d778ee@54.167.247.63:30303

如果 encode 不成功的话,试一下这个:enode://a120401858c93f0be73ae7765930174689cad026df332f7e06a047ead917cee193e9210e899c3143cce55dd991493227ecea15de42aa05b9b730d2189e19b567@52.87.179.32:30303

如果正在运行一个节点,那么你可以使用 web3.py 来接入它:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
20a0dfe1d9e2        casper-validator    "sh /root/start.sh p…"   18 minutes ago      Up 18 minutes       8545/tcp, 30303/tcp, 30303/udp   validator
$ docker exec -it 20a0dfe1d9e2 python

运行 docker ps,用输出中出现的 container ID 替换 20a0dfe1d9e2。然后在出现的 Python console 里面重复上面的 web3 指引,不过要用
Web3(HTTPProvider('http://localhost:8545')) 来替换远端节点(remote node)。

要挖矿的话:

$ make run-node mine_percent=90 bootstrap_node=enode://d3260a710a752b926bb3328ebe29bfb568e4fb3b4c7ff59450738661113fb21f5efbdf42904c706a9f152275890840345a5bc990745919eeb2dfc2c481d778ee@54.167.247.63:30303

如果出现下面的错误:

docker: Error response from daemon: Conflict. The container name "/validator" is already in use...

那么,运行 docker rm validator 即可解决。

运行一个验证者

首先,要成为一个验证人,你需要有足够的测试网 ETH。你可以通过挖矿,或是向我们要 ETH(faucet 也会很快有的)。

如果向我们要 ETH 的话,你需要有一个 ETH 地址。可以使用自己已经生成的一个 keystore 文件,比如使用 geth 或者 pyeth_keys,或者是使用 docker 工具来生成一个地址。

通过运行上面的 make new-account 命令,以一个验证人的身份登录,运行:

make run-node validate=true deposit=2000 bootstrap_node=enode://d3260a710a752b926bb3328ebe29bfb568e4fb3b4c7ff59450738661113fb21f5efbdf42904c706a9f152275890840345a5bc990745919eeb2dfc2c481d778ee@54.167.247.63:30303

将 2000 改为你想要存入的任意数目 ETH (最低 1500)。

随后,让 docker 节点保持运行即可。注意,从登录到进入活跃的验证人集合并开始投票,将会花费大概 1.5 代(dynasty)(通常 30 分钟左右)的时间。

检查状态

除了 web3 路由,你可以通过 Python console 进行节点的不同玩法。在 Python console 中输入 Ctrl+C,你会看到一个提示:Hit [ENTER], to launch console; [Ctrl+C] again to quit! [0s]。再次输入 Ctrl+C,你就会进入 console 了。

在 Python console 中,你可以使用 eth.chain 来获取 pyethereum Chain 对象(文档在 这里)。使用 eth.services.accounts.accounts[0].address 来获得你的验证人地址,地址同样也可以作为验证者的一种 ID。你也可以创建一个 Python 对象来调用 Casper 合约的命令:

>> import urllib.request, json
>> casper_abi = casper_abi = json.load(urllib.request.urlopen( "https://gist.githubusercontent.com/vbuterin/868a6213b058fb4f1fdfcf64e54f0e91/raw/33fc177da3863ec320d1ebf95816ba52ffbffbe8/casper_abi"))
>> from ethereum.tools import tester
>> casper = tester.ABIContract(tester.State(eth.chain.state), casper_abi, '0xbd832b0cd3291c39ef67691858f35c71dfb3bf21')
>> casper.get_current_epoch()
# This should return the current epoch number

获取自身数据:

>> my_index = casper.get_validator_indexes(eth.services.accounts.accounts[0].address)
>> 
# This should return your current deposit size
>> casper.get_deposit_size(my_index)
>> 
# This should return the current dynasty, and your validator's start and end dynasty
>> casper.get_dynasty(), casper.get_validators__start_dynasty(my_index), casper.get_validators__end_dynasty(my_index)

使用 eth.app.services.chain.broadcast_transaction(tx) 来广播一笔交易。

输入 Ctrl+D 来退出 pyethapp。

退出

你可以使用下面的命令退出:

make run-node validate=true logout=true bootstrap_node=enode://d3260a710a752b926bb3328ebe29bfb568e4fb3b4c7ff59450738661113fb21f5efbdf42904c706a9f152275890840345a5bc990745919eeb2dfc2c481d778ee@54.167.247.63:30303

然后任由验证人运行,当撤销阶段(withdrawal period )结束,它会自动发送另外一笔交易来撤销你的验证人身份。

注意,通常来说,保持在线是很重要的。作为一个验证人,只有当你的在线时长超过普通情况的一半,才可能盈利。如果很多其他验证人离线,那么你可能需要几乎保持时刻在线,才能够不招致损失。

Cardano
Web note ad 1