make idempotent

This commit is contained in:
Cassandra Heart 2024-11-04 21:53:02 -06:00
parent ee8b344dde
commit 5b26cff487
No known key found for this signature in database
GPG Key ID: 6352152859385958
6 changed files with 19 additions and 16 deletions

View File

@ -89,14 +89,14 @@ func (a *TokenApplication) handleDataAnnounceProverJoin(
return nil, errors.Wrap(err, "handle join")
}
lockMap[string(t.PublicKeySignatureEd448.PublicKey.KeyValue)] = struct{}{}
for _, t := range a.Tries {
if t.Contains(address) {
a.Logger.Debug("prover already in trie", zap.Binary("address", address))
return nil, errors.Wrap(ErrInvalidStateTransition, "handle join")
// do nothing:
return []*protobufs.TokenOutput{}, nil
}
}
lockMap[string(t.PublicKeySignatureEd448.PublicKey.KeyValue)] = struct{}{}
return []*protobufs.TokenOutput{
&protobufs.TokenOutput{
Output: &protobufs.TokenOutput_Join{

View File

@ -52,11 +52,11 @@ func (a *TokenApplication) handleDataAnnounceProverLeave(
inTries = inTries || t.Contains(address)
}
if !inTries {
return nil, errors.Wrap(ErrInvalidStateTransition, "handle leave")
}
lockMap[string(t.PublicKeySignatureEd448.PublicKey.KeyValue)] = struct{}{}
if !inTries {
// do nothing:
return []*protobufs.TokenOutput{}, nil
}
return []*protobufs.TokenOutput{
&protobufs.TokenOutput{

View File

@ -51,10 +51,11 @@ func (a *TokenApplication) handleDataAnnounceProverPause(
inTries = inTries || t.Contains(address)
}
if !inTries {
return nil, errors.Wrap(ErrInvalidStateTransition, "handle pause")
}
lockMap[string(t.PublicKeySignatureEd448.PublicKey.KeyValue)] = struct{}{}
if !inTries {
// do nothing:
return []*protobufs.TokenOutput{}, nil
}
return []*protobufs.TokenOutput{
&protobufs.TokenOutput{
Output: &protobufs.TokenOutput_Pause{

View File

@ -52,11 +52,11 @@ func (a *TokenApplication) handleDataAnnounceProverResume(
inTries = inTries || t.Contains(address)
}
if !inTries {
return nil, errors.Wrap(ErrInvalidStateTransition, "handle resume")
}
lockMap[string(t.PublicKeySignatureEd448.PublicKey.KeyValue)] = struct{}{}
if !inTries {
// do nothing:
return []*protobufs.TokenOutput{}, nil
}
return []*protobufs.TokenOutput{
&protobufs.TokenOutput{

View File

@ -648,7 +648,9 @@ func (e *TokenExecutionEngine) ProcessFrame(
)
last = app.Tries[rings]
}
last.Add([]byte(addr.addr), frame.FrameNumber)
if !last.Contains([]byte(addr.addr)) {
last.Add([]byte(addr.addr), frame.FrameNumber)
}
}
for _, addr := range leaveReqs {
for _, t := range app.Tries {

View File

@ -134,7 +134,7 @@ func (t *RollingFrecencyCritbitTrie) FindNearestAndApproximateNeighbors(
var traverse func(p *Node, address []byte) bool
traverse = func(p *Node, address []byte) bool {
if len(ret) > 256 {
if len(ret) > 1024 {
return true
}