Git Product home page Git Product logo

Comments (4)

schmir avatar schmir commented on September 27, 2024

I still do not understand this issue. As far as I understand in the snapshot and gnosis case, the keypers could send out the decryption key shares based on time or the state of a blockchain. i.e. there is no need to send a DecryptionTrigger.

I suggest not using compile flags and instead build a dedicated binary for the different use-cases. We can share code by including the same subcommands where possible. I wouldn't mind having multiple keyper subcommands for the different use-cases.

from rolling-shutter.

ulope avatar ulope commented on September 27, 2024

I still do not understand this issue. As far as I understand in the snapshot and gnosis case, the keypers could send out the decryption key shares based on time or the state of a blockchain. i.e. there is no need to send a DecryptionTrigger.

This may just be a semantics issue.
There needs to be something that decides when / in which conditions to send the key shares. That is (IMO) what this issue is about. If that is actually using the DecryptionTrigger mechanism or something else isn't important as far as I'm concerned.

I suggest not using compile flags and instead build a dedicated binary for the different use-cases. We can share code by including the same subcommands where possible. I wouldn't mind having multiple keyper subcommands for the different use-cases.

Hm, I haven't really understood what the problem with compile flags is and what would be the advantage of splitting out nearly identical code to multiple binaries?
To me it sounds like it would lead to a lot of boilerplate duplication. E.g. when we have keyper-rolling, keyper-snapshot, keyper-gnosis, etc. commands each of them needs to have all the repetitive config, db, libp2p code (even if that is abstracted out into utility modules they still need to be initialized etc.).

from rolling-shutter.

schmir avatar schmir commented on September 27, 2024

At the moment the following code sends the decryption key shares:

func (handler *DecryptionTriggerHandler) HandleMessage(ctx context.Context, m p2pmsg.Message) ([]p2pmsg.Message, error) {
msg, ok := m.(*p2pmsg.DecryptionTrigger)
if !ok {
return nil, errors.New("Message type assertion mismatch")
}
log.Info().Str("message", msg.String()).Msg("received decryption trigger")
epochID, err := epochid.BytesToEpochID(msg.EpochID)
if err != nil {
return nil, err
}
return SendDecryptionKeyShare(ctx, handler.config, kprdb.New(handler.dbpool), int64(msg.BlockNumber), epochID)
}

This is being triggered by a p2p message send from the collator.

The keyper installs a handler for this message here:

func (kpr *keyper) setupP2PHandler() {
kpr.p2p.AddMessageHandler(
epochkghandler.NewDecryptionKeyHandler(kpr.config, kpr.dbpool),
epochkghandler.NewDecryptionKeyShareHandler(kpr.config, kpr.dbpool),
epochkghandler.NewDecryptionTriggerHandler(kpr.config, kpr.dbpool),
epochkghandler.NewEonPublicKeyHandler(kpr.config, kpr.dbpool),
)
}

In the snapshot case we may not need to listen for a p2p DecryptionTrigger message at all and just wait for a certain point in time before calling into SendDecryptionKeyShares. I fail to see how we can define a meaningful interface for the generation of the decryption key shares for both cases.

On the use of compile flags: I think it's better to have some duplication and put in meaningful abstractions where it makes sense instead of code that is sprinkled with if rollingShutter / if snapshotShutter / if ! gnosisShutter statements.

from rolling-shutter.

jannikluhn avatar jannikluhn commented on September 27, 2024

This is done.

from rolling-shutter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.