Go to file
Raul Jordan 75521fffbd
Implement ListBeaconCommittees RPC Method (#3977)
* Update seed domains (#3872)

* Remove Transfers (#3870)

* Remove active index roots and compact committee roots (#3869)

* Update inclusion reward (#3886)

* Alter proposer selection logic (#3884)

* Fix early committee bias (#3888)

* Remove shards and committees (#3896)

* Epoch spec tests v0.9 (#3907)

* Block spec test v0.9 (#3905)

* rm'ed in protobuf

* build proto

* build proto

* build proto

* fix core package

* Gazelle

* Fixed all the tests

* Fixed static test

* Comment out spec test for now

* One more skip

* fix-roundRobinSync (#3862)

* Starting but need new seed function

* Revert initial sync

* Updated Proposer Slashing

* Fixed all tests

* Lint

* Update inclusion reward

* Fill randao mixes with eth1 data hash

* Test

* Fixing test part1

* All tests passing

* One last test

* Updated config

* Build proto

* Proper skip message

* Conflict and fmt

* Removed crosslinks and shards. Built

* Format and gazelle

* Fixed all the block package tests

* Fixed all the helper tests

* All epoch package tests pass

* All core package tests pass

* Fixed operation tests

* Started fixing rpc test

* RPC tests passed!

* Fixed all init sync tests

* All tests pass

* Fixed blockchain tests

* Lint

* Lint

* Preston's feedback

* Starting

* Remove container

* Fixed block spec tests

* All passing except for block_processing test

* Failing block processing test

* Starting

* Add AggregateAndProof

* All mainnet test passes

* Update deposit contract (#3906)

* Proto spec tests v0.9 (#3908)

* Starting

* Add AggregateAndProof

* Unskip block util tests (#3910)

* rm'ed in protobuf

* build proto

* build proto

* build proto

* fix core package

* Gazelle

* Fixed all the tests

* Fixed static test

* Comment out spec test for now

* One more skip

* fix-roundRobinSync (#3862)

* Starting but need new seed function

* Revert initial sync

* Updated Proposer Slashing

* Fixed all tests

* Lint

* Update inclusion reward

* Fill randao mixes with eth1 data hash

* Test

* Fixing test part1

* All tests passing

* One last test

* Updated config

* Build proto

* Proper skip message

* Conflict and fmt

* Removed crosslinks and shards. Built

* Format and gazelle

* Fixed all the block package tests

* Fixed all the helper tests

* All epoch package tests pass

* All core package tests pass

* Fixed operation tests

* Started fixing rpc test

* RPC tests passed!

* Fixed all init sync tests

* All tests pass

* Fixed blockchain tests

* Lint

* Lint

* Preston's feedback

* Starting

* Remove container

* Fixed block spec tests

* All passing except for block_processing test

* Failing block processing test

* Starting

* Add AggregateAndProof

* All mainnet test passes

* Unskip block util tests

* Slot processing spec test V0.9 (#3912)

* Starting

* Add AggregateAndProof

* Unskip slot processing mainnet test

* Unskip minimal spec test for finalization (#3920)

* Remove outdated interop tests (#3922)

* Rm outdated interop tests

* Rm test runner

* Gazelle

* Update validator to use proposer slot (#3919)

* Fix committee assignment (#3931)

* Replace shard with committee index (#3930)

* Conflict

* Clean up (#3933)

* Remove shard filter in db (#3936)

* Remove lightouse compatibility test (#3939)

* Update Committee Cache for v0.9 (#3948)

* Updated committee cache

* Removed shuffled indices cache

* Started testing run time

* Lint

* Fixed test

* Safeguard against nil head state

* address edge case

* add test

* Fixed TestRoundRobinSync by doubling the epochs

* Unskip TestProtoCompatability (#3958)

* Unskip TestProtoCompatability

* Update WORKSPACE

* Fix minimal config (#3959)

* fix minimal configs

* fix hardcoded value in test

* Simplify verify att time (#3961)

* update readme for deposit contract, regen bindings for vyper 0.1.0b12 (#3963)

* update readme for deposit contract, regen bindings

* medium

* Check nil base state (#3964)

* Copy Block When Receiving it From Sync (#3966)

* copy block

* clone for other service methods too

* Change logging of Bitfield  (#3956)

* change logging of bits

* preston's review

* Unskip Beacon Server Test (#3962)

* run test till the end

* fix up proto message types

* fmt

* resolve broken tests

* better error handling

* fixing new logic to use archived proposer info

* fix up logic

* clip using the max effective balance

* broken build fix with num arg mismatch

* amend archive

* archival logic changed

* rename test

* archive both proposer and attester seeds

* page size 100

* further experiments

* further experimentation, archivedProposerIndex seems wrong

* test passes

* rem log

* fix broken test

* fix test

* gaz

* fix imports

* ethapis

* setup request/response types for the committees

* list beacon committees impl

* beacon committees fetch from archive

* full list beacon committees implementation

* list beacon committees added more useful fields

* actually paginate

* attester server split into subpackage

* attester impl split up successfully

* validator cleaned up

* all packages isolated

* include proposer

* proper naming

* test fix

* proper viz

* naming

* resolved timeout due to config values

* init use minimal

* added all subfiles

* subfile split and gazelle

* shards

* validator folder

* cleanup val

* shay feedback

* initial pagination tests passing

* paginated tests pass

* fix bug regarding total count

* pagination tests pass

* adding final test, archive

* archive test works

* regen protos for archival

* resolve broken test

* test pass

* broken archive test

* rem helpers

* gaz

* fix kv test

* useful gRPC error code standards

* format

* resolved bad test

* test resolution

* ux improvements and bug fixes

* complete

* comments

* Update beacon-chain/archiver/service.go

* Update beacon-chain/rpc/beacon/committees.go

* elim bad test

* preston feedback
2019-11-12 23:32:42 -06:00
.github Create FUNDING.yml (#2800) 2019-06-17 01:49:06 -04:00
.well-known add security file (#2662) 2019-05-20 12:55:38 -04:00
beacon-chain Implement ListBeaconCommittees RPC Method (#3977) 2019-11-12 23:32:42 -06:00
contracts Update run time to v0.9 (#3935) 2019-11-11 17:03:43 -05:00
docs Update READINGS.md (#3832) 2019-10-24 10:11:03 +08:00
proto Implement ListBeaconCommittees RPC Method (#3977) 2019-11-12 23:32:42 -06:00
scripts Docker rpc (#3868) 2019-11-04 08:37:23 -06:00
shared Update run time to v0.9 (#3935) 2019-11-11 17:03:43 -05:00
slasher min max span update logic (#3951) 2019-11-12 09:24:56 -08:00
third_party Spec freeze updates (#2312) 2019-07-19 19:16:10 -05:00
tools Change GetValidatorParticipation to compute participation from previous epoch (#3988) 2019-11-12 23:17:34 -06:00
validator Validator clean up part 1 (#3976) 2019-11-12 09:14:03 -08:00
.bazelrc Prevent PATH changes from causing bazel rebuild (#3806) 2019-10-19 08:03:40 +05:30
.buildkite-bazelrc Spec freeze updates (#2312) 2019-07-19 19:16:10 -05:00
.codecov.yml Update codecov to ignore generated code (#2794) 2019-06-12 10:45:17 -04:00
.dockerignore Add tool and script for interop testing (#3417) 2019-09-09 17:31:19 -04:00
.gitattributes linguist-generated=true for mock and pb go files (#1465) 2019-02-02 17:25:28 -05:00
.gitignore Slasher grpc service (#3271) 2019-09-26 09:29:10 -07:00
.golangci.yml upgrading linter from gometalinter to golangci-lint (#2100) 2019-04-26 14:24:01 +08:00
.travis.yml Resolve Proto Lint Issues (#3044) 2019-07-22 14:10:17 -05:00
BUILD.bazel Spec freeze updates (#2312) 2019-07-19 19:16:10 -05:00
CONTRIBUTING.md Update CONTRIBUTING.md (#2679) 2019-05-23 06:30:00 -07:00
interop.Dockerfile Add tool and script for interop testing (#3417) 2019-09-09 17:31:19 -04:00
INTEROP.md Default genesisTime to now when generating a genesis state. (#3615) 2019-09-27 10:49:55 -05:00
LICENSE.md update to GPLv3 (#297) 2018-07-20 10:23:48 -05:00
nogo_config.json Nogo fix for mac (#3043) 2019-07-22 07:39:37 -07:00
PULL_REQUEST_TEMPLATE.md Update All Our Documentation (#2012) 2019-03-17 16:30:46 -06:00
README.md Docker rpc (#3868) 2019-11-04 08:37:23 -06:00
renovate.json Update renovate.json (#3780) 2019-10-14 15:23:20 -07:00
service-account.json.enc Bazel cache for travis (#236) 2018-07-07 16:01:58 -04:00
TESTNET.md Update TESTNET.md (#3831) 2019-10-23 17:53:33 +08:00
VERSION Spec freeze updates (#2312) 2019-07-19 19:16:10 -05:00
WORKSPACE Update run time to v0.9 (#3935) 2019-11-11 17:03:43 -05:00

Prysm: Ethereum 'Serenity' 2.0 Go Implementation

Build status ETH2.0_Spec_Version 0.8.1 Discord Gitter

This is the Core repository for Prysm, Prysmatic Labs' Go implementation of the Ethereum protocol 2.0 (Serenity).

Need assistance?

A more detailed set of installation and usage instructions as well as explanations of each component are available on our official documentation portal. If you still have questions, feel free to stop by either our Discord or Gitter and a member of the team or our community will be happy to assist you.

Interested in what's next? Be sure to read our Roadmap Reference Implementation document. This page outlines the basics of sharding as well as the various short-term milestones that we hope to achieve over the coming year.

Come join the testnet!

Participation is now open to the public in our testnet release for Ethereum 2.0 phase 0. Visit prylabs.net for more information on the project itself or to sign up as a validator on the network.

Table of Contents

Dependencies

Prysm can be installed either with Docker (recommended method) or using our build tool, Bazel. The below instructions include sections for performing both.

For Docker installations:

  • The latest release of Docker

For Bazel installations:

  • The latest release of Bazel
  • A modern UNIX operating system (MacOS included)

Installation

Build via Docker

  1. Ensure you are running the most recent version of Docker by issuing the command:
docker -v
  1. To pull the Prysm images from the server, issue the following commands:
docker pull gcr.io/prysmaticlabs/prysm/validator:latest
docker pull gcr.io/prysmaticlabs/prysm/beacon-chain:latest

This process will also install any related dependencies.

Build via Bazel

  1. Open a terminal window. Ensure you are running the most recent version of Bazel by issuing the command:
bazel version
  1. Clone this repository and enter the directory:
git clone https://github.com/prysmaticlabs/prysm
cd prysm
  1. Build both the beacon chain node implementation and the validator client:
bazel build //beacon-chain:beacon-chain
bazel build //validator:validator

Bazel will automatically pull and install any dependencies as well, including Go and necessary compilers.

  1. Build the configuration for the Prysm testnet by issuing the commands:
bazel build --define ssz=minimal //beacon-chain:beacon-chain
bazel build --define ssz=minimal //validator:validator

The binaries will be built in an architecture-dependent subdirectory of bazel-bin, and are supplied as part of Bazel's build process. To fetch the location, issue the command:

$ bazel build --define ssz=minimal //beacon-chain:beacon-chain
...
Target //beacon-chain:beacon-chain up-to-date:
  bazel-bin/beacon-chain/linux_amd64_stripped/beacon-chain
...

In the example above, the beacon chain binary has been created in bazel-bin/beacon-chain/linux_amd64_stripped/beacon-chain.

Running an Ethereum 2.0 Beacon Node

To understand the role that both the beacon node and validator play in Prysm, see this section of our documentation.

Running via Docker

Docker on Linux/Mac:

To start your beacon node, issue the following command:

docker run -v $HOME/prysm-data:/data -p 4000:4000 \
  --name beacon-node \
  gcr.io/prysmaticlabs/prysm/beacon-chain:latest \
  --no-genesis-delay \
  --datadir=/data

(Optional) If you want to enable gRPC, then run this command instead of the one above:

docker run -v $HOME/prysm-data:/data -p 4000:4000 -p 7000:7000 \
  --name beacon-node \
  gcr.io/prysmaticlabs/prysm/beacon-chain:latest \
  --datadir=/data \
  --no-genesis-delay \
  --grpc-gateway-port=7000

You can stop the beacon node using Ctrl+c or with the following command:

docker stop beacon-node

To restart the beacon node, issue the command:

docker start -ai beacon-node

To delete a corrupted container, issue the command:

docker rm beacon-node

To recreate a deleted container and refresh the chain database, issue the start command with an additional --force-clear-db parameter:

docker run -it -v $HOME/prysm-data:/data -p 4000:4000 --name beacon-node \
  gcr.io/prysmaticlabs/prysm/beacon-chain:latest \
  --datadir=/data \
  --force-clear-db

Docker on Windows:

  1. You will need to share the local drive you wish to mount to to container (e.g. C:).

    1. Enter Docker settings (right click the tray icon)
    2. Click 'Shared Drives'
    3. Select a drive to share
    4. Click 'Apply'
  2. You will next need to create a directory named /tmp/prysm-data/ within your selected shared Drive. This folder will be used as a local data directory for Beacon Node chain data as well as account and keystore information required by the validator. Docker will not create this directory if it does not exist already. For the purposes of these instructions, it is assumed that C: is your prior-selected shared Drive.

  3. To run the beacon node, issue the command:

docker run -it -v c:/tmp/prysm-data:/data -p 4000:4000 gcr.io/prysmaticlabs/prysm/beacon-chain:latest --datadir=/data

Running via Bazel

  1. To start your Beacon Node with Bazel, issue the command:
bazel run //beacon-chain -- --datadir=/tmp/prysm-data

This will sync up the Beacon Node with the latest head block in the network. Note that the beacon node must be completely synced before attempting to initialise a validator client, otherwise the validator will not be able to complete the deposit and funds will be lost.

Staking ETH: Running a Validator Client

Once your beacon node is up, the chain will be waiting for you to deposit 3.2 Goerli ETH into the Validator Deposit Contract to activate your validator (discussed in the section below). First though, you will need to create a validator client to connect to this node in order to stake and participate. Each validator represents 3.2 Goerli ETH being staked in the system, and it is possible to spin up as many as you desire in order to have more stake in the network.

Activating Your Validator: Depositing 3.2 Goerli ETH

Using your validator deposit data from the previous step, follow the instructions found on https://prylabs.net/participate to make a deposit.

It will take a while for the nodes in the network to process your deposit, but once your node is active, the validator will begin doing its responsibility. In your validator client, you will be able to frequently see your validator balance as it goes up over time. Note that, should your node ever go offline for a long period, you'll start gradually losing your deposit until you are removed from the system.

Starting the validator with Bazel

  1. Open another terminal window. Enter your Prysm directory and run the validator by issuing the following command:
cd prysm
bazel run //validator

Congratulations, you are now running Ethereum 2.0 Phase 0!

Testing Prysm

To run the unit tests of our system, issue the command:

bazel test //...

To run the linter, make sure you have golangci-lint installed and then issue the command:

golangci-lint run

Contributing

We have put all of our contribution guidelines into CONTRIBUTING.md! Check it out to get started.

License

GNU General Public License v3.0