Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add creator to cluster definition #1360

Closed
corverroos opened this issue Oct 27, 2022 · 0 comments
Closed

Add creator to cluster definition #1360

corverroos opened this issue Oct 27, 2022 · 0 comments
Assignees

Comments

@corverroos
Copy link
Contributor

corverroos commented Oct 27, 2022

Problem to be solved

We want to allow non-participants to create the cluster definition. We also want to make it explicit who created the cluster definition if it is one of the operators (who is the leader). Currently, it is implicitly the first operator.

Proposed solution

Add a creator nested top level field to the cluster definition with two fields itself, address and config_signature.

"creator": {
  "address": "0x123",
  "config_signature": "0x567"
}

The address and config_signature fields are exactly the same as the operator address and config_signature fields. If the creator is also an operator, then the data is duplicated.

These fields will be left empty with charon create cluster, same as the operator fields.

This is part of new draft version v1.4.

Add the creator config_signature as part of definition signature verification.

The ssz spec:

type Definition struct {
	// UUID is a human-readable random unique identifier. Max 64 chars.
	UUID string `json:"uuid" ssz:"ByteList[64]" config_hash:"0" definition_hash:"0"`

	// Name is a human-readable cosmetic identifier. Max 256 chars.
	Name string `json:"name" ssz:"ByteList[256]" config_hash:"1" definition_hash:"1"`

	// Version is the schema version of this definition. Max 16 chars.
	Version string `json:"version" ssz:"ByteList[16]" config_hash:"2" definition_hash:"2"`

	// Timestamp is the human-readable timestamp of this definition. Max 32 chars.
	// Note that this was added in v1.1.0, so may be empty for older versions.
	Timestamp string `json:"timestamp" ssz:"ByteList[32]" config_hash:"3" definition_hash:"3"`

	// NumValidators is the number of DVs (n*32ETH) to be created in the cluster lock file.
	NumValidators int `json:"num_validators" ssz:"uint64" config_hash:"4" definition_hash:"4"`

	// Threshold required for signature reconstruction. Defaults to safe value for number of nodes/peers.
	Threshold int `json:"threshold" ssz:"uint64" config_hash:"5" definition_hash:"5"`

	// FeeRecipientAddress 20 byte Ethereum address.
	FeeRecipientAddress string `json:"fee_recipient_address,0xhex" ssz:"Bytes20" config_hash:"6" definition_hash:"6"`

	// WithdrawalAddress 20 byte Ethereum address.
	WithdrawalAddress string `json:"withdrawal_address,0xhex" ssz:"Bytes20" config_hash:"7" definition_hash:"7"`

	// DKGAlgorithm to use for key generation. Max 32 chars.
	DKGAlgorithm string `json:"dkg_algorithm" ssz:"ByteList[32]" config_hash:"8" definition_hash:"8"`

	// ForkVersion defines the cluster's 4 byte beacon chain fork version (network/chain identifier).
	ForkVersion []byte `json:"fork_version,0xhex" ssz:"Bytes4" config_hash:"9" definition_hash:"9"`

	// Operators define the charon nodes in the cluster and their operators. Max 256 operators.
	Operators []Operator `json:"operators" ssz:"CompositeList[256]" config_hash:"10" definition_hash:"10"`
	
	// Creator identifies the creator of the cluster definition.
	Creator Creator  `json:"creator" ssz:"Composite" config_hash:"11" definition_hash:"12"`
	
	// ConfigHash uniquely identifies a cluster definition excluding operator ENRs and signatures.
	ConfigHash []byte `json:"config_hash,0xhex" ssz:"Bytes32" config_hash:"-" definition_hash:"11"`
	
	// DefinitionHash uniquely identifies a cluster definition including operator ENRs and signatures.
	DefinitionHash []byte `json:"definition_hash,0xhex" ssz:"Bytes32" config_hash:"-" definition_hash:"-"`
}

// Creator identifies the creator of the cluster definition.
type Creator struct {
	// The 20 byte Ethereum address of the creator
	Address string `json:"address,0xhex" ssz:"Bytes20" config_hash:"0" definition_hash:"0"`

	// ConfigSignature is an EIP712 signature of the config_hash using privkey corresponding to operator Ethereum Address.
	ConfigSignature []byte `json:"config_signature,0xhex" ssz:"Bytes65" config_hash:"-" definition_hash:"1"`
}

Out of Scope

Only release v1.4 once launchpad has been upgrade and tested and everything works.

@corverroos corverroos self-assigned this Oct 27, 2022
obol-bulldozer bot pushed a commit that referenced this issue Oct 28, 2022
Adds cluster creator to new draft definition v1.4.

category: feature
ticket: #1360
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant