Summary or problem description
Now we're using multi signature mechanism in the RoleManagement mehod DesignateAsRole. So there's a issue that it means we have to collect 11 committees to vote an address as one of the Roles. It doesn't make sense becasue the first one has to send the incomplete signature to the second one, the second one sends to the third one....until the 11th one signs and relays it. How can we do that? Online or offline? How can we ensure the content is not be modified or how to avoid duplicated signature. It's a very complex way and not easy to do. Especially the committees don't know each other and don't know how to send it to the others.
So I think we'd better find another feasible way for multi-signature senarios. I know @roman-khimov is working on this on neo-go and already has a solution. Maybe we can have a look at his way.
@erikzhang @shargon
Duplicate signature won't work, because CheckMultisignature already checked this. But it is the same problem as Oracle. We decided to sign it offline, @roman-khimov already proposes to create a P2P message to relay this signature, now it is easier to do it with a plugin.
I can make a plugin for this problem using https://github.com/neo-project/neo/pull/2101 if you want
if we want to use the plugin for every one, we can't, because his signature need to be whitelisted
Why not collect signatures in RoleManager contract? Every committee member can invoke the contract with their signature, once more than half committee inovked we can get the result.
This is the draft https://github.com/neo-project/neo/pull/2272
I prefer to add a HelperContract to deal with it.
With a contract, it could be expensive, and slower, with a plugin it could be faster but limited to white list address. What do you think @erikzhang ?
How do you delete the partial signatures in a contract?
@shargon @roman-khimov,
As you know, I like this discussion a lot.
I think that it is of great importance that we have a plugin that manage multi signatures aggregation.
In a more advance view:
How do you delete the partial signatures in a contract?
Add height expiration and clear them in OnPersist. Only committee invoking in the same time period like 1 day will work.
I think that If people pay for store it, it could be there, also there could be a clean method for remove transactions according to validUntilBlock.
Exactly. @shargon .
Maybe just one of the signers paying may be enough.
Talking to @snowypowers we discussed about Voting. This discussion provided gave some insights.
Perhaps the committee could just vote in a single signature manner in order to elect members of Oracle and StateService.
That would make their role simpler.
Most helpful comment
I can make a plugin for this problem using https://github.com/neo-project/neo/pull/2101 if you want