-
Notifications
You must be signed in to change notification settings - Fork 156
Arbitrary multisig, a multisig design for CKB which supports multiple digital signature algorithms #448
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
base: master
Are you sure you want to change the base?
Conversation
|
|
||
| The multisig configuration designed here, is highly inspired(though differences still exist) from [multisig lock included in the genesis block](https://github.com/nervosnetwork/ckb-system-scripts/blob/934166406fafb33e299f5688a904cadb99b7d518/c/secp256k1_blake160_multisig_all.c#L17-L28): | ||
|
|
||
| * `S`: a 1-byte reserved value, right now `S` must be `0x80`, to differentiate from the reserved value used in multisig lock included in the genesis block. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I insist that we should at least explain this clearly in the document. From the last script to now, the only thing that is available in the public documentation is a description of the reserved area, but there is no description of its function or why we chose the value that way. This has caused confusion.
For full context see cryptape/quantum-resistant-lock-script#14
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just to fill in the complete context: in cryptape/quantum-resistant-lock-script#14 (comment), @Hanssen0 actually proposed a different design: we can simply remove S, whether it is a reserved field or a version field, a lock / type script implementing current multisig design should implement this multisig design only. When a new multisig design is introduced, a new script should be used, different code_hash shall be used to distinguish one multisig design from another.
Not to say which direction is better, but just want to provide a complete background here, we can then discuss which design adapts to the future better.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Adding a counter example: in the design of cobuild, we actually encoded special union IDs:
union WitnessLayout {
SighashAll: 4278190081,
SighashAllOnly: 4278190082,
Otx: 4278190083,
OtxStart: 4278190084,
}
See here for more details.
Those special union IDs, are exactly hacks required, because WitnessArgs do not have a version byte, or a reserved field. In future expansions, we will need to tell the 2 formats apart(WitnessArgs vs cobuild data structures). Even if an old script only deals with WitnessArgs, it still brings merits since it can reject apps that wrongly use the new cobuild format.
So personally, I do see values in a reserved field in the multisig format. Even if we want to stick to the fact that one script only implements a single multisig format, it still can benefit us in the future.
|
There is an incoherence in this RFC implemented by the quantum resistant lock:
Do we need off-chain knowledge about the lock we are interacting with?
|
|
Additionally, where are the examples/visualizations in this RFC? The section named Are we even trying to get other devs to understand the work being done here? |
PREVIEW LINK