Skip to content
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

Extended MultiSig #700

Closed
igormcoelho opened this issue Apr 10, 2019 · 4 comments
Closed

Extended MultiSig #700

igormcoelho opened this issue Apr 10, 2019 · 4 comments
Labels
Discussion Initial issue state - proposed but not yet accepted

Comments

@igormcoelho
Copy link
Contributor

igormcoelho commented Apr 10, 2019

An important kind of multi-sig is currently missing, that's why we propose an Extended MultiSig.
Current MultiSig uses an array of publickeys and a limit number, to pass only if this number of signatures is validated against the pubkeys.
An important change would be to accept an array of scripthashes (instead of pubkeys), so these are also validated against existing witnesses.
This is better in many ways: better privacy for multisig users; more flexibility on individual witnesses (part of the multisig). Using this, we can even compose multisig together, embedded in others (with some practical applications even for consensus algorithms).

So, one proposal is to create a native contract for this: Neo.Native.CheckMultiSig.

Why not change existing NeoVM CHECKMULTISIG?
I believe this opcode can be abolished on Neo 3.0, as previously discussed: neo-project/neo-vm#122
And anyway it would be better suited to the ApplicationEngine (NeoContract), because it depends on the Witness system.

Using the same logic, we can already create: Neo.Native.CheckSig (and deprecate opcode CHECKSIG).

@erikzhang erikzhang added the Discussion Initial issue state - proposed but not yet accepted label Apr 11, 2019
@shargon
Copy link
Member

shargon commented Apr 11, 2019

Like SHA1, SHA256, HASH160, HASH256 i think that this could be Syscalls too

@igormcoelho
Copy link
Contributor Author

The more interop would make NeoVM more flexible for us... less strict (and less opcodes) is much easier to maintain. But we need to clearly define what is "unremovable" from NVM, and leave it there.
Pehaps CHECKSIG and VERIFY will need to stay, so as these basic cryptographic operations, in order to keep minimum compatibility on Neo 3.0.

But I'm still in favor of a extended multisig, even if it's part of CHECKMULTISIG (perhaps it's already better to start there).

@igormcoelho
Copy link
Contributor Author

Propose again in a different format, in the future.

Thacryba pushed a commit to simplitech/neo that referenced this issue Feb 17, 2020
@igormcoelho
Copy link
Contributor Author

igormcoelho commented Nov 8, 2020

I think the general idea still applies: we should have some "CheckMultiWitness", to complement crypto-specific MultiSig.

Besides Neo.Crypto.CheckMultisigWithECDsaSecp256r1 and Neo.Crypto.CheckMultisigWithECDsaSecp256k1, we could support some Neo.Crypto.CheckMultiWitness, that receives a list of scripthashes, performs Runtime.CheckWitness for all of them, and check if they surpass a minimum count.

This general approach can help designing multisig that are easier to compose (one party may use secp256r1 while other uses secp256k1), even when parties are distant: #1573

@igormcoelho igormcoelho reopened this Nov 8, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Discussion Initial issue state - proposed but not yet accepted
Projects
None yet
Development

No branches or pull requests

3 participants