From b8eb25843f80e1fba3e58280e5f0d5df002c7513 Mon Sep 17 00:00:00 2001 From: Ivan Martinez Date: Tue, 6 Nov 2018 22:13:46 +0100 Subject: [PATCH] Updates Public Key from bytes32 to bytes in Validator Registration Contract (#630) --- .codecov.yml | 5 +- .../validator_registration.go | 72 +++++++++---------- .../validator_registration.sol | 25 ++++--- .../validator_registration_test.go | 33 +++++++-- 4 files changed, 85 insertions(+), 50 deletions(-) diff --git a/.codecov.yml b/.codecov.yml index b1e3b426f4..1c90602afd 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -8,7 +8,10 @@ coverage: range: "70...100" status: - project: yes + project: + default: + target: auto + threshold: 1% patch: no changes: no diff --git a/contracts/validator-registration-contract/validator_registration.go b/contracts/validator-registration-contract/validator_registration.go index 904f220a03..41545250ce 100644 --- a/contracts/validator-registration-contract/validator_registration.go +++ b/contracts/validator-registration-contract/validator_registration.go @@ -16,10 +16,10 @@ import ( ) // ValidatorRegistrationABI is the input ABI used to generate the binding from. -const ValidatorRegistrationABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"usedPubkey\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"VALIDATOR_DEPOSIT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_pubkey\",\"type\":\"bytes32\"},{\"name\":\"_withdrawalShardID\",\"type\":\"uint256\"},{\"name\":\"_withdrawalAddressbytes32\",\"type\":\"address\"},{\"name\":\"_randaoCommitment\",\"type\":\"bytes32\"}],\"name\":\"deposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"pubKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"withdrawalShardID\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"withdrawalAddressbytes32\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"randaoCommitment\",\"type\":\"bytes32\"}],\"name\":\"ValidatorRegistered\",\"type\":\"event\"}]" +const ValidatorRegistrationABI = "[{\"constant\":true,\"inputs\":[],\"name\":\"VALIDATOR_DEPOSIT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"usedHashedPubkey\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_pubkey\",\"type\":\"bytes\"},{\"name\":\"_withdrawalShardID\",\"type\":\"uint256\"},{\"name\":\"_withdrawalAddressbytes32\",\"type\":\"address\"},{\"name\":\"_randaoCommitment\",\"type\":\"bytes32\"}],\"name\":\"deposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hashedPubkey\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"withdrawalShardID\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"withdrawalAddressbytes32\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"randaoCommitment\",\"type\":\"bytes32\"}],\"name\":\"ValidatorRegistered\",\"type\":\"event\"}]" // ValidatorRegistrationBin is the compiled bytecode used for deploying new contracts. -const ValidatorRegistrationBin = `0x608060405234801561001057600080fd5b5061028b806100206000396000f3006080604052600436106100565763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301110845811461005b578063441d92cc14610087578063881d2135146100ae575b600080fd5b34801561006757600080fd5b506100736004356100da565b604080519115158252519081900360200190f35b34801561009357600080fd5b5061009c6100ef565b60408051918252519081900360200190f35b6100d860043560243573ffffffffffffffffffffffffffffffffffffffff604435166064356100fc565b005b60006020819052908152604090205460ff1681565b6801bc16d674ec80000081565b346801bc16d674ec8000001461017357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e636f72726563742076616c696461746f72206465706f7369740000000000604482015290519081900360640190fd5b60008481526020819052604090205460ff16156101f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5075626c6963206b657920616c72656164792075736564000000000000000000604482015290519081900360640190fd5b60008481526020818152604091829020805460ff1916600117905581518581529151839273ffffffffffffffffffffffffffffffffffffffff86169288927f7b0678aab009b61a805f5004869728b53a444f9a3e6bb9e22b8537c89af512749281900390910190a4505050505600a165627a7a72305820d03bf76dbc13e295ebf71105cad010b9ad8cdab11893b90df7e8e789cb3f52150029` +const ValidatorRegistrationBin = `0x608060405234801561001057600080fd5b50610406806100206000396000f3006080604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663441d92cc811461005b5780638618d77814610082578063878df5ac146100ae575b600080fd5b34801561006757600080fd5b5061007061011e565b60408051918252519081900360200190f35b34801561008e57600080fd5b5061009a60043561012b565b604080519115158252519081900360200190f35b6040805160206004803580820135601f810184900484028501840190955284845261011c9436949293602493928401919081908401838280828437509497505084359550505050602082013573ffffffffffffffffffffffffffffffffffffffff1691604001359050610140565b005b6801bc16d674ec80000081565b60006020819052908152604090205460ff1681565b6000346801bc16d674ec800000146101b957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e636f72726563742076616c696461746f72206465706f7369740000000000604482015290519081900360640190fd5b845160301461022957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5075626c6963206b6579206973206e6f74203438206279746573000000000000604482015290519081900360640190fd5b846040516020018082805190602001908083835b6020831061025c5780518252601f19909201916020918201910161023d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106102bf5780518252601f1990920191602091820191016102a0565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120600081815291829052929020549194505060ff1615915061036b905057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5075626c6963206b657920616c72656164792075736564000000000000000000604482015290519081900360640190fd5b60008181526020818152604091829020805460ff1916600117905581518681529151849273ffffffffffffffffffffffffffffffffffffffff87169285927f7b0678aab009b61a805f5004869728b53a444f9a3e6bb9e22b8537c89af512749281900390910190a450505050505600a165627a7a72305820f94ed1bea88aec62badbde73ec4adcd500e067fa0245052ea42e662c529b94870029` // DeployValidatorRegistration deploys a new Ethereum contract, binding an instance of ValidatorRegistration to it. func DeployValidatorRegistration(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ValidatorRegistration, error) { @@ -202,50 +202,50 @@ func (_ValidatorRegistration *ValidatorRegistrationCallerSession) VALIDATORDEPOS return _ValidatorRegistration.Contract.VALIDATORDEPOSIT(&_ValidatorRegistration.CallOpts) } -// UsedPubkey is a free data retrieval call binding the contract method 0x01110845. +// UsedHashedPubkey is a free data retrieval call binding the contract method 0x8618d778. // -// Solidity: function usedPubkey( bytes32) constant returns(bool) -func (_ValidatorRegistration *ValidatorRegistrationCaller) UsedPubkey(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { +// Solidity: function usedHashedPubkey( bytes32) constant returns(bool) +func (_ValidatorRegistration *ValidatorRegistrationCaller) UsedHashedPubkey(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { var ( ret0 = new(bool) ) out := ret0 - err := _ValidatorRegistration.contract.Call(opts, out, "usedPubkey", arg0) + err := _ValidatorRegistration.contract.Call(opts, out, "usedHashedPubkey", arg0) return *ret0, err } -// UsedPubkey is a free data retrieval call binding the contract method 0x01110845. +// UsedHashedPubkey is a free data retrieval call binding the contract method 0x8618d778. // -// Solidity: function usedPubkey( bytes32) constant returns(bool) -func (_ValidatorRegistration *ValidatorRegistrationSession) UsedPubkey(arg0 [32]byte) (bool, error) { - return _ValidatorRegistration.Contract.UsedPubkey(&_ValidatorRegistration.CallOpts, arg0) +// Solidity: function usedHashedPubkey( bytes32) constant returns(bool) +func (_ValidatorRegistration *ValidatorRegistrationSession) UsedHashedPubkey(arg0 [32]byte) (bool, error) { + return _ValidatorRegistration.Contract.UsedHashedPubkey(&_ValidatorRegistration.CallOpts, arg0) } -// UsedPubkey is a free data retrieval call binding the contract method 0x01110845. +// UsedHashedPubkey is a free data retrieval call binding the contract method 0x8618d778. // -// Solidity: function usedPubkey( bytes32) constant returns(bool) -func (_ValidatorRegistration *ValidatorRegistrationCallerSession) UsedPubkey(arg0 [32]byte) (bool, error) { - return _ValidatorRegistration.Contract.UsedPubkey(&_ValidatorRegistration.CallOpts, arg0) +// Solidity: function usedHashedPubkey( bytes32) constant returns(bool) +func (_ValidatorRegistration *ValidatorRegistrationCallerSession) UsedHashedPubkey(arg0 [32]byte) (bool, error) { + return _ValidatorRegistration.Contract.UsedHashedPubkey(&_ValidatorRegistration.CallOpts, arg0) } -// Deposit is a paid mutator transaction binding the contract method 0x881d2135. +// Deposit is a paid mutator transaction binding the contract method 0x878df5ac. // -// Solidity: function deposit(_pubkey bytes32, _withdrawalShardID uint256, _withdrawalAddressbytes32 address, _randaoCommitment bytes32) returns() -func (_ValidatorRegistration *ValidatorRegistrationTransactor) Deposit(opts *bind.TransactOpts, _pubkey [32]byte, _withdrawalShardID *big.Int, _withdrawalAddressbytes32 common.Address, _randaoCommitment [32]byte) (*types.Transaction, error) { +// Solidity: function deposit(_pubkey bytes, _withdrawalShardID uint256, _withdrawalAddressbytes32 address, _randaoCommitment bytes32) returns() +func (_ValidatorRegistration *ValidatorRegistrationTransactor) Deposit(opts *bind.TransactOpts, _pubkey []byte, _withdrawalShardID *big.Int, _withdrawalAddressbytes32 common.Address, _randaoCommitment [32]byte) (*types.Transaction, error) { return _ValidatorRegistration.contract.Transact(opts, "deposit", _pubkey, _withdrawalShardID, _withdrawalAddressbytes32, _randaoCommitment) } -// Deposit is a paid mutator transaction binding the contract method 0x881d2135. +// Deposit is a paid mutator transaction binding the contract method 0x878df5ac. // -// Solidity: function deposit(_pubkey bytes32, _withdrawalShardID uint256, _withdrawalAddressbytes32 address, _randaoCommitment bytes32) returns() -func (_ValidatorRegistration *ValidatorRegistrationSession) Deposit(_pubkey [32]byte, _withdrawalShardID *big.Int, _withdrawalAddressbytes32 common.Address, _randaoCommitment [32]byte) (*types.Transaction, error) { +// Solidity: function deposit(_pubkey bytes, _withdrawalShardID uint256, _withdrawalAddressbytes32 address, _randaoCommitment bytes32) returns() +func (_ValidatorRegistration *ValidatorRegistrationSession) Deposit(_pubkey []byte, _withdrawalShardID *big.Int, _withdrawalAddressbytes32 common.Address, _randaoCommitment [32]byte) (*types.Transaction, error) { return _ValidatorRegistration.Contract.Deposit(&_ValidatorRegistration.TransactOpts, _pubkey, _withdrawalShardID, _withdrawalAddressbytes32, _randaoCommitment) } -// Deposit is a paid mutator transaction binding the contract method 0x881d2135. +// Deposit is a paid mutator transaction binding the contract method 0x878df5ac. // -// Solidity: function deposit(_pubkey bytes32, _withdrawalShardID uint256, _withdrawalAddressbytes32 address, _randaoCommitment bytes32) returns() -func (_ValidatorRegistration *ValidatorRegistrationTransactorSession) Deposit(_pubkey [32]byte, _withdrawalShardID *big.Int, _withdrawalAddressbytes32 common.Address, _randaoCommitment [32]byte) (*types.Transaction, error) { +// Solidity: function deposit(_pubkey bytes, _withdrawalShardID uint256, _withdrawalAddressbytes32 address, _randaoCommitment bytes32) returns() +func (_ValidatorRegistration *ValidatorRegistrationTransactorSession) Deposit(_pubkey []byte, _withdrawalShardID *big.Int, _withdrawalAddressbytes32 common.Address, _randaoCommitment [32]byte) (*types.Transaction, error) { return _ValidatorRegistration.Contract.Deposit(&_ValidatorRegistration.TransactOpts, _pubkey, _withdrawalShardID, _withdrawalAddressbytes32, _randaoCommitment) } @@ -318,7 +318,7 @@ func (it *ValidatorRegistrationValidatorRegisteredIterator) Close() error { // ValidatorRegistrationValidatorRegistered represents a ValidatorRegistered event raised by the ValidatorRegistration contract. type ValidatorRegistrationValidatorRegistered struct { - PubKey [32]byte + HashedPubkey [32]byte WithdrawalShardID *big.Int WithdrawalAddressbytes32 common.Address RandaoCommitment [32]byte @@ -327,12 +327,12 @@ type ValidatorRegistrationValidatorRegistered struct { // FilterValidatorRegistered is a free log retrieval operation binding the contract event 0x7b0678aab009b61a805f5004869728b53a444f9a3e6bb9e22b8537c89af51274. // -// Solidity: event ValidatorRegistered(pubKey indexed bytes32, withdrawalShardID uint256, withdrawalAddressbytes32 indexed address, randaoCommitment indexed bytes32) -func (_ValidatorRegistration *ValidatorRegistrationFilterer) FilterValidatorRegistered(opts *bind.FilterOpts, pubKey [][32]byte, withdrawalAddressbytes32 []common.Address, randaoCommitment [][32]byte) (*ValidatorRegistrationValidatorRegisteredIterator, error) { +// Solidity: event ValidatorRegistered(hashedPubkey indexed bytes32, withdrawalShardID uint256, withdrawalAddressbytes32 indexed address, randaoCommitment indexed bytes32) +func (_ValidatorRegistration *ValidatorRegistrationFilterer) FilterValidatorRegistered(opts *bind.FilterOpts, hashedPubkey [][32]byte, withdrawalAddressbytes32 []common.Address, randaoCommitment [][32]byte) (*ValidatorRegistrationValidatorRegisteredIterator, error) { - var pubKeyRule []interface{} - for _, pubKeyItem := range pubKey { - pubKeyRule = append(pubKeyRule, pubKeyItem) + var hashedPubkeyRule []interface{} + for _, hashedPubkeyItem := range hashedPubkey { + hashedPubkeyRule = append(hashedPubkeyRule, hashedPubkeyItem) } var withdrawalAddressbytes32Rule []interface{} @@ -344,7 +344,7 @@ func (_ValidatorRegistration *ValidatorRegistrationFilterer) FilterValidatorRegi randaoCommitmentRule = append(randaoCommitmentRule, randaoCommitmentItem) } - logs, sub, err := _ValidatorRegistration.contract.FilterLogs(opts, "ValidatorRegistered", pubKeyRule, withdrawalAddressbytes32Rule, randaoCommitmentRule) + logs, sub, err := _ValidatorRegistration.contract.FilterLogs(opts, "ValidatorRegistered", hashedPubkeyRule, withdrawalAddressbytes32Rule, randaoCommitmentRule) if err != nil { return nil, err } @@ -353,12 +353,12 @@ func (_ValidatorRegistration *ValidatorRegistrationFilterer) FilterValidatorRegi // WatchValidatorRegistered is a free log subscription operation binding the contract event 0x7b0678aab009b61a805f5004869728b53a444f9a3e6bb9e22b8537c89af51274. // -// Solidity: event ValidatorRegistered(pubKey indexed bytes32, withdrawalShardID uint256, withdrawalAddressbytes32 indexed address, randaoCommitment indexed bytes32) -func (_ValidatorRegistration *ValidatorRegistrationFilterer) WatchValidatorRegistered(opts *bind.WatchOpts, sink chan<- *ValidatorRegistrationValidatorRegistered, pubKey [][32]byte, withdrawalAddressbytes32 []common.Address, randaoCommitment [][32]byte) (event.Subscription, error) { +// Solidity: event ValidatorRegistered(hashedPubkey indexed bytes32, withdrawalShardID uint256, withdrawalAddressbytes32 indexed address, randaoCommitment indexed bytes32) +func (_ValidatorRegistration *ValidatorRegistrationFilterer) WatchValidatorRegistered(opts *bind.WatchOpts, sink chan<- *ValidatorRegistrationValidatorRegistered, hashedPubkey [][32]byte, withdrawalAddressbytes32 []common.Address, randaoCommitment [][32]byte) (event.Subscription, error) { - var pubKeyRule []interface{} - for _, pubKeyItem := range pubKey { - pubKeyRule = append(pubKeyRule, pubKeyItem) + var hashedPubkeyRule []interface{} + for _, hashedPubkeyItem := range hashedPubkey { + hashedPubkeyRule = append(hashedPubkeyRule, hashedPubkeyItem) } var withdrawalAddressbytes32Rule []interface{} @@ -370,7 +370,7 @@ func (_ValidatorRegistration *ValidatorRegistrationFilterer) WatchValidatorRegis randaoCommitmentRule = append(randaoCommitmentRule, randaoCommitmentItem) } - logs, sub, err := _ValidatorRegistration.contract.WatchLogs(opts, "ValidatorRegistered", pubKeyRule, withdrawalAddressbytes32Rule, randaoCommitmentRule) + logs, sub, err := _ValidatorRegistration.contract.WatchLogs(opts, "ValidatorRegistered", hashedPubkeyRule, withdrawalAddressbytes32Rule, randaoCommitmentRule) if err != nil { return nil, err } diff --git a/contracts/validator-registration-contract/validator_registration.sol b/contracts/validator-registration-contract/validator_registration.sol index 04cd5ab014..fea31b709e 100644 --- a/contracts/validator-registration-contract/validator_registration.sol +++ b/contracts/validator-registration-contract/validator_registration.sol @@ -2,13 +2,13 @@ pragma solidity 0.4.23; contract ValidatorRegistration { event ValidatorRegistered( - bytes32 indexed pubKey, + bytes32 indexed hashedPubkey, uint256 withdrawalShardID, address indexed withdrawalAddressbytes32, bytes32 indexed randaoCommitment ); - mapping (bytes32 => bool) public usedPubkey; + mapping (bytes32 => bool) public usedHashedPubkey; uint public constant VALIDATOR_DEPOSIT = 32 ether; @@ -18,24 +18,31 @@ contract ValidatorRegistration { // to send the deposit back to), withdrawal address (which address // to send the deposit back to) and randao commitment. function deposit( - bytes32 _pubkey, + bytes _pubkey, uint _withdrawalShardID, address _withdrawalAddressbytes32, bytes32 _randaoCommitment - ) - public payable - { + ) + public + payable + { require( msg.value == VALIDATOR_DEPOSIT, "Incorrect validator deposit" ); require( - !usedPubkey[_pubkey], + _pubkey.length == 48, + "Public key is not 48 bytes" + ); + + bytes32 hashedPubkey = keccak256(abi.encodePacked(_pubkey)); + require( + !usedHashedPubkey[hashedPubkey], "Public key already used" ); - usedPubkey[_pubkey] = true; + usedHashedPubkey[hashedPubkey] = true; - emit ValidatorRegistered(_pubkey, _withdrawalShardID, _withdrawalAddressbytes32, _randaoCommitment); + emit ValidatorRegistered(hashedPubkey, _withdrawalShardID, _withdrawalAddressbytes32, _randaoCommitment); } } diff --git a/contracts/validator-registration-contract/validator_registration_test.go b/contracts/validator-registration-contract/validator_registration_test.go index dba4f3b7d1..767290f22f 100644 --- a/contracts/validator-registration-contract/validator_registration_test.go +++ b/contracts/validator-registration-contract/validator_registration_test.go @@ -24,7 +24,7 @@ type testAccount struct { addr common.Address withdrawalAddress common.Address randaoCommitment [32]byte - pubKey [32]byte + pubKey []byte contract *ValidatorRegistration backend *backends.SimulatedBackend txOpts *bind.TransactOpts @@ -40,7 +40,7 @@ func setup() (*testAccount, error) { // strip off the 0x and the first 2 characters 04 which is always the EC prefix and is not required. publicKeyBytes := crypto.FromECDSAPub(pubKeyECDSA)[4:] - var pubKey [32]byte + var pubKey = make([]byte, 48) copy(pubKey[:], []byte(publicKeyBytes)) addr := crypto.PubkeyToAddress(privKey.PublicKey) @@ -64,6 +64,24 @@ func TestSetupAndContractRegistration(t *testing.T) { } } +// negative test case, public key that is not 48 bytes. +func TestRegisterWithLessThan48BytesPubkey(t *testing.T) { + testAccount, err := setup() + if err != nil { + t.Fatal(err) + } + var pubKey = make([]byte, 32) + copy(pubKey, testAccount.pubKey[:]) + withdrawAddr := &common.Address{'A', 'D', 'D', 'R', 'E', 'S', 'S'} + randaoCommitment := &[32]byte{'S', 'H', 'H', 'H', 'H', 'I', 'T', 'S', 'A', 'S', 'E', 'C', 'R', 'E', 'T'} + + testAccount.txOpts.Value = amount32Eth + _, err = testAccount.contract.Deposit(testAccount.txOpts, pubKey, big.NewInt(0), *withdrawAddr, *randaoCommitment) + if err == nil { + t.Error("Validator registration should have failed with a 32 bytes pubkey") + } +} + // negative test case, deposit with less than 32 ETH. func TestRegisterWithLessThan32Eth(t *testing.T) { testAccount, err := setup() @@ -131,15 +149,22 @@ func TestRegister(t *testing.T) { shardID := big.NewInt(99) testAccount.txOpts.Value = amount32Eth + var hashedPub [32]byte + copy(hashedPub[:], crypto.Keccak256(testAccount.pubKey)) + _, err = testAccount.contract.Deposit(testAccount.txOpts, testAccount.pubKey, shardID, *withdrawAddr, *randaoCommitment) testAccount.backend.Commit() if err != nil { t.Errorf("Validator registration failed: %v", err) } log, err := testAccount.contract.FilterValidatorRegistered(&bind.FilterOpts{}, [][32]byte{}, []common.Address{}, [][32]byte{}) + defer log.Close() if err != nil { t.Fatal(err) } + if log.Error() != nil { + t.Fatal(log.Error()) + } log.Next() if log.Event.WithdrawalShardID.Cmp(shardID) != 0 { t.Errorf("validatorRegistered event withdrawal shard ID miss matched. Want: %v, Got: %v", shardID, log.Event.WithdrawalShardID) @@ -147,8 +172,8 @@ func TestRegister(t *testing.T) { if log.Event.RandaoCommitment != *randaoCommitment { t.Errorf("validatorRegistered event randao commitment miss matched. Want: %v, Got: %v", *randaoCommitment, log.Event.RandaoCommitment) } - if log.Event.PubKey != testAccount.pubKey { - t.Errorf("validatorRegistered event public key miss matched. Want: %v, Got: %v", testAccount.pubKey, log.Event.PubKey) + if log.Event.HashedPubkey != hashedPub { + t.Errorf("validatorRegistered event public key miss matched. Want: %v, Got: %v", common.BytesToHash(testAccount.pubKey), log.Event.HashedPubkey) } if log.Event.WithdrawalAddressbytes32 != *withdrawAddr { t.Errorf("validatorRegistered event withdrawal address miss matched. Want: %v, Got: %v", *withdrawAddr, log.Event.WithdrawalAddressbytes32)