Limit the total number of signers per multisig to 50.
Split multisig CreatorDid into AdminDid and PayingDid.
A multisig can add an admin DID to enable the *_via_admin controls.
A multisig can remove it's admin to disable the *_via_admin controls. The admin DID can also remove itself as the admin of a multisig.
A multisig can remove it's paying DID to pay for its own transaction/protocol fees.
A multisig unlinked from an identity (via identity.leave_identity_as_key) and join a new identity using multisig.approve_join_identity and the transaction fees will be paid by the primary key of the joining identity.
A multisig can't be a signer on another multisig.
modified external API
Remove Multisig extrinsics *_via_creator to *_via_admin.
Multisig storage CreatorDid renamed to AdminDid.
Added Multisig storage PayingDid to hold the identity that pays transaction fees.
When creating a new MultiSig the calling DID is set as the PayingDid by default, but doesn't have admin controls.
create_multisig now adds the new multisig to the caller's identity as a secondary key. By default the multisig will have no permissions unless the caller is the primary key and has provided custom permissions.
Removed multisig make_multisig_primary, make_multisig_secondary and remove_creator_controls extrinsics.
Replaced remove_creator_controls with remove_admin_via_admin extrinsic.
new external API
multisig.add_admin(identity) callable by the multisig to add an identity as admin.
multisig.remove_admin_via_admin(multisig) callable by the admin to remove itself as admin of a multisig.
multisig.remove_payer() callable by the multisig to remove the paying identity. The multisig will need to pay for its own transaction/protocol fees.
multisig.remove_payer_via_payer(multisig) callable by the paying identity to remove itself as the payer of fees for the multisig.
multisig.approve_join_identity(auth_id) callable by multisig signers to approve joining a new identity. The primary key of the joining identity will pay for transaction fees.
multisig.join_identity(auth_id) this is called by the proposal created in approve_join_identity to accept a join identity authorization.
Added storage AuthToProposalId used by multisig.approve_join_identity to map an auth_id to proposal_id.
modified events
The caller_did is now optional for multisig events: ProposalAdded, ProposalExecuted, MultiSigSignersRequiredChanged, ProposalApprovalVote, ProposalRejectionVote, ProposalApproved, and ProposalRejected. Since the multisig could be unlinked from an identity when those events are emitted.
new events
New multisig events: MultiSigAddedAdmin, MultiSigRemovedAdmin, and MultiSigRemovedPayingDid.
data migration
Removed storage Multisig.LostCreatorPrivileges.
Migrate Multisig.CreatorDid to Multisig.PayingDid and Multisig.AdminDid (only if LostCreatorPrivileges hasn't been set).
changelog
new features
CreatorDid
intoAdminDid
andPayingDid
.*_via_admin
controls.*_via_admin
controls. The admin DID can also remove itself as the admin of a multisig.identity.leave_identity_as_key
) and join a new identity usingmultisig.approve_join_identity
and the transaction fees will be paid by the primary key of the joining identity.modified external API
*_via_creator
to*_via_admin
.CreatorDid
renamed toAdminDid
.PayingDid
to hold the identity that pays transaction fees.PayingDid
by default, but doesn't have admin controls.create_multisig
now adds the new multisig to the caller's identity as a secondary key. By default the multisig will have no permissions unless the caller is the primary key and has provided custom permissions.make_multisig_primary
,make_multisig_secondary
andremove_creator_controls
extrinsics.remove_creator_controls
withremove_admin_via_admin
extrinsic.new external API
multisig.add_admin(identity)
callable by the multisig to add an identity as admin.multisig.remove_admin_via_admin(multisig)
callable by the admin to remove itself as admin of a multisig.multisig.remove_payer()
callable by the multisig to remove the paying identity. The multisig will need to pay for its own transaction/protocol fees.multisig.remove_payer_via_payer(multisig)
callable by the paying identity to remove itself as the payer of fees for the multisig.multisig.approve_join_identity(auth_id)
callable by multisig signers to approve joining a new identity. The primary key of the joining identity will pay for transaction fees.multisig.join_identity(auth_id)
this is called by the proposal created inapprove_join_identity
to accept a join identity authorization.AuthToProposalId
used bymultisig.approve_join_identity
to map anauth_id
toproposal_id
.modified events
caller_did
is now optional for multisig events:ProposalAdded
,ProposalExecuted
,MultiSigSignersRequiredChanged
,ProposalApprovalVote
,ProposalRejectionVote
,ProposalApproved
, andProposalRejected
. Since the multisig could be unlinked from an identity when those events are emitted.new events
MultiSigAddedAdmin
,MultiSigRemovedAdmin
, andMultiSigRemovedPayingDid
.data migration
Multisig.LostCreatorPrivileges
.Multisig.CreatorDid
toMultisig.PayingDid
andMultisig.AdminDid
(only ifLostCreatorPrivileges
hasn't been set).