Introduction
Multisig, short for "multisignature," is a powerful cryptographic technique used in blockchain networks to enhance security and enable shared control over transactions. It allows multiple participants to jointly manage and authorize transactions, ensuring that no single party has complete control.
With Polymesh's multisig capabilities, participants can define a threshold of required signatures to validate and authorize transactions. For example, if a multisig account is configured with a threshold of three signatures and there are five authorized signers, any transaction initiated from that account would require at least three of the authorized signers to provide their signatures for the transaction to be considered valid.
This approach brings several benefits:
- It mitigates the risk of a single point of failure or malicious activity, as multiple parties must collaborate to approve transactions. This enhances the security and trustworthiness of the blockchain system.
- Multisig accounts enable the establishment of complex access control policies, facilitating governance mechanisms and enabling organizations to implement robust decision-making processes.
In order to set up a multisig account, please follow this guide.
This guide is broken down into the following main sections:
How to stake with a multisig account in the Polymesh app
Step 1. Bond POLYX to be staked
Step 2. Accept the multisig proposal by other multisig signers
Retrieve the multisig proposal ID
Further staking actions with multisig
Change the staking rewards destination with multisig
Bond more POLYX to stake with multisig
Change the controller account with multisig
How to stake with a multisig account in the Polymesh app
Step 1. Bond POLYX to be staked
You will need to first propose a staking transaction from one of the signers, and then approve it from another signer(s) (depending on the number of signers and the threshold).
1. Open the Polymesh App then fill in the data as per below:
-
- using the selected account: Select the signer account of the multisig you want to sign the transaction
- extrinsic: Select
multiSig
thencreateProposalAsKey(multisig, proposal, expiry, autoClose)
Click here to see this image at full resolution. - multisig: Select the multisig address from the dropdown
- proposal: This is the proposal to be voted on. Select
staking
thenbond(controller, value, payee)
Click here to see this image at full resolution. - controller: This is the controller account. It is used to control actions related to your staking. Most of the time you need to keep it as
Id
. - Id: Select the controller account from the dropdown, or enter it manually. This can be the same as the multisig or another account.
Click here to see this image at full resolution. - value: Enter the amount of POLYX you would like to bond. The amount of POLYX you bond should not exceed your available POLYX balance - 10 POLYX to cover further transaction fees.
- payee: This is used to set the rewards-paying address for the controller account. Select the appropriate.
- Staked: Compounding - rewards go to your bonded balance
- Stash: This is the main account that performs the staking actions
- Controller: This is an account that is identified by a Stash account as its staking management account
- Account: You can enter a specific account for the rewards destination
Click here to see this image at full resolution.
- expiry (optional): This is the optional proposal expiry time. Enter the expiry date and time in Unix timestamp format. You can use a converter like this one.
- auto_close: This is used to close the proposal on receiving enough reject votes. The proposal will be immediately executed if this is 1 out of the threshold. Select the appropriate.
Click here to see this image at full resolution.
2. Once all data are filled, click onSubmit Transaction
at the right corner of the page:
3. Another popup window will appear, click on Sign and Submit
and then sign the transaction with your wallet.
4. After the proposal has been submitted, it must be approved by the other multisigner accounts. Check Step 2 for instructions.
Step 2. Accept the multisig proposal by other multisig signers
Retrieve the multisig proposal ID
1. Open the Polymesh Block Explorer and search for the proposal signer's key which begins with 2
2. In the Extrinsics tab, look for the action multisig (create_proposal_as_key) then click on the Extrinsic ID:
Click here to see this image at full resolution.
3. On the next page scroll down to the event with the action multisig (ProposalAdded)
Click on the triangle on the right side to expand the event, then you will see the event ID in the last row:
Click here to see this image at full resolution.
Accept multisig proposal
1. Open the Polymesh App then fill in the data as per below:
- using the selected account: Select the signer account of the multisig you want to sign the transaction
- extrinsic: Select
multiSig
thenapproveAsKey(multisig, proposalId)
Click here to see this image at full resolution. - multisig: Select the multisig address from the dropdown
- proposal: This is the proposal ID to be approved. Enter the multisig proposal ID you've gathered in the previous step (which is 3 in our example)
Click here to see this image at full resolution.
2. Once all data are filled, click onSubmit Transaction
at the right corner of the page:
3. Another popup window will appear, click on Sign and Submit
and then sign the transaction with your wallet.
Step 3. Nominate validators
1. Open the Polymesh App then fill in the data as per below:
-
- using the selected account: Select the signer account of the multisig you want to sign the transaction
- extrinsic: Select
multiSig
thencreateProposalAsKey(multisig, proposal, expiry, autoClose)
Click here to see this image at full resolution. - multisig: Select your multisig address from the dropdown
- proposal: This is the proposal to be voted on. Select
staking
thennominate(targets)
Click here to see this image at full resolution. - Targets: Here you can select the operators you would like to nominate
- multiaddress: These are the accounts of the validators/operators you want to nominate. Most of the time you need to keep it as
Id
. - Id: Enter the Account ID of the validator account you want to nominate. It should begin with 2. You can select up to 16. You can click on the
+Add item
and the-Remove item
buttons to add or remove validators.
Validator addresses and further information about the validators can be found here and here.
Click here to see this image at full resolution.
- multiaddress: These are the accounts of the validators/operators you want to nominate. Most of the time you need to keep it as
- expiry (optional): This is the optional proposal expiry time. To enter an expiry time, click on the include option toggle. Enter the expiry date and time in Unix timestamp format. You can use a converter like this one.
- auto_close: This is used to close the proposal on receiving enough reject votes. The proposal will be immediately executed if this is 1 out of the threshold. Select the appropriate.
Click here to see this image at full resolution.
2. Once all data are filled, click onSubmit Transaction
at the right corner of the page:
3. Another popup window will appear, click on Sign and Submit
and then sign the transaction with your wallet.
4. After the proposal has been submitted, it must be approved by the other multisigner accounts. Check Step 2 for instructions.
Further staking actions with multisig
Change the staking rewards destination with multisig
1. Open the Polymesh App then fill in the data as per below:
-
- using the selected account: Select the signer account of the multisig you want to sign the transaction
- extrinsic: Select
multiSig
thencreateProposalAsKey(multisig, proposal, expiry, autoClose)
Click here to see this image at full resolution. - multisig: Select your multisig address from the dropdown
- proposal: This is the proposal to be voted on. Select
staking
thensetPayee(payee)
Click here to see this image at full resolution. - payee: This is used to set the rewards-paying address for the controller account. Select the appropriate.
- Staked: Compounding - rewards go to your bonded balance
- Stash: This is the main account that performs the staking actions
- Controller: This is an account that is identified by a Stash account as its staking management account
- Account: You can enter a specific account for the rewards destination
Click here to see this image at full resolution.
- expiry (optional): This is the optional proposal expiry time. To enter an expiry time, click on the include option toggle. Enter the expiry date and time in Unix timestamp format. You can use a converter like this one.
- auto_close: This is used to close the proposal on receiving enough reject votes. The proposal will be immediately executed if this is 1 out of the threshold. Select the appropriate.
Click here to see this image at full resolution.
2. Once all data are filled, click onSubmit Transaction
at the right corner of the page:
3. Another popup window will appear, click on Sign and Submit
and then sign the transaction with your wallet.
4. After the proposal has been submitted, it must be approved by the other multisigner accounts. Check Step 2 for instructions.
Bond more POLYX to stake with multisig
1. Open the Polymesh App then fill in the data as per below:
-
- using the selected account: Select the signer account of the multisig you want to sign the transaction
- extrinsic: Select
multiSig
thencreateProposalAsKey(multisig, proposal, expiry, autoClose)
Click here to see this image at full resolution. - multisig: Select the multisig address from the dropdown
- proposal: This is the proposal to be voted on. Select
staking
thenbondExtra(maxAdditional)
Click here to see this image at full resolution. - maxAdditonal Enter the amount of POLYX you would like to add to your current bonded amount. The amount of POLYX you bond should not exceed your available POLYX balance - 10 POLYX to cover further transaction fees.
- expiry (optional): This is the optional proposal expiry time. Enter the expiry date and time in Unix timestamp format. You can use a converter like this one.
- auto_close: This is used to close the proposal on receiving enough reject votes. The proposal will be immediately executed if this is 1 out of the threshold. Select the appropriate.
Click here to see this image at full resolution.
2. Once all data are filled, click onSubmit Transaction
at the right corner of the page:
3. Another popup window will appear, click on Sign and Submit
and then sign the transaction with your wallet.
4. After the proposal has been submitted, it must be approved by the other multisigner accounts. Check Step 2 for instructions.
Change the controller account with multisig
The controller account controls actions related to your staking, among other things.
You may need to change your controller if you don't have any funds left in your old controller account to pay transaction fees, you cannot access it, or it was compromised in any way.
In order to change the controller account, follow the steps below:
1. Open the Polymesh App then fill in the data as per below:
-
- using the selected account: Select the signer account of the multisig you want to sign the transaction
- extrinsic: Select
multiSig
thencreateProposalAsKey(multisig, proposal, expiry, autoClose)
Click here to see this image at full resolution. - multisig: Select the multisig address from the dropdown
- proposal: This is the proposal to be voted on. Select
staking
thensetController(controller)
Click here to see this image at full resolution. - controller: This is going to be the new controller account. Most of the time you need to keep it as
Id
- Id: Select the new controller account from the dropdown, or paste it into the field manually
- expiry (optional): This is the optional proposal expiry time. Enter the expiry date and time in Unix timestamp format. You can use a converter like this one.
- auto_close: This is used to close the proposal on receiving enough reject votes. The proposal will be immediately executed if this is 1 out of the threshold. Select the appropriate.
Click here to see this image at full resolution.
2. Once all data are filled, click onSubmit Transaction
at the right corner of the page:
3. Another popup window will appear, click on Sign and Submit
and then sign the transaction with your wallet.
4. After the proposal has been submitted, it must be approved by the other multisigner accounts. Check Step 2 for instructions.
Unbond POLYX with multisig
1. Open the Polymesh App then fill in the data as per below:
-
- using the selected account: Select the signer account of the multisig you want to sign the transaction
- extrinsic: Select
multiSig
thencreateProposalAsKey(multisig, proposal, expiry, autoClose)
Click here to see this image at full resolution. - multisig: Select the multisig address from the dropdown
- proposal: This is the proposal to be voted on. Select
staking
thenunbond(value)
- value: Enter the amount of POLYX you would like to unbond
Click here to see this image at full resolution. - expiry (optional): This is the optional proposal expiry time. Enter the expiry date and time in Unix timestamp format. You can use a converter like this one.
- auto_close: This is used to close the proposal on receiving enough reject votes. The proposal will be immediately executed if this is 1 out of the threshold. Select the appropriate.
Click here to see this image at full resolution.
2. Once all data are filled, click onSubmit Transaction
at the right corner of the page:
3. Another popup window will appear, click on Sign and Submit
and then sign the transaction with your wallet.
4. After the proposal has been submitted, it must be approved by the other multisigner accounts. Check Step 2 for instructions.
Common Errors and Solutions
CallNotAllowed: The call is not allowed at the given time due to restrictions of an election period. Try to submit the transaction again in an hour.
NotController: Not a controller account. Check if your controller account is correct.
InvalidValidatorIdentity: Given potential validator identity is invalid. Check if the validator's identity is correct. Validator addresses and further information about the validators can be found here and here.
TooManyTargets: Too many nomination targets supplied. It cannot be more than 16.
ProposalMissing: The multisig proposal does not exist. Verify that the proposal is correct
AlreadyVoted: The signer has already voted on the multisig proposal. Another signer of the multisig should vote on the proposal.
ProposalAlreadyRejected: The multisig proposal was rejected earlier, therefore it cannot be voted on.
ProposalExpired: The multisig proposal has expired, therefore it cannot be voted on.
If you have any questions or run into any issues, please open a support ticket on the Polymesh Community Portal.
Comments
0 comments
Please sign in to leave a comment.