Alpha Casper FFG 测试网指南

欢迎来到基于 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 )结束,它会自动发送另外一笔交易来撤销你的验证人身份。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WindCoder

区块链一键登录:MetaMask教程(One-click Login with Blockchain: A MetaMask Tutorial)

在线用户对传统电子邮件/密码注册流程的抵抗力日益增强。通过Facebook,Google或GitHub的一键式社交登录功能被证明是更理想的选择。然而,它存在一种...

2722
来自专栏SDNLAB

话说VLAN Tag 的“来龙去脉”

前言 自从上篇文章《三层交换机的工作原理》发布后,有很多的网络爱好者私底下与我取得了联系,针对当前的TCP/IP网络做了很多的探讨,从这些爱好者身上我也学习到了...

47111
来自专栏VMCloud

【解析向】腾讯云的Windows Server日志配置收集工具是个什么鬼?(5)

且听笔者一句劝,无论是Windows还是Linux抑或是Unix都是大部分理论是相同的,与其与人争吵对比这几个平台之类的差异,不如好好研究下底层的各个子系统...

2557
来自专栏大魏分享(微信公众号:david-share)

API管理平台的部署方式和成功案例

API Manager和API网关公有云托管方式。客户将自己的API后端集成到API网关

1142
来自专栏DHUtoBUAA

C#实现局域网内远程开机

1、远程开机原理      远程开机Wake on LAN(WOL),俗称远程唤醒,远程唤醒的实现主要是向目标主机发送特殊格式的数据包,是AMD公司制作的Mag...

4429
来自专栏格子的个人博客

Vmware vSphere hypervisor 6.5 安装教程

有vmware账号的,可以直接进入绿色通道登录进行下载,如果没有,可以按照下列步骤选择性操作。

3842
来自专栏菩提树下的杨过

windows 7 安装及.net开发环境搭建

明天是win7中文版的正式发售日期,作为MS的粉丝,特地在今天到网上down了一个D版(是旗舰版哦!)体验了一把,基于xp/vista在web程序员心中的恶劣印...

2335
来自专栏Grace development

PHP程序员如何简单的开展服务治理架构(二)

服务治理 治理的绝笔是服务,在一家公司有玩各种语言的程序员,如何去统一管理他们开发的服务,这是一个问题。

1802
来自专栏北京马哥教育

推荐!国外程序员整理的系统管理员资源大全(一)

备份软件 Amanda -客户端-服务器模型备份工具 Bacula - 另一个客户端-服务器模型备份工具 Backupninja -轻量级,可扩展的元数据备份系...

52410
来自专栏FreeBuf

玩爆EDUP智能插座Part1

智能插座实现了远程开启/关闭连入的设备,的确是一款懒人神器!其实现原理就是通过WiFi模块实现对继电器的开启或者关闭。EDUP智能插座通过用户提供的凭证连接家庭...

20510

扫码关注云+社区

领取腾讯云代金券