prysm-pulse/contracts/validator-registration-contract
Nishant Das 75a431c969 Modify PowChain service (#1289)
* changing handling of logs

* gazelle

* removing outdated vars

* fixing tests

* adding vrc bindings to service

* updating vrc sol and bindings

* more changes

* adding trie

* remove functions

* addressing preston's review

* tests

* gazelle

* fixed tests

* note

* Lint

* doc

* exploration test

* adding new methods and tests

* adding log type checker

* lint

* gazelle

* addressing comments
2019-01-16 22:01:21 +08:00
..
deployVRC Add simple version to binaries via golink (#1286) 2019-01-09 23:19:33 -05:00
.soliumignore Remove Contract Package from Client (#396) 2018-08-12 15:50:42 -07:00
BUILD.bazel Modify PowChain service (#1289) 2019-01-16 22:01:21 +08:00
README.md Update Registration Contract in Solidity (#996) 2018-11-30 07:12:23 -08:00
SafeMath.sol add-safemath (#1217) 2019-01-01 08:10:56 -08:00
validator_registration_test.go Modify PowChain service (#1289) 2019-01-16 22:01:21 +08:00
validator_registration.go Modify PowChain service (#1289) 2019-01-16 22:01:21 +08:00
validator_registration.sol Modify PowChain service (#1289) 2019-01-16 22:01:21 +08:00

Validator Registration Contract

A validator will deposit 32 ETH to the registration contract. The contract will generate a receipt showing the validator as a qualified validator. The deposit is considered to be burned. As you burn the 32 ETH to participate, the beacon chain will see it and will credit the validator with the validator bond, At some point in the future, after a hard fork, the original deposit + interest can be withdrawn back on one of the shards.
To call the registration function, it takes arguments of pubkey, proof_of_possession, withdrawal_credentials and randao_commitment. If the user wants to deposit more than DEPOSIT_SIZE ETH, they would need to make multiple registration calls.
When the contract publishes the ChainStart log, beacon nodes will start off the beacon chain with slot 0 and last recorded block.timestamp as beacon chain genesis time. The registration contract generate receipts with the various arguments for consumption by beacon nodes. It does not validate proof_of_possession and withdrawal_credentials, pushing the validation logic to the beacon chain.

How to execute tests

go test ./...

Run with -v option for detailed log output

go test ./... -v
=== RUN   TestSetupAndContractRegistration
--- PASS: TestSetupAndContractRegistration (0.01s)
=== RUN   TestRegisterWithLessThan32Eth
--- PASS: TestRegisterWithLessThan32Eth (0.00s)
=== RUN   TestRegisterWithMoreThan32Eth
--- PASS: TestRegisterWithMoreThan32Eth (0.00s)
=== RUN   TestRegisterTwice
--- PASS: TestRegisterTwice (0.01s)
=== RUN   TestRegister
--- PASS: TestRegister (0.01s)
PASS
ok      beacon-chain/contracts  0.151s