You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
the end goal is to support multiple identities in hare3 protocol
storing multiple smeshers and registration
type Hare needs to store collection of smeshers, this collection is extended with a Register(Smesher) call.
typeProtocolinterface {
Register(*EdSigner)
}
Register can't fail, so if atx doesn't exist yet it simply registers smesher in the internal collection.
in order to prevent new participants joining mid session when hare session starts, session needs to copy pointers to registered smeshers at that time and store them in different collection.
eligibility and emitting messages
computing ecvrf is ~200us. ed25519 sig is ~100us.
lets assume that we target 10_000 identities. that is about 3s of on cpu time for every message. we need to parallelize that to support this amount. the efficient approach would be to create N worker goroutines managed by hare. each worker will accept batch of vrf's to compute / messages to sign and output result. this is also good change that can be submitted after initial implementation to simplify review.
we also should disable vrf / sig verification which is run when nodes Publish message. to implement check that message is emitted by our own host.ID() and do the necessary skip.
to vote on the same set of proposals, proposals method should be modified to not vote on the proposal if atx that belongs to any smesher is lower than the proposals base height.
closes: #5085
this change refactors original hare oracle to accept key that will be used to determine eligibility. and extends hare3 with a collection of keys that can be used to participate from the same physical node.
limitation is that ecvrf and ed signatures are computed sequentially and may cause messages to be delayed, if number of nodes are larger then 100. larger numbers are useful only if we expect it to be used with smallest possible atxs, which is by itself a problem.
the end goal is to support multiple identities in hare3 protocol
storing multiple smeshers and registration
type Hare
needs to store collection of smeshers, this collection is extended with a Register(Smesher) call.Register can't fail, so if atx doesn't exist yet it simply registers smesher in the internal collection.
in order to prevent new participants joining mid session when hare session starts, session needs to copy pointers to registered smeshers at that time and store them in different collection.
eligibility and emitting messages
computing ecvrf is ~200us. ed25519 sig is ~100us.
lets assume that we target 10_000 identities. that is about 3s of on cpu time for every message. we need to parallelize that to support this amount. the efficient approach would be to create N worker goroutines managed by hare. each worker will accept batch of vrf's to compute / messages to sign and output result. this is also good change that can be submitted after initial implementation to simplify review.
we also should disable vrf / sig verification which is run when nodes Publish message. to implement check that message is emitted by our own host.ID() and do the necessary skip.
to vote on the same set of proposals,
proposals
method should be modified to not vote on the proposal if atx that belongs to any smesher is lower than the proposals base height.otherrefactoring
reference to vrf signer needs to be moved out of the legacy oracle https://github.com/spacemeshos/go-spacemesh/blob/develop/hare/eligibility/oracle.go#L75
The text was updated successfully, but these errors were encountered: