現在の Ethereum (1.0) に大幅な変更(Proof of Stake (PoS) やシャーディングなど)を加えた次世代 Ethereum。
開発コードネームは Serenity。
現在仕様の策定が行われている最中だが、ちょっと動くよ的な実装が出てきたので試してみよう。とりあえずインストールから。
複数の実装があるが、今回はPrysmをお試ししてみました。
Github仕様
https://github.com/ethereum/eth2.0-specs
開発のフェーズ
Ethereum2.0の開発は0〜2のフェーズに分けていて、フェーズ0はBeacon Chain.
フェーズ1はShard Chains、フェーズ2はState Executionと言っている。
フェーズ0Beacon ChainでPoSプロトコル対応、アテステーション、投票などを対応。
フェーズ1Shard Chainsでシャーディングにより負荷分散。
フェーズ2State ExecutionでVMがeWASMで動作するようになる。既存のコンパイラエコシステム(solcなど)が対応してくれるはず。
と言っている。(言っている)
prysmとは
prysmは Prysmatic Labs が開発しているEthreum2.0ビーコンノードとバリデータークライアント。
(a full featured sharding client for Ethereum 2.0
と謳っているよ。)
https://prysmaticlabs.com/
https://github.com/prysmaticlabs/prysm
https://prysmaticlabs.gitbook.io/prysm/how-prysm-works/basic-architecture-overview
とりあえずフェーズ0のtestnet用の実装ができたから試してみてよ!って雰囲気。
インストール&セットアップ
この手順通りやればおk。
https://alpha.prylabs.net/participate
Dockerイメージが用意されていてインストールはすんなり終わる。その後、専用のネットワークでMetamaskと連携したり送金すればバリデータノードになれる模様。
Docker pull
難しいことはない。pullするだけ。Dockerは入れておけよ。
~/tmp/kirameki
❯ docker pull gcr.io/prysmaticlabs/prysm/validator:sapphire
docker pull gcr.io/prysmaticlabs/prysm/beacon-chain:sapphire
sapphire: Pulling from prysmaticlabs/prysm/validator
07accba52567: Pull complete
504c4248e1c7: Pull complete
Digest: sha256:fce2b0d6b0a6d35a575f8f6b8b4eabb36b2cbd9f0131088d6caef65adc264e1a
Status: Downloaded newer image for gcr.io/prysmaticlabs/prysm/validator:sapphire
sapphire: Pulling from prysmaticlabs/prysm/beacon-chain
07accba52567: Already exists
556f4a32d7b7: Pull complete
Digest: sha256:5e0a81c3ad5221c1f2e9a2836e55c2d3dc93a6f5d81a62188822266f5da1daa2
Status: Downloaded newer image for gcr.io/prysmaticlabs/prysm/beacon-chain:sapphire
Step1 Beacon Node 起動
run するだけ。
~/tmp/kirameki 7s
❯ docker run -v /tmp/prysm-data:/data -p 4000:4000 \
gcr.io/prysmaticlabs/prysm/beacon-chain:latest \
--datadir=/data
--clear-db
Unable to find image 'gcr.io/prysmaticlabs/prysm/beacon-chain:latest' locally
latest: Pulling from prysmaticlabs/prysm/beacon-chain
07accba52567: Already exists
43df4a039f45: Pull complete
Digest: sha256:d9a59ad42cf5e29b5064e9e1600820d4cccd6cbdb4eec5f76b2b5d58c84c182a
Status: Downloaded newer image for gcr.io/prysmaticlabs/prysm/beacon-chain:latest
time="2019-06-11 06:47:09" level=info msg="Using custom parameter configuration" prefix=node
time="2019-06-11 06:47:09" level=info msg="Checking db" path="/data/beaconchaindata" prefix=node
time="2019-06-11 06:47:09" level=info msg="Fetching testnet cluster address" endpoint="https://beta.prylabs.net/contract" prefix=node
time="2019-06-11 06:47:11" level=info msg="Starting beacon node" prefix=node version="Git commit: d9ee55013d04dc7fd255cd1a981d6bdb4a24fa41. Built at: 2019-06-10 18:35:06+00:00"
time="2019-06-11 06:47:11" level=info msg="Starting 8 services: [*p2p.Server *powchain.Web3Service *attestation.Service *operations.Service *blockchain.ChainService *sync.Service *rp
c.Service *prometheus.Service]" prefix=registry
time="2019-06-11 06:47:11" level=info msg="Starting service" prefix=p2p
time="2019-06-11 06:47:11" level=info msg="Starting service" endpoint="wss://goerli.prylabs.net/websocket" prefix=powchain
time="2019-06-11 06:47:11" level=info msg="Starting service" prefix=attestation
time="2019-06-11 06:47:11" level=info msg="Starting service" prefix=operation
time="2019-06-11 06:47:11" level=info msg="Waiting for ChainStart log from the Validator Deposit Contract to start the beacon chain..." prefix=blockchain
time="2019-06-11 06:47:11" level=info msg="Starting service" prefix=sync
time="2019-06-11 06:47:11" level=info msg="Starting service" prefix=rpc
time="2019-06-11 06:47:11" level=info msg="Listening on port" port=4000 prefix=rpc
time="2019-06-11 06:47:11" level=warning msg="You are using an insecure gRPC connection! Provide a certificate and key to connect securely" prefix=rpc
time="2019-06-11 06:47:11" level=info msg="Starting service" endpoint=":8080" prefix=prometheus
time="2019-06-11 06:47:18" level=info msg="Minimum number of validators reached for beacon-chain to start" ChainStartTime=2019-05-28 12:46:00 +0000 UTC prefix=powchain
time="2019-06-11 06:47:18" level=info msg="ChainStart time reached, starting the beacon chain!" prefix=blockchain
time="2019-06-11 06:47:18" level=info msg="Validator activated" activationEpoch=0 index=0 prefix=validator
Step2 MetaMaskにGoerli networkを追加
eth1.0の独自のtestnetを登録する。
https://goerli.prylabs.net をMetaMaskに登録する。
接続が確認できると次に進める。(エラーの場合、画面の下にメッセージが表示される。
そのままYesで進んでいく。
Step3 バリデータノードの起動
~/tmp/kirameki
❯ docker run -it -v /tmp/prysm-data:/data \
gcr.io/prysmaticlabs/prysm/validator:sapphire \
accounts create --keystore-path=/data --password=KINGKINGKING
[2019-06-11 07:01:46] INFO accounts: Keystore generated for shard withdrawals at path path=/data/shardwithdrawalkeya73a5986d39b
[2019-06-11 07:01:47] INFO accounts: Keystore generated for validator signatures at path path=/data/validatorprivatekeyb1cd95b655be
[2019-06-11 07:01:47] INFO accounts: Account creation complete! Copy and paste the deposit data shown below when issuing a transaction into the ETH1.0 deposit contract to activate your validator client
========================Deposit Data=======================
0xbc00000060000000b1cd95b655be658c7ecd319960fdd4afedd327bcc5789609ae948ed7216597a75e25b628bd7a857e0489b41877ae4ec3147d021d81183f5d91f955b26074be64b0612d0c7b102bf8c4c6028754ca10ef00086bf79d228bf9d41e24593d110dfb30000000962a786079790f488972562b4bfb7194c3e97ce8bf5dad77435b4ed70e4fd8bcedcea0dee3860c451347dddfe82367b32000000000ebe1c01e5c89dc2a796aa76567b2dc571805d9bd13a585a6a0ce1501e7eb86
===========================================================
起動するとDeposit Dataが出てくるのでそれをブラウザにコピペする。
Step4 Beaconノードにつなぐようにバリデータの起動
ビーコンを起動したのとは別のターミナルでVaridatorを起動する。
~/tmp/kirameki
❯ docker run -it -v /tmp/prysm-data:/data --network="host" \
gcr.io/prysmaticlabs/prysm/validator:sapphire \
--beacon-rpc-provider=127.0.0.1:4000 \
--keystore-path=/data \
--password=KINGKINGKING
[2019-06-11 07:05:47] INFO node: Using custom parameter configuration
[2019-06-11 07:05:47] INFO node: Starting validator node version=Git commit: becd06553b860a7c24c19f43e5e8e1841c57479b. Built at: 2019-05-17 23:48:17+00:00
[2019-06-11 07:05:47] INFO registry: Starting 2 services: [*prometheus.Service *client.ValidatorService]
[2019-06-11 07:05:47] INFO prometheus: Starting service endpoint=:8080
[2019-06-11 07:05:47] INFO validator: Initializing new validator service publicKey=0xb1cd95b655be658c7ecd319960fdd4afedd327bcc5789609ae948ed7216597a75e25b628bd7a857e0489b41877ae4ec3147d021d81183f5d91f955b26074be64b0612d0c7b102bf8c4c6028754ca10ef00086bf79d228bf9d41e24593d110dfb
[2019-06-11 07:05:47] WARN validator: You are using an insecure gRPC connection! Please provide a certificate and key to use a secure connection.
[2019-06-11 07:05:47] INFO validator: Successfully started gRPC connection
[2019-06-11 07:05:47] INFO validator: Waiting for beacon chain start log from the ETH 1.0 deposit contract...
Step5
デポジットしてねってことなので送金。
Step6
しばらく待てばアクティベーションされるから待ってな。とのことで待つ。
statusがPENDING_ACTIVEに代わり、ACTIVEに変わる。
~snip;
[2019-06-11 07:12:20] INFO validator: Waiting for validator to be activated in the beacon chain
[2019-06-11 07:12:20] INFO validator: Not yet included in state... publicKey=0xb1cd95b655be658c7ecd3199 status=UNKNOWN_STATUS
[2019-06-11 07:12:27] INFO validator: Waiting for validator to be activated in the beacon chain
[2019-06-11 07:12:27] INFO validator: Waiting to be activated depositInclusionSlot=198235 positionInActivationQueue=1 publicKey=0xb1cd95b655be658c7ecd3199 status=PENDING_ACTIVE
[2019-06-11 07:12:33] INFO validator: Waiting for validator to be activated in the beacon chain
[2019-06-11 07:12:33] INFO validator: Waiting to be activated depositInclusionSlot=198235 positionInActivationQueue=1 publicKey=0xb1cd95b655be658c7ecd3199 status=PENDING_ACTIVE
[2019-06-11 07:12:39] INFO validator: Waiting for validator to be activated in the beacon chain
~snip;
[2019-06-11 07:16:19] INFO validator: Waiting to be activated depositInclusionSlot=198235 positionInActivationQueue=1 publicKey=0xb1cd95b655be658c7ecd3199 status=PENDING_ACTIVE
[2019-06-11 07:16:25] INFO validator: Waiting for validator to be activated in the beacon chain
[2019-06-11 07:16:25] INFO validator: Validator status activationEpoch=24788 depositInclusionSlot=198235 positionInActivationQueue=0 publicKey=0xb1cd95b655be658c7ecd3199 status=ACTIVE
[2019-06-11 07:16:25] INFO validator: Validator activated publicKey=0xb1cd95b655be658c7ecd319960fdd4afedd327bcc5789609ae948ed7216597a75e25b628bd7a857e0489b41877ae4ec3147d021d81183f5
d91f955b26074be64b0612d0c7b102bf8c4c6028754ca10ef00086bf79d228bf9d41e24593d110dfb
[2019-06-11 07:16:25] INFO validator: New assignment attesterSlot=198308 proposerSlot=Not proposing shard=0 status=ACTIVE validator=b1cd95b655be
[2019-06-11 07:16:25] INFO validator: Updated validator assignments assignments=1
~snip;
まとめ
とりあえず起動した。RPC等がすでに実装されているのかまでは見ていません。
gRPCだったりk8sで設定ファイルがあったりするみたいです。強いプロジェクトですね。
続きは長くなったのでまた次の機会に。