歡迎來到基于 pyethereum的第一個 alpha Casper FFG 測試網(wǎng)版本。該測試網(wǎng)彰顯了在加密經(jīng)濟(jì)學(xué) POS 上數(shù)年的工作成果,以及客戶端幾個月以來的緊密開發(fā)鞋囊。這是一個功能齊全,完全可用的網(wǎng)絡(luò)指郁,用戶可以發(fā)送交易挂脑,挖礦和成為驗(yàn)證人。但是景醇,距離網(wǎng)絡(luò)完全可以上線臀稚,仍然還有一些距離。一些參數(shù)與最終設(shè)置不同三痰,此外吧寺,比起其他使用更快語言實(shí)現(xiàn)的客戶端,目前唯一可用的客戶端 pyethereum散劫,在處理容量上相對要低得多稚机。因此,為了保證網(wǎng)絡(luò)的可持續(xù)性获搏,網(wǎng)絡(luò)參數(shù)將會嚴(yán)格受限赖条。千萬不要期待測試網(wǎng)的性能可以比得上 Geth 和 Parity 這樣優(yōu)秀的客戶端。
什么是 Casper FFG,它是如何工作的
這個話題已經(jīng)超出了本文內(nèi)容纬乍,你可以在下面的鏈接中找到更多信息:
本文接下來的部分碱茁,將假定您對 Casper FFG 已經(jīng)有了一定的了解。
前言
如果你想要直接運(yùn)行節(jié)點(diǎn)仿贬,可以直接進(jìn)入下一節(jié)(“運(yùn)行節(jié)點(diǎn)”)纽竣。
在這里查看 ethstats :http://34.203.42.208:3000/
此外,你也可以使用 web3 (通過 sudo pip3 install web3
進(jìn)行安裝)茧泪,像下面這樣連接到一個節(jié)點(diǎn)(假設(shè)使用 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 合約 蜓氨,你可以看到可以調(diào)用的所有函數(shù)。任何公共變量(public variable)都有一個相對應(yīng)的 getter 方法队伟,比如语盈,如果變量 x
是公開的,那么就會有一個相對應(yīng)的 getter 方法 get_x()
缰泡;關(guān)于有哪些 getter 的更多信息刀荒,可以查看 Viper 文檔。
運(yùn)行一個節(jié)點(diǎn)
為了運(yùn)行一個節(jié)點(diǎn)棘钞,按照下列指引下載并運(yùn)行一個 Docker 實(shí)例:
在 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泼返。
獲取測試網(wǎng)節(jié)點(diǎn)的 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:
運(yùn)行:
$ make run-node bootstrap_node=enode://d3260a710a752b926bb3328ebe29bfb568e4fb3b4c7ff59450738661113fb21f5efbdf42904c706a9f152275890840345a5bc990745919eeb2dfc2c481d778ee@54.167.247.63:30303
如果 encode 不成功的話姨拥,試一下這個:enode://a120401858c93f0be73ae7765930174689cad026df332f7e06a047ead917cee193e9210e899c3143cce55dd991493227ecea15de42aa05b9b730d2189e19b567@52.87.179.32:30303
绅喉。
如果正在運(yùn)行一個節(jié)點(diǎn),那么你可以使用 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
運(yùn)行 docker ps
叫乌,用輸出中出現(xiàn)的 container ID 替換 20a0dfe1d9e2
柴罐。然后在出現(xiàn)的 Python console 里面重復(fù)上面的 web3 指引,不過要用
Web3(HTTPProvider('http://localhost:8545'))
來替換遠(yuǎn)端節(jié)點(diǎn)(remote node)憨奸。
要挖礦的話:
$ make run-node mine_percent=90 bootstrap_node=enode://d3260a710a752b926bb3328ebe29bfb568e4fb3b4c7ff59450738661113fb21f5efbdf42904c706a9f152275890840345a5bc990745919eeb2dfc2c481d778ee@54.167.247.63:30303
如果出現(xiàn)下面的錯誤:
docker: Error response from daemon: Conflict. The container name "/validator" is already in use...
那么革屠,運(yùn)行 docker rm validator
即可解決。
運(yùn)行一個驗(yàn)證者
首先排宰,要成為一個驗(yàn)證人似芝,你需要有足夠的測試網(wǎng) ETH。你可以通過挖礦板甘,或是向我們要 ETH(faucet 也會很快有的)党瓮。
如果向我們要 ETH 的話,你需要有一個 ETH 地址盐类∧椋可以使用自己已經(jīng)生成的一個 keystore 文件痕寓,比如使用 geth 或者 pyeth_keys,或者是使用 docker 工具來生成一個地址蝇闭。
通過運(yùn)行上面的 make new-account
命令呻率,以一個驗(yàn)證人的身份登錄,運(yùn)行:
make run-node validate=true deposit=2000 bootstrap_node=enode://d3260a710a752b926bb3328ebe29bfb568e4fb3b4c7ff59450738661113fb21f5efbdf42904c706a9f152275890840345a5bc990745919eeb2dfc2c481d778ee@54.167.247.63:30303
將 2000 改為你想要存入的任意數(shù)目 ETH (最低 1500)呻引。
隨后礼仗,讓 docker 節(jié)點(diǎn)保持運(yùn)行即可。注意逻悠,從登錄到進(jìn)入活躍的驗(yàn)證人集合并開始投票元践,將會花費(fèi)大概 1.5 代(dynasty)(通常 30 分鐘左右)的時間。
檢查狀態(tài)
除了 web3 路由童谒,你可以通過 Python console 進(jìn)行節(jié)點(diǎn)的不同玩法单旁。在 Python console 中輸入 Ctrl+C,你會看到一個提示:Hit [ENTER], to launch console; [Ctrl+C] again to quit! [0s]
饥伊。再次輸入 Ctrl+C
象浑,你就會進(jìn)入 console 了。
在 Python console 中琅豆,你可以使用 eth.chain
來獲取 pyethereum Chain 對象(文檔在 這里)愉豺。使用 eth.services.accounts.accounts[0].address
來獲得你的驗(yàn)證人地址,地址同樣也可以作為驗(yàn)證者的一種 ID茫因。你也可以創(chuàng)建一個 Python 對象來調(diào)用 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
獲取自身數(shù)據(jù):
>> 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
然后任由驗(yàn)證人運(yùn)行冻押,當(dāng)撤銷階段(withdrawal period )結(jié)束驰贷,它會自動發(fā)送另外一筆交易來撤銷你的驗(yàn)證人身份。
注意洛巢,通常來說括袒,保持在線是很重要的。作為一個驗(yàn)證人狼渊,只有當(dāng)你的在線時長超過普通情況的一半箱熬,才可能盈利类垦。如果很多其他驗(yàn)證人離線狈邑,那么你可能需要幾乎保持時刻在線,才能夠不招致?lián)p失蚤认。