-
Notifications
You must be signed in to change notification settings - Fork 170
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
(Draft Spec) Signing & Signature Aggregation #123
Comments
IETF spec on BLS Signatures: linkEdit: We are using variant 1 as described in the IETF BLS Spec Draft. This minimizes signature size. There is an ongoing effort to standardize BLS signatures.
https://tools.ietf.org/html/draft-yonezawa-pairing-friendly-curves-00
Ethereum 2.0 Spec for BLS: link Updated Ethereum issue for changes to BLS: link |
Short primer on signature aggregation in Filecoin: linkTL;DR: On-chain storage space is a premium. We at Filecoin would like to find, reduce, and/or remove any burdens to our protocol's on-chain storage complexity. One way of doing this efficiently is by using BLS Signature Aggregation. |
Algorithmic decisions:
|
Updates required in signatures.md
New methods
|
New Methods (requires thought into which spec they should be)
|
@whyrusleeping: can you add a few notes about BLS Recovery here #210. Specifically, notes on how an actor will search for a a specific public key once it has an associated actor ID. |
@bvohaska sure thing. Given an ID, you need to look up the actor associated with it. To do that, take the current global state root, and index it with the ID. This will return to you an actor. Now, since not all actors will need public keys, it doesnt really make sense to put the public key into the top level actor struct. Instead, we should put it into actor storage for a particular actor type. The actor that makes sense here is the "account actor" which is the actor that can be made to send messages via external input (signed messages). The account actor is actually not in the actors spec yet (somehow overlooked this one, dangit). The code in go-filecoin for it is here: https://github.com/filecoin-project/go-filecoin/blob/master/actor/builtin/account/account.go . We should add the public key to the account actors state, and provide a method for retrieving it. We also then need to figure out how that public key is gonna get there in the first place. To do that, we can use the fact that bls addresses are just the entire bls public key, and upon account creation (which happens when funds are first sent to a new address) pass the key to the actor constructor. This behavior should be documented in the state-machine.md doc, its not spec'ed out yet. Yay finding missing things :) Hope that helps. |
Updates required in actors.mdThese changes are outside the scope of signature aggregation but related to signatures in general.
Possible dependencies for the go-filecoin team
|
Updates required in mining.md
These changes are outside the scope of signature aggregation but related to signatures in general.
|
Block creation does need to be updated to show the actual aggregation of signatures |
General updates/questions about the FIL specCopied from link
|
(@whyrusleeping, @frrist) I suggest the following solution to the question, What does the array of signed messages in the block look like now that some of the messages have had their signatures aggregated? Context: The goal of Signature Aggregation is to move a collection of "signatures" into a single "signature". What this means in practice is that we want to represent Proposed Solution: Fortunately, we already have a structure to do that,
|
(@whyrusleeping, @frrist ) How exactly do we disambiguate signatures? Right now, the spec is written to infer that data from Logic: "Am I BLS or ECDSA?":
"Am I a BLS aggregate?":
|
Some thoughts on this
|
@dignifiedquire re: 2, I like this. Basically we could have a place in the block where an array of signatures is linked. Alternatively, we could just have all the messages be in one place, and if they don't have signatures they are just a different object, basically the message array would be |
This issue serves to provide:
The output of this effort will be,
Updated list of specs that require updating
Signature
,Verify
,Sign
,SignedMessage
,Aggreagate
)StorageMarketActor
,CreateStorageMiner
)VerifyBlock
,VerifyBlock.ValidateSignature
,VerifyTickets.ValidateSignature
,VerifyTickets..getPublicKeyForMiner
,Block Creation
)tickets
)Block
,Tickets.Signature
,SignedMessage
)Possible dependencies for the go-filecoin team
SlashConsensusFault.ValidateSignature(blockX.Signature)
may need updating in order to more clearly add support for this Signature Aggregation effort.Support Links
The text was updated successfully, but these errors were encountered: