Configuration
The ManyChainMultiSigConfig
data structure in the MCMS contract
is complex and difficult to define based on a desired group structure. To simplify usage, the library provides
a Config
wrapper offering a more intuitive way to define MCMS membership structures.
The Config
is a nested tree structure where a group reaches quorum
if the sum of Signers
with
signatures and GroupSigners
that individually meet their own quorum
is greater than or equal to the top-level quorum
.
Example
Consider the following Config
:
Config{
Quorum: 3,
Signers: ["0x1", "0x2"],
GroupSigners: [
{
Quorum: 1,
Signers: ["0x3","0x4"],
GroupSigners: []
},
{
Quorum: 1,
Signers: ["0x5","0x6"],
GroupSigners: []
}
],
}
[!NOTE] Signers cannot be repeated in this configuration (i.e. they cannot belong to multiple groups)
This configuration represents a membership structure that requires 3 entities to approve, in which any of the following
combinations of signatures would satisfy the top-level quorum of 3
:
- [
0x1
,0x2
,0x3
] - [
0x1
,0x2
,0x4
] - [
0x1
,0x2
,0x5
] - [
0x1
,0x2
,0x6
] - [
0x1
,0x3
,0x5
] - [
0x1
,0x3
,0x6
] - [
0x1
,0x4
,0x5
] - [
0x1
,0x4
,0x6
] - [
0x2
,0x3
,0x5
] - [
0x2
,0x3
,0x6
] - [
0x2
,0x4
,0x5
] - [
0x2
,0x4
,0x6
]
Once a satisfactory MCMS Membership configuration is constructed, users can use the ExtractSetConfigInputs
function to generate inputs and call SetConfig