欢迎来到基于 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 )结束,它会自动发送另外一笔交易来撤销你的验证人身份。
注意,通常来说,保持在线是很重要的。作为一个验证人,只有当你的在线时长超过普通情况的一半,才可能盈利。如果很多其他验证人离线,那么你可能需要几乎保持时刻在线,才能够不招致损失。