Skip to content

Commit 0ee2749

Browse files
y0sherMatheusFranco99GalRogozinski
authored
Spec - create validator-registration struct with gas limit (#516)
* chore: receive full validator-registration struct instead of recreating it to allow the runner to manage the gas limit instead of beacon client * use duty slot instead of first slot of epoch * fix tests to store the SignedValidatorRegistration obj * generate JSON tests * add wrongly removed test cases * delete get share --------- Co-authored-by: MatheusFranco99 <[email protected]> Co-authored-by: Gal Rogozinski <[email protected]>
1 parent 4066ef0 commit 0ee2749

24 files changed

+74
-44
lines changed

ssv/spectest/generate/tests.json.gz

147 Bytes
Binary file not shown.

ssv/spectest/tests/runner/consensus/invalid_signature.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ func InvalidSignature() tests.SpecTest {
158158
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
159159
},
160160
BeaconBroadcastedRoots: []string{
161-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
161+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
162162
},
163163
ExpectedError: expectedError,
164164
},

ssv/spectest/tests/runner/consensus/signedssvmsg_diff_length.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func SignersAndSignaturesWithDifferentLength() tests.SpecTest {
148148
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
149149
},
150150
BeaconBroadcastedRoots: []string{
151-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
151+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
152152
},
153153
ExpectedError: expectedError,
154154
},

ssv/spectest/tests/runner/consensus/signedssvmsg_empty_signature.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func EmptySignature() tests.SpecTest {
148148
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
149149
},
150150
BeaconBroadcastedRoots: []string{
151-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
151+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
152152
},
153153
ExpectedError: expectedError,
154154
},

ssv/spectest/tests/runner/consensus/signedssvmsg_nil_ssvmessage.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func NilSSVMessage() tests.SpecTest {
148148
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
149149
},
150150
BeaconBroadcastedRoots: []string{
151-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
151+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
152152
},
153153
ExpectedError: expectedError,
154154
},

ssv/spectest/tests/runner/consensus/signedssvmsg_no_signatures.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func NoSignatures() tests.SpecTest {
148148
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
149149
},
150150
BeaconBroadcastedRoots: []string{
151-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
151+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
152152
},
153153
ExpectedError: expectedError,
154154
},

ssv/spectest/tests/runner/consensus/signedssvmsg_no_signers.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func NoSigners() tests.SpecTest {
148148
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
149149
},
150150
BeaconBroadcastedRoots: []string{
151-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
151+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
152152
},
153153
ExpectedError: expectedError,
154154
},

ssv/spectest/tests/runner/consensus/signedssvmsg_non_unique_signer.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ func NonUniqueSigners() tests.SpecTest {
149149
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
150150
},
151151
BeaconBroadcastedRoots: []string{
152-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
152+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
153153
},
154154
ExpectedError: expectedError,
155155
},

ssv/spectest/tests/runner/consensus/signedssvmsg_zero_signer.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func ZeroSigner() tests.SpecTest {
148148
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
149149
},
150150
BeaconBroadcastedRoots: []string{
151-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
151+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
152152
},
153153
ExpectedError: expectedError,
154154
},

ssv/spectest/tests/runner/consensus/valid_message.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ func ValidMessage() tests.SpecTest {
134134
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
135135
},
136136
BeaconBroadcastedRoots: []string{
137-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
137+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
138138
},
139139
ExpectedError: "no consensus phase for validator registration",
140140
},

ssv/spectest/tests/runner/full_happy_flow.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ func FullHappyFlow() tests.SpecTest {
147147
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
148148
},
149149
BeaconBroadcastedRoots: []string{
150-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
150+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
151151
},
152152
},
153153
{

ssv/spectest/tests/runner/postconsensus/invalid_msg_slot.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ func InvalidMessageSlot() tests.SpecTest {
161161
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
162162
},
163163
BeaconBroadcastedRoots: []string{
164-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
164+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
165165
},
166166
ExpectedError: "no post consensus phase for validator registration",
167167
},

ssv/spectest/tests/runner/postconsensus/valid_msg.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ func ValidMessage() tests.SpecTest {
196196
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
197197
},
198198
BeaconBroadcastedRoots: []string{
199-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
199+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
200200
},
201201
ExpectedError: "no post consensus phase for validator registration",
202202
},

ssv/spectest/tests/runner/preconsensus/invalid_quorum_then_valid_quorum.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func InvalidQuorumThenValidQuorum() tests.SpecTest {
7070
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
7171
},
7272
BeaconBroadcastedRoots: []string{
73-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
73+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
7474
},
7575
ExpectedError: expectedError,
7676
},

ssv/spectest/tests/runner/preconsensus/invalid_then_quorum.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func InvalidThenQuorum() tests.SpecTest {
6767
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
6868
},
6969
BeaconBroadcastedRoots: []string{
70-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
70+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
7171
},
7272
},
7373
{

ssv/spectest/tests/runner/preconsensus/post_quorum.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func PostQuorum() tests.SpecTest {
6565
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
6666
},
6767
BeaconBroadcastedRoots: []string{
68-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
68+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
6969
},
7070
ExpectedError: "failed processing validator registration message: invalid pre-consensus message: no running duty",
7171
},

ssv/spectest/tests/runner/preconsensus/quorum.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func Quorum() tests.SpecTest {
6161
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
6262
},
6363
BeaconBroadcastedRoots: []string{
64-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
64+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
6565
},
6666
},
6767
{

ssv/spectest/tests/runner/preconsensus/quorum_10_operators.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func Quorum10Operators() tests.SpecTest {
104104
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
105105
},
106106
BeaconBroadcastedRoots: []string{
107-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
107+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
108108
},
109109
},
110110
{

ssv/spectest/tests/runner/preconsensus/quorum_13_operators.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func Quorum13Operators() tests.SpecTest {
114114
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
115115
},
116116
BeaconBroadcastedRoots: []string{
117-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
117+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
118118
},
119119
},
120120
{

ssv/spectest/tests/runner/preconsensus/quorum_7_operators.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func Quorum7Operators() tests.SpecTest {
6868
testingutils.PreConsensusValidatorRegistrationMsg(ks.Shares[1], 1), // broadcasts when starting a new duty
6969
},
7070
BeaconBroadcastedRoots: []string{
71-
testingutils.GetSSZRootNoError(testingutils.TestingValidatorRegistration),
71+
testingutils.GetSSZRootNoError(testingutils.TestingSignedValidatorRegistration(ks)),
7272
},
7373
},
7474
{

ssv/types.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"github.com/attestantio/go-eth2-client/api"
55
"github.com/attestantio/go-eth2-client/spec"
66
"github.com/attestantio/go-eth2-client/spec/altair"
7-
"github.com/attestantio/go-eth2-client/spec/bellatrix"
87
"github.com/attestantio/go-eth2-client/spec/phase0"
98
ssz "github.com/ferranbt/fastssz"
109

@@ -76,7 +75,7 @@ type SyncCommitteeContributionCalls interface {
7675
// ValidatorRegistrationCalls interface has all validator registration duty specific calls
7776
type ValidatorRegistrationCalls interface {
7877
// SubmitValidatorRegistration submits a validator registration
79-
SubmitValidatorRegistration(pubkey []byte, feeRecipient bellatrix.ExecutionAddress, sig phase0.BLSSignature) error
78+
SubmitValidatorRegistration(registration *api.VersionedSignedValidatorRegistration) error
8079
}
8180

8281
// VoluntaryExitCalls interface has all validator voluntary exit duty specific calls

ssv/validator_registration.go

+23-11
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package ssv
22

33
import (
4+
"github.com/attestantio/go-eth2-client/api"
45
v1 "github.com/attestantio/go-eth2-client/api/v1"
6+
"github.com/attestantio/go-eth2-client/spec"
57
"github.com/attestantio/go-eth2-client/spec/phase0"
68
ssz "github.com/ferranbt/fastssz"
79
"github.com/pkg/errors"
@@ -18,6 +20,8 @@ type ValidatorRegistrationRunner struct {
1820
signer types.BeaconSigner
1921
operatorSigner *types.OperatorSigner
2022
valCheck qbft.ProposedValueCheckF
23+
24+
gasLimit uint64
2125
}
2226

2327
func NewValidatorRegistrationRunner(
@@ -27,6 +31,7 @@ func NewValidatorRegistrationRunner(
2731
network Network,
2832
signer types.BeaconSigner,
2933
operatorSigner *types.OperatorSigner,
34+
gasLimit uint64,
3035
) (Runner, error) {
3136

3237
if len(share) != 1 {
@@ -44,6 +49,7 @@ func NewValidatorRegistrationRunner(
4449
network: network,
4550
signer: signer,
4651
operatorSigner: operatorSigner,
52+
gasLimit: gasLimit,
4753
}, nil
4854
}
4955

@@ -80,14 +86,20 @@ func (r *ValidatorRegistrationRunner) ProcessPreConsensus(signedMsg *types.Parti
8086
specSig := phase0.BLSSignature{}
8187
copy(specSig[:], fullSig)
8288

83-
// Get share
84-
share := r.GetShare()
85-
if share == nil {
86-
return errors.New("no share to get validator public key")
89+
registration, err := r.calculateValidatorRegistration(r.BaseRunner.State.StartingDuty.DutySlot())
90+
if err != nil {
91+
return errors.Wrap(err, "could not calculate validator registration")
92+
}
93+
94+
signed := &api.VersionedSignedValidatorRegistration{
95+
Version: spec.BuilderVersionV1,
96+
V1: &v1.SignedValidatorRegistration{
97+
Message: registration,
98+
Signature: specSig,
99+
},
87100
}
88101

89-
if err := r.beacon.SubmitValidatorRegistration(share.ValidatorPubKey[:],
90-
share.FeeRecipientAddress, specSig); err != nil {
102+
if err := r.beacon.SubmitValidatorRegistration(signed); err != nil {
91103
return errors.Wrap(err, "could not submit validator registration")
92104
}
93105

@@ -107,7 +119,7 @@ func (r *ValidatorRegistrationRunner) expectedPreConsensusRootsAndDomain() ([]ss
107119
if r.BaseRunner.State == nil || r.BaseRunner.State.StartingDuty == nil {
108120
return nil, types.DomainError, errors.New("no running duty to compute preconsensus roots and domain")
109121
}
110-
vr, err := r.calculateValidatorRegistration(r.BaseRunner.State.StartingDuty)
122+
vr, err := r.calculateValidatorRegistration(r.BaseRunner.State.StartingDuty.DutySlot())
111123
if err != nil {
112124
return nil, types.DomainError, errors.Wrap(err, "could not calculate validator registration")
113125
}
@@ -120,7 +132,7 @@ func (r *ValidatorRegistrationRunner) expectedPostConsensusRootsAndDomain() ([]s
120132
}
121133

122134
func (r *ValidatorRegistrationRunner) executeDuty(duty types.Duty) error {
123-
vr, err := r.calculateValidatorRegistration(duty)
135+
vr, err := r.calculateValidatorRegistration(duty.DutySlot())
124136
if err != nil {
125137
return errors.Wrap(err, "could not calculate validator registration")
126138
}
@@ -167,7 +179,7 @@ func (r *ValidatorRegistrationRunner) executeDuty(duty types.Duty) error {
167179
return nil
168180
}
169181

170-
func (r *ValidatorRegistrationRunner) calculateValidatorRegistration(duty types.Duty) (*v1.ValidatorRegistration, error) {
182+
func (r *ValidatorRegistrationRunner) calculateValidatorRegistration(slot phase0.Slot) (*v1.ValidatorRegistration, error) {
171183

172184
share := r.GetShare()
173185
if share == nil {
@@ -177,11 +189,11 @@ func (r *ValidatorRegistrationRunner) calculateValidatorRegistration(duty types.
177189
pk := phase0.BLSPubKey{}
178190
copy(pk[:], share.ValidatorPubKey[:])
179191

180-
epoch := r.BaseRunner.BeaconNetwork.EstimatedEpochAtSlot(duty.DutySlot())
192+
epoch := r.BaseRunner.BeaconNetwork.EstimatedEpochAtSlot(slot)
181193

182194
return &v1.ValidatorRegistration{
183195
FeeRecipient: share.FeeRecipientAddress,
184-
GasLimit: types.DefaultGasLimit,
196+
GasLimit: r.gasLimit,
185197
Timestamp: r.BaseRunner.BeaconNetwork.EpochStartTime(epoch),
186198
Pubkey: pk,
187199
}, nil

types/testingutils/beacon_node.go

+29-12
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,33 @@ func TestingValidatorRegistrationBySlot(slot phase0.Slot) *v1.ValidatorRegistrat
386386
}
387387
}
388388

389+
var TestingSignedValidatorRegistration = func(ks *TestKeySet) *v1.SignedValidatorRegistration {
390+
vr := TestingValidatorRegistration
391+
sig := signBeaconObject(vr, types.DomainApplicationBuilder, ks)
392+
return &v1.SignedValidatorRegistration{
393+
Message: vr,
394+
Signature: sig,
395+
}
396+
}
397+
398+
var TestingSignedValidatorRegistrationWrong = func(ks *TestKeySet) *v1.SignedValidatorRegistration {
399+
vr := TestingValidatorRegistrationWrong
400+
sig := signBeaconObject(vr, types.DomainApplicationBuilder, ks)
401+
return &v1.SignedValidatorRegistration{
402+
Message: vr,
403+
Signature: sig,
404+
}
405+
}
406+
407+
var TestingSignedValidatorRegistrationBySlot = func(ks *TestKeySet, slot phase0.Slot) *v1.SignedValidatorRegistration {
408+
vr := TestingValidatorRegistrationBySlot(slot)
409+
sig := signBeaconObject(vr, types.DomainApplicationBuilder, ks)
410+
return &v1.SignedValidatorRegistration{
411+
Message: vr,
412+
Signature: sig,
413+
}
414+
}
415+
389416
var TestingVoluntaryExit = &phase0.VoluntaryExit{
390417
Epoch: 0,
391418
ValidatorIndex: TestingValidatorIndex,
@@ -708,18 +735,8 @@ func (bn *TestingBeaconNode) SubmitAttestations(attestations []*phase0.Attestati
708735
return nil
709736
}
710737

711-
func (bn *TestingBeaconNode) SubmitValidatorRegistration(pubkey []byte, feeRecipient bellatrix.ExecutionAddress, sig phase0.BLSSignature) error {
712-
pk := phase0.BLSPubKey{}
713-
copy(pk[:], pubkey)
714-
715-
vr := v1.ValidatorRegistration{
716-
FeeRecipient: feeRecipient,
717-
GasLimit: TestingValidatorRegistration.GasLimit,
718-
Timestamp: TestingValidatorRegistration.Timestamp,
719-
Pubkey: pk,
720-
}
721-
722-
r, _ := vr.HashTreeRoot()
738+
func (bn *TestingBeaconNode) SubmitValidatorRegistration(registration *api.VersionedSignedValidatorRegistration) error {
739+
r, _ := registration.V1.HashTreeRoot()
723740
bn.BroadcastedRoots = append(bn.BroadcastedRoots, r)
724741
return nil
725742
}

types/testingutils/runner.go

+2
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ var ConstructBaseRunnerWithShareMap = func(role types.RunnerRole, shareMap map[p
201201
net,
202202
km,
203203
opSigner,
204+
types.DefaultGasLimit,
204205
)
205206
case types.RoleVoluntaryExit:
206207
runner, err = ssv.NewVoluntaryExitRunner(
@@ -357,6 +358,7 @@ var ConstructBaseRunner = func(role types.RunnerRole, keySet *TestKeySet) (ssv.R
357358
net,
358359
km,
359360
opSigner,
361+
types.DefaultGasLimit,
360362
)
361363
case types.RoleVoluntaryExit:
362364
runner, err = ssv.NewVoluntaryExitRunner(

0 commit comments

Comments
 (0)