All pages
Powered by GitBook
1 of 4

Loading...

Loading...

Loading...

Loading...

2/3 Multisig

First, the wallet to be converted to multisig must be empty. It is best to use a brand-new wallet for the purpose, although not required. It is strongly advised to make a copy of the wallet files first, just in case something goes wrong.

Overview

In short, the process is:

Wallet Creation

  1. All parties command prepare_multisig and send data to ALL other parties

  2. All parties command make_multisig <threshold> <data1> <data2> and send 2nd batch of data to ALL other parties

  3. All parties command exchange_multisig_keys <data1> <data2> with the data from ALL other parties.

Receiving

  1. All parties can type address to see the created multisig wallet address. The address will, of course, be the same for all parties since they're all watching the same wallet.

Preparation for Sending

  1. To prepare for sending all parties command export_multisig_info <filename> and send the file to all other parties

  2. To complete preparation, all parties command import_multisig_info <filename1> <filename2> and import files from other parties

Sending

  1. To send, any party can use the usual transfer command, but the result will be a file named multisig_beldex_tx which must be sent to any 1 other signer

  2. The other party commands sign_multisig multisig_beldex_tx and the file is updated with the signature.

  3. The completely signed file is pushed to the network with use of submit_multisig multisig_beldex_tx.

Below is a step-by-step walkthrough.

Wallet Creation

Requirements:

  • 3 empty beldex-wallet-cli wallets

  • All parties wallets connected to a beldexd

  • Confidential communication channel

Step 1 - Prepare Multisig

All 3 people should open up their beldex-wallet-cli and generate a new wallet. Make sure you do not have any $beldex within your wallet.

Person 1, 2 and 3 runs the following command within their beldex-wallet-cli:

The output will be something like:

Copy the entire line Multisig…...Vozid and be sure to capture the whole thing when copying.

Person 1 to send the Multsig...arg to Person 2 and 3, Person 2 to send their output to Person 1 and 3 and Person 3 to send their output to Person 1 and 2.

Step 2 - Make Multisig

All 3 persons now have the Multisig...arg text from the other 2. With that, each of them can create their part of the multisig wallet. Before you proceed, note that the wallet will lose access to the underlying wallet when converted to multisig. This is not really a problem, since we started with an empty wallet, and if all goes OK with this step, you won't ever need it unless you want to go through the process again for whatever reason (like HDD died, but you have the seed mnemonic of the underlying wallet and want to reconstruct the multisig wallet).

Person 1 commands:

Where <threshold> is the number of signers required out of the 3 people, <data person 2>is the output provided by Person 2, and <data person 3>is the output provided by Person 3.

This should look similar to:

Notice how there are 2 strings starting with Multisig....arg. One is from person 2 and other from person 3. The number at the beginning is the minimum required number of signatures. Since it's a 2/3 scheme - it's 2.

The output from the make_multisig command will be similar to:

With 2/3 there's an additional step to be done here. The new Multisig...arg info must be passed to ALL other participants (persons 2 & 3).

Persons 2 & 3 do the same as above and send the info to other 2 parties.

Step 3 - Exchange Multisig

Here we do one last command to make the wallet ready for receiving. It requires the 2nd batch of Multisig…....arg strings received from other parties.

Person 1 will run the command:

Unfortunately the wallet will not display an output at this point. There's no indication that the process was successfully completed (for now). All 3 persons do the same, and all 3 wallets will show the same address after this step.

Now each person run the command:

And each 3 parties of the multisig wallet should be shown the same address in their wallet.

Receiving

Step 1 Fund The Multisig Account

This is simple. Just send to the shared address. You can send multiple times, just like a normal wallet. You can use payment ID’s as well, or generate an integrated address to receive funds.

Best part, whomever is sending the funds won't be able to tell that the address belongs to a multisig wallet since it looks like any other Beldex address.

Step 2 Check Multisig Account Balance

Just open the wallet and run the refresh command . Once completed, all persons can verify that the funds arrived.

Person 1, 2 & 3 can run the command:

To see incoming transfers or the following command to see the balance of the wallet:

Preparation for Spending

Step 1 - Export Multisig

Without this step, it will not be possible to create a transaction that spends Beldex. As a minimum, the sender needs to get a partial key image from the same person who will sign the transaction with him later. He could get from both parties immediately and then later decide with whom to sign.

Person 1 commands:

Where mi1 can be any filename. The output will be:

The file mi1 will be located in the shell working folder*

Person 1 sends that file to other persons. Persons 2 & 3 do the same.

Optional: Step 1.2 Sending Multisig Info File with terminal - transfer.sh

It is optional to use the terminal to send each person the multisig info files.

UPLOADING MULTISIG INFO FILE

Person 1 will open up a new terminal and change to the directory mi1 has been saved.*

Person 1 will run the following command:

Person 1 will receive the link to the file as an output, looking similar to:

Person 1 will need to send this link to Person 2 and Person 3. Person 2 will need to do the same and send the link to Person 1 and 3. Person 3 will need to do the same and send the link to Person 1 and 2.

DOWNLOADING MULTISIG INFO FILE

Person 1 should change to the directory of their beldex-wallet-cli and use Person 2 and 3’s download link to run the commands:

Replacing <link> with the link Person 2 and 3 shared with Person 1 and <filename> with the filename of the Multisig info file that Person 2 or 3 generated, for example Person 1 will run the command:

And the command:

Likewise, Person 2 and 3 should do the same, changing directories to their beldex-wallet-cli and downloading with the alternative Persons download link, and filename.

Step 2 - Import Multisig

Now, they must all import each other's file so they can be ready to make a TX later.

For example, Person 2 commands:

The wallet will look for files in the shell working folder and if the files are found the output will look like:

Persons 1 & 3 do the same.

Spending

Step 1 - Transfer (Preparing Unsigned Transaction)

Any of the 3 persons can start a transaction, it doesn't matter. To avoid weird things from happening only do it for 1 transaction at a time. If anything weird happens, do the step 1 & 2 again to fix.

For example, let's say that Person 3 will make the TX.

Person 3 performs the usual transfer command:

The output will look like:

Check in the folder where you started beldex-wallet-cli from. There should be a file named multisig_beldex_tx.

Send the file multisig_beldex_tx to either person 1 or 2.

Person 3 will send the file multisig_beldex_tx to the Person 1 or 2. Person 3 can send this file through email or alternatively use the transfer.sh commands outside of the wallet:

If Person 3 chooses to use transfer.sh command to send the file to Person 1 or 2 they will receive a <link>.

Person 1 or 2 must finish the signature. Person 1 or 2 copies/downloads the file to the same folder from where he started (or will start) beldex-wallet-cli.

Person 1 or 2 can run the command to download the file to the beldex-wallet-cli directory.

Replacing https://transfer.sh/CJqnM/multisig_beldex_tx with the link provided by Person 3.

Step 2 - Sign Multisig

Let's say Person 2 was picked as the partner. He must finish the signature. Person 2 copies the file to the same folder from where he started (or will start) beldex-wallet-cli.

Then, Person 2 commands:

and they will be prompted to check it first:

If ok, answer Y, and the output will look like:

Step 3 - Submit Multisig

Finally, person with the signed file submits the transaction to the network by commanding:

There will be a confirmation prompt:

If ok, answer Y, and the transaction will be sent. The output will look like:

You can check its status by using the show_transfers command.

The person 2 could also send the signed TX to person 3, who could then submit it to the network himself.

If you want to make another one, you have to go back to preparation for spending step (sync the key images again).

The wallet will look for the files and export them to the folder from where it was started, ie where your command prompt / shell was when you called beldex-wallet-cli. It may or may not be the same folder as your actual wallet files or beldex-wallet-cli, depending on how you go about it.

For example, your wallet could be on some USB drive like f:\temp\, and your wallet software on c:\beldex\ and your shell working folder could be c:\.

If you remain in c:\ with the shell, you could start the wallet by its full path and specify the wallet file location: c:\beldex\beldex-wallet-cli.exe --wallet-file f:\temp\mywallet. In this case, all the import/export stuff would be read/written to c:\

Source:

because that's still your shell's working folder.

It would be probably feel more natural to cd into the wallet folder. Do f: to change drive and then cd f:\temp\. Then, simply start the wallet from that location by its full path again: c:\beldex\beldex-wallet-cli.exe --wallet-file mywallet. Notice how you don't have to write the full wallet path now as you're already there with your shell. In this case, all the files mentioned above would be written or read from the same folder as the wallet files.

Monero Stack Exchange: how to use monero multisigniture wallets
prepare_multisig
MultisigV1cR7X7ZAfa5ncRmQv1hpt4P1DmmnhinhokhDMqsmuWXmHFrb6xUr3FtBGygCfMScxnKJvXK1vvPNahXNWfYWVquieBErr98sFtgs24c2YuYrQT78uxV8oYx1A9bKeHSUfYzCniN5kMznEfvKCw3FiomjLvw364gg98ZWp16zA7pUVozid  
Send this multisig info to all other participants, then use make_multisig <threshold> <info1> [<info2>...] with others' multisig info  
This includes the PRIVATE view key, so needs to be disclosed only to that multisig wallet's participants
make_multisig <threshold> <data person 2> <data person 3>
make_multisig 2 MultisigV12EHtuvxFyAYDNcDsbDqWHDfkRr4JZchSdf8eZQSFwiMKDk15CYEJeQyEwtSnqUZdRr2BsEaT9z2biUdDTEQM4T3N625owvKMDoyhbRj3bwkBtceLKimap8DBAiUmSABpdf62HnPYiRtLW4JdVFmfqjndhWjYBypx1duvpi3qwfSrBY9a MultisigV1TqQ8Gt5Sb3GYtVJa1fQrK7e7hPm59XbooNvLxPSBR4856bW9jtD1hEyWy4yULKrX7reZZ6vrKdBCdSdk4nfApCGYJAA2WP4pKNwHDyKTuLEeuoDhqno8keEVeEF9AZsWXvng1avUTRREmy11h8wu8pdjopC4AguQKiHCJCN7aT9W6b8C  
Another step is needed  
MultisigxV1PKCwmVrucV8bXi18VnHFqRXcnAq4osFL3ahzPHCiN48zhs28u6jmEhy7ktZbUEGfRtTuFjjKzJYb61fnFwnysBBnNXsUtCgFMXPa7FyNKVy2AnUg3ePEnKqWkgKVvA81axTS8r9EX1DmVPXgFKkFzw4Yj4ZtMcJVo77b5ayuMzjFtsaijko9X2bjd9AVfFVGBFMCSLa4xXhNVNz19CTUJx5gpoPG  
Send this multisig info to all other participants, then use finalize_multisig <info1> [<info2>...] with others' multisig info
exchange_multisig_info MultisigxV1Vg1tsRLurvAc5aSA9Hd9God3MQhijCFoE1rPDFzx7ufwhs28u6jmEhy7ktZbUEGfRtTuFjjKzJYb61fnFwnysBBnfYm4xJWcJ4qM4khSb2KkyAKDuT39pTvdmemhojNjeYCmgSQ1NZLyBj48R1tVpiGNxa7TDnGbSgLuKBq35AX6jfu5PECAcDDn22CFQbJZip7xnBbn89Szzh27xeozfxcLiqqm MultisigxV14xDZBGACz3iUh2aVKGE5q5VzcvJdg2qCvZECgUWCdy5QNXsUtCgFMXPa7FyNKVy2AnUg3ePEnKqWkgKVvA81axTSfYm4xJWcJ4qM4khSb2KkyAKDuT39pTvdmemhojNjeYCmCNaRSsDEcemLLL8wCvzsy5R6hhkhWLYkD9vhZwprSFFKMZ7tfRko2VfMBoKQhB7PKXbf1npk2xceVKu2y7kExywb
address
show_transfers
balance
export_multisig_info mi1
Multisig info exported to mi1
curl --upload-file ./mi1 https://transfer.sh/mi1
https://transfer.sh/Ehl5q/mi1
curl <link> -o <filename>
curl https://transfer.sh/Iedv9/mi2 -o mi2
curl https://transfer.sh/dfvr3/mi3 -o mi3
curl https://transfer.sh/Ehl5q/mi1 -o mi1
import_multisig_info mi1
2 outputs found in mi1  
Height 56156, transaction <88ba687dc79a0b39e6de6d0763eda8363d33d9f58ec9a096171bd9a7f1dae873>, received 0.100000000000  
Height 56156, transaction <d6ac845b9400759525519cdc5d514eb8f5b1d265b24d1c016e75b20ed3b4b7da>, received 0.100000000000
transfer 86TmZX8EzZVjS9zNg7zAsrEQFDgcVC2qV2ZMyoWsbyK4SNB2SwMHZtMhPSsFyTmRBQUaGVF5k3qy5CMFM6Lvj7gi3AeszDag7 50
Unsigned transaction(s) successfully written to file: multisig_beldex_tx
curl --upload-file ./multisig_beldex_tx https://transfer.sh/multisig_beldex_tx
curl https://transfer.sh/CJqnM/multisig_beldex_tx -o multisig_beldex_tx
sign_multisig multisig_beldex_tx
Loaded 1 transactions, for 108.082287779, fee 0.061108880, sending 50.000000000 to 86TmZX8EzZVjS9zNg7zAsrEQFDgcVC2qV2ZMyoWsbyK4SNB2SwMHZtMhPSsFyTmRBQUaGVF5k3qy5CMFM6Lvj7gi3AeszDag7, 58.021178899 change to 86ScXhWpAG2aUHmFemwvn4HddHA5GQ4u6MvYsW2hVteJSwLJXCEhk2aVp4XzyqGmvyUqc3w8fwWwg6szGEytUSx51C6WQ3er8, with min ring size 10, no payment ID.

Is this okay? (Y/Yes/N/No):
Transaction successfully submitted, transaction <3b03b16c79eaa5564171ae88242c4cdb1f9e0b41fc3de949c6524c5026a3f3bb>
submit_multisig multisig_beldex_tx
Loaded 1 transactions, for 108.082287779, fee 0.061108880, sending 50.000000000 to 86TmZX8EzZVjS9zNg7zAsrEQFDgcVC2qV2ZMyoWsbyK4SNB2SwMHZtMhPSsFyTmRBQUaGVF5k3qy5CMFM6Lvj7gi3AeszDag7, 58.021178899 change to 86ScXhWpAG2aUHmFemwvn4HddHA5GQ4u6MvYsW2hVteJSwLJXCEhk2aVp4XzyqGmvyUqc3w8fwWwg6szGEytUSx51C6WQ3er8, with min ring size 10, no payment ID.

Is this okay? (Y/Yes/N/No):
Transaction successfully submitted, transaction <3b03b16c79eaa5564171ae88242c4cdb1f9e0b41fc3de949c6524c5026a3f3bb>  

Multisig

2/2 Multisig

First, the wallet to be converted to multisig must be empty. It is best to use a brand-new wallet for the purpose, although not required. It is strongly advised to make a copy of the wallet files first, just in case something goes wrong.

Overview

In short, the process is:

Set-up

  1. Both parties prepare beldex-wallet-cli files

  2. Both parties command prepare_multisig and send data to each other

  3. Both parties command make_multisig

Receiving

  1. All parties can type address to see the created multisig wallet address. The address will, of course, be the same for all parties since they're all watching the same wallet.

Preparation for Sending

  1. To prepare for sending both parties command export_multisig_info <filename> and send the file to the other party

  2. To complete preparation, all parties command import_multisig_info <filename1> <filename2> and import files from other parties

Sending

  1. To send, any party can use the usual transfer command, but the result will be a file named multisig_beldex_tx which must be sent to any 1 other signer

  2. The other party commands sign_multisig multisig_beldex_tx and the file is updated with the signature.

  3. The completely signed file is pushed to the network with use of submit_multisig multisig_beldex_tx

Below is a step-by-step walkthrough.

Set-up

Step 1 Initiate Creation of Multisig Wallet and Exchange Data

Requirements:

  • 2 empty beldex-wallet-cli wallets

  • Both wallets connected to beldexd

  • Confidential communication channel

Person A must run the command in their beldex-wallet-cli:

Person A will receive the output:

Copy the entire line Multisig...5ozpN and be sure to capture the whole thing when copying.

Send this line to person B through a confidential communication channel.

Person B does the same and sends his output to person A.

Person B must run the command in their beldex-wallet-cli:

Person B will receive the output:

Person B will copy the Multisig…...eJi4FS and send it to person A through a confidential communication channel.

Step 2 Create Multisig Wallets

Both person A and person B now have the Multisig...arg text from the other one. With that, each of them can create their part of the multisig wallet. Before you proceed, note that the wallet will lose access to the underlying account when converted to multisig. This is not really a problem, since we started with an empty one, and if all goes ok with this step, you won't ever need it unless you want to go through the process again for whatever reason (like HDD died, but you have the seed mnemonic of the underlying account and want to reconstruct the multisig wallet).

Person A will use the output Person B sent and will run the command:

The wallet will output something similar to:

Person B will use the output Person A sent and run the command:

The wallet will output something similar to:

Now each person involved should exchange addresses and compare, they must be the same.

Receiving

Step 1 Fund The Multisig Account

This is simple. Just send to the shared address. You can send multiple times, this is the same as a normal wallet. You can use payment ID’s as well, or generate an integrated address to receive funds.

Best part, whomever is sending the funds won't be able to tell that the address belongs to a multisig wallet since it looks like any other.

Step 2 Check Multisig Account Balance

Just open the wallet and command refresh. Once completed, both persons can verify that the funds arrived.

Person A commands:

Person A outputs:

Person B can do the same:

Person B has the same outputs:

Spending

Step 1 Synchronizing Key Images

1.1 Exporting Multisig Info

Without this step, it will not be possible to create a spending transaction.

Both persons need to run the following command to sync their key images:

Where <filename> can be any filename.

Person A will run the command:

Person A will receive the output:

The file mi1 will be located in the shell working folder*

Person A sends that file to Person B. They can send the file in many ways, preferably through by handing a usb drive with the file on it, however If you would like to send the file through terminal use , an optional step has been added if you choose to use this method.

Person B does the same, but changing the filename and runs the command:

Person B will receive the output:

The file mi2 will be located in the shell working folder*

Person B sends that file to person A.

Now, they must both import each other's file.

Optional: Step 1.2 Sending Multisig Info File with terminal - transfer.sh

It is optional to use the terminal to send each person the multisig info files.

UPLOADING MULTISIG INFO FILE

Person A will open up a new terminal and change to the directory “mi1” has been saved.*

Person A will run the following command:

Person A will receive the link to the file as an output, looking similar to:

Person A will need to send this link to Person B.

Person B will run a similar command:

Person B will receive the link to the file as an output, looking similar to:

Person B will need to send this link to Person A.

Downloading Multisig Info file

Person A should change to the directory of their beldex-wallet-cli and use Person B’s download link to run the command:

Replacing <Person B link> with the link Person B shared with Person A and <filename>with the filename of the Multisig info file that Person A generated, for example Person A will run the command:

Likewise, Person B should do the same, changing directories to their beldex-wallet-cli and downloading with Person A’s download link, and filename.

Step 1.3 Importing Multisig Info

Person A will run the command:

Depending on the transactions made in to the multsig wallet the output will look similar to:

Person B will run a similar command:

and the output will look like:

Step 2 Preparing Spending Transaction

Either person A or person B can do this, it doesn't matter. To avoid weird things from happening only do it for 1 transaction at a time.

Person A performs the usual transfer command:

The output will look like:

Check in the folder where you started beldex-wallet-cli from. There should be a file named multisig_beldex_tx.

Person A will send the file multisig_beldex_tx to the Person B. Person A can send this file through email or alternatively use the transfer.sh commands outside of the wallet:

If Person A chooses to use transfer.sh command to send the file to Person B they will receive a <link> to pass to Person B.

Person B must finish the signature. Person B copies/downloads the file to the same folder from where he started (or will start) beldex-wallet-cli.

Person B can run the command to download the file to the beldex-wallet-cli directory.

Replacing https://transfer.sh/CJqnM/multisig_beldex_tx with the link provided by Person A.

Then, Person B runs the command:

A prompt will be displayed to allow person B to check the transaction before signing:

If ok, answer Y, and the output will look like:

Finally, person B submits the transaction to the network by commanding:

There will be a confirmation prompt:

If ok, answer Y, and the transaction will be sent. The output will look like:

The person B could also send the signed TX to person A, who could then submit it to the network himself.

If you want to make another one, you have to go back to step 1 of spending (sync the key images again).

Note on folders and file locations, as it could create some confusions. The wallet will look for the files and export them to the folder from where it was started, ie where your command prompt / shell was when you called beldex-wallet-cli. It may or may not be the same folder as your actual wallet files or beldex-wallet-cli, depending on how you go about it.

For example, your wallet could be on some USB drive like f:\temp\, and your wallet software on c:\beldex-windows-x64\ and your shell working folder could be c:\.

If you remain in c:\ with the shell, you could start the wallet by its full path and specify the wallet file location: c:\beldex-windows-x64\beldex-wallet-cli.exe --wallet-file f:\temp\mywallet. In this case, all the import/export stuff would be read/written to c:\

Source:

because that's still your shell's working folder.

It would be probably feel more natural to cd into the wallet folder. Do f: to change drive and then cd f:\temp\. Then, simply start the wallet from that location by its full path again: c:\beldex-windows-x64\beldex-wallet-cli.exe --wallet-file mywallet. Notice how you don't have to write the full wallet path now as you're already there with your shell. In this case, all the files mentioned above would be written or read from the same folder as the wallet files.

https://transfer.sh/
Monero Stackexchange: How to use Monero Multisigniture Wallets
prepare_multisig
MultisigV1cYuTGuf8FSiCYnMtLU4sZzeKZgeMy51qf4CcG2EQ2BPqKTii6YanpNLJDTM9rVRNfBPNFnJHoCWwGT9d8kB2UEDNHDxjgaAZX6DAWtj9VBFq9Q5qHjduozaYzgYpbVfHKHUQR2UrJjyX7tCSyd8gFEHUSocDRejRZBrFrKNifri5ozpN

Send this multisig info to all other participants, then use make_multisig <threshold> <info1> [<info2>...] with others' multisig info

This includes the PRIVATE view key, so needs to be disclosed only to that multisig wallet's participants
prepare_multisig
MultisigV1BU9w9mysQMhNTYcNFQgD82VQiKFGpkwy8Jmu13iWWBmoeRbqyuYmEh22bJRk945ntuDeazTsYwUCYZcCL1cxuf4xDzwUJCLkiYhPCvF7gv3xrCGkAiozirNUG6CxRa53mHqp4Cvdj3yxcQcYbXNYC1ecybbQMW1gs5BBQiruVGeJi4FS

Send this multisig info to all other participants, then use make_multisig <threshold> <info1> [<info2>...] with others' multisig info

This includes the PRIVATE view key, so needs to be disclosed only to that multisig wallet's participants
make_multisig 2 MultisigV1BU9w9mysQMhNTYcNFQgD82VQiKFGpkwy8Jmu13iWWBmoeRbqyuYmEh22bJRk945ntuDeazTsYwUCYZcCL1cxuf4xDzwUJCLkiYhPCvF7gv3xrCGkAiozirNUG6CxRa53mHqp4Cvdj3yxcQcYbXNYC1ecybbQMW1gs5BBQiruVGeJi4FS
2/2 multisig address: 86ScXhWpAG2aUHmFemwvn4HddHA5GQ4u6MvYsW2hVteJSwLJXCEhk2aVp4XzyqGmvyUqc3w8fwWwg6szGEytUSx51C6WQ3er8
make_multisig 2 MultisigV1cYuTGuf8FSiCYnMtLU4sZzeKZgeMy51qf4CcG2EQ2BPqKTii6YanpNLJDTM9rVRNfBPNFnJHoCWwGT9d8kB2UEDNHDxjgaAZX6DAWtj9VBFq9Q5qHjduozaYzgYpbVfHKHUQR2UrJjyX7tCSyd8gFEHUSocDRejRZBrFrKNifri5ozpN
2/2 multisig address: 86ScXhWpAG2aUHmFemwvn4HddHA5GQ4u6MvYsW2hVteJSwLJXCEhk2aVp4XzyqGmvyUqc3w8fwWwg6szGEytUSx51C6WQ3er8
show_transfers
56156 in 07:50:35 PM 0.100000000000 88ba687dc79a0b39e6de6d0763eda8363d33d9f58ec9a096171bd9a7f1dae873 0000000000000000 -  
56156 in 08:00:18 PM 0.100000000000 d6ac845b9400759525519cdc5d514eb8f5b1d265b24d1c016e75b20ed3b4b7da 0000000000000000 -
show_tranfers
56156 in 07:50:35 PM 0.100000000000 88ba687dc79a0b39e6de6d0763eda8363d33d9f58ec9a096171bd9a7f1dae873 0000000000000000 -  
56156 in 08:00:18 PM 0.100000000000 d6ac845b9400759525519cdc5d514eb8f5b1d265b24d1c016e75b20ed3b4b7da 0000000000000000 -
export_multisig_info <filename>
export_multisig_info mi1
Multisig info exported to mi1
export_multisig_info mi2
Multisig info exported to mi2
curl --upload-file ./mi1 https://transfer.sh/mi1
https://transfer.sh/Ehl5q/mi1
curl --upload-file ./mi1 https://transfer.sh/mi2
https://transfer.sh/Iedv9/mi2
curl <Person B link> -o <filename>
curl https://transfer.sh/Iedv9/mi2 -o mi2
curl https://transfer.sh/Ehl5q/mi1 -o mi1
import_multisig_info mi2
2 outputs found in mi2  
Height 56156, transaction <88ba687dc79a0b39e6de6d0763eda8363d33d9f58ec9a096171bd9a7f1dae873>, received 0.100000000000  
Height 56156, transaction <d6ac845b9400759525519cdc5d514eb8f5b1d265b24d1c016e75b20ed3b4b7da>, received 0.100000000000
import_multisig_info mi1
2 outputs found in mi1  
Height 56156, transaction <88ba687dc79a0b39e6de6d0763eda8363d33d9f58ec9a096171bd9a7f1dae873>, received 0.100000000000  
Height 56156, transaction <d6ac845b9400759525519cdc5d514eb8f5b1d265b24d1c016e75b20ed3b4b7da>, received 0.100000000000
transfer 86TmZX8EzZVjS9zNg7zAsrEQFDgcVC2qV2ZMyoWsbyK4SNB2SwMHZtMhPSsFyTmRBQUaGVF5k3qy5CMFM6Lvj7gi3AeszDag7 50
Unsigned transaction(s) successfully written to file: multisig_beldex_tx
curl --upload-file ./multisig_beldex_tx https://transfer.sh/multisig_beldex_tx
curl https://transfer.sh/CJqnM/multisig_beldex_tx -o multisig_beldex_tx
sign_multisig multisig_beldex_tx
Loaded 1 transactions, for 108.082287779, fee 0.061108880, sending 50.000000000 to 86TmZX8EzZVjS9zNg7zAsrEQFDgcVC2qV2ZMyoWsbyK4SNB2SwMHZtMhPSsFyTmRBQUaGVF5k3qy5CMFM6Lvj7gi3AeszDag7, 58.021178899 change to 86ScXhWpAG2aUHmFemwvn4HddHA5GQ4u6MvYsW2hVteJSwLJXCEhk2aVp4XzyqGmvyUqc3w8fwWwg6szGEytUSx51C6WQ3er8, with min ring size 10, no payment ID. Is this okay? (Y/Yes/N/No):
Transaction successfully signed to file multisig_beldex_tx, txid 3b03b16c79eaa5564171ae88242c4cdb1f9e0b41fc3de949c6524c5026a3f3bb

It may be relayed to the network with submit_multisig
submit_multisig multisig_beldex_tx
Loaded 1 transactions, for 108.082287779, fee 0.061108880, sending 50.000000000 to 86TmZX8EzZVjS9zNg7zAsrEQFDgcVC2qV2ZMyoWsbyK4SNB2SwMHZtMhPSsFyTmRBQUaGVF5k3qy5CMFM6Lvj7gi3AeszDag7, 58.021178899 change to 86ScXhWpAG2aUHmFemwvn4HddHA5GQ4u6MvYsW2hVteJSwLJXCEhk2aVp4XzyqGmvyUqc3w8fwWwg6szGEytUSx51C6WQ3er8, with min ring size 10, no payment ID. Is this okay? (Y/Yes/N/No):
Transaction successfully submitted, transaction <3b03b16c79eaa5564171ae88242c4cdb1f9e0b41fc3de949c6524c5026a3f3bb>

M/N Multisig

First, the wallet to be converted to multisig must be empty. It is best to use a brand-new wallet for the purpose, although not required. It is strongly advised to make a copy of the wallet files first, just in case something goes wrong.

Overview

In short, the process is:

Wallet Creation

  1. All parties command prepare_multisig and send data to ALL other parties

  2. All parties command make_multisig <threshold> <data1> <data2> .... <dataN> and send 2nd batch of data to ALL other parties

  3. All parties command finalize_multisig <data1> <data2> ...... <DataM> with the data from ALL other parties.

Receiving

  1. All parties can type address to see the created multisig wallet address. The address will, of course, be the same for all parties since they're all watching the same wallet.

Preparation for Sending

  1. To prepare for sending all parties command export_multisig_info <filename> and send the file to all other parties

  2. To complete preparation, all parties command import_multisig_info <filename1> <filename2> ..... <filenameM> and import files from other parties

Sending

  1. To send, any party can use the usual transfer command, but the result will be a file named multisig_beldex_tx which must be sent to any 1 other signer

  2. The other party commands sign_multisig multisig_beldex_tx and the file is updated with the signature.

  3. The completely signed file is pushed to the network with use of submit_multisig multisig_beldex_tx.

Below is a step-by-step walkthrough.

Wallet Creation

Requirements:

  • N empty beldex-wallet-cli wallets.

  • All parties wallets connected to a beldexd.

  • Confidential communication channel.

Step 1 - Prepare Multisig

All N people should open up their beldex-wallet-cli and generate a new wallet. Make sure you do not have any $beldex within your wallet.

The 1st, 2nd, 3rd, and so on, up to the Nth person commands in their beldex-wallet-cli:

The output will be something like:

Copy the entire line Multisig…...Vozid and be sure to capture the whole thing when copying.

Each person must send their Multisig…...arg to each other person, it is suggested to send this information through a confidential comunication channel.

Step 2 - Make Multisig

All N people now have the Multisig...arg text from the other N-1 people. With that, each of them can create their part of the multisig wallet. Before you proceed, note that the wallet will lose access to the underlying wallet when converted to multisig. This is not really a problem, since we started with an empty wallet, and if all goes OK with this step, you won't ever need it unless you want to go through the process again for whatever reason (like HDD died, but you have the seed mnemonic of the underlying wallet and want to reconstruct the multisig wallet).

Person 1 commands:

Where <threshold> is the number of signers required out of the N people, <data person 2>is the output provided by Person 2, and <data person 3> is the output provided by Person 3, and <data person N> is the output provided by the Nth person.

This is the process for M of N multisig wallets, For the below example we will show a 2 of 3 multisig wallet.

This should look similar to:

Notice how there are 2 strings starting with Multisig....arg. One is from person 2 and other from person 3, if their is 5 different people their would be 4 different strings of Multisig....arg. The number at the beginning is the minimum required number of signatures. Since it's a 2/3 scheme - it's 2.

To reiterate, for a 5/8 scheme which means there are 8 people who can sign and 5 people must sign to authorise a transaction out of the Multi signature wallet. In this circumstance, the command each person would run has a <threshold> that equals 5 and 7 strings of multisig...arg.

The output from the make_multisig command will be similar to:

With any M of N schemes there's an additional step to be done here. The new Multisig...arg info that was just outputted must be passed to ALL other participants (For person 1 they must send it to persons 2 & 3 ... all the way up to person N).

Persons N sends the new output to all other persons.

Step 3 - Finalize Multisig

Here we do one last command to make the wallet ready for receiving. It requires the 2nd batch of Multisig…....arg strings received from other parties.

Person N will run the command:

Unfortunately the wallet will not display an output at this point. There's no indication that the process was successfully completed (for now). All N persons do the same, and all N wallets will show the same address after this step.

Now each person run the command:

And each N people of the multisig wallet should be shown the same address in their wallet.

Receiving

Step 1 Fund The Multisig Account

This is simple, just send to the shared address. You can send multiple times, just like a normal wallet. You can use payment ID’s as well, or generate an integrated address to receive funds.

Best part, whomever is sending the funds won't be able to tell that the address belongs to a multisig wallet since it looks like any other Beldex address.

Step 2 Check Multisig Account Balance

Just open the wallet and run the refresh command. Once completed, all persons can verify that the funds arrived.

Person 1, 2, 3 up to N can run the command:

To see incoming transfers or the following command to see the balance of the wallet:

Preparation for Spending

Step 1 - Export Multisig

Without this step, it will not be possible to create a transaction that spends Beldex. As a minimum, the sender needs to get a partial key image from all the people who will sign the transaction with them later. They could get it from the parties immediately and then later decide with whom to sign.

Person N commands:

Where miN can be any filename. The output will be:

The file miN will be located in the shell working folder*

Person N sends that file to other people. Persons 2 & 3 up to N do the same.

Optional: Step 1.2 Sending Multisig Info File with terminal - transfer.sh

It is optional to use the terminal to send each person the multisig info files.

UPLOADING MULTISIG INFO FILE

Person 1 will open up a new terminal and change to the directory mi1 has been saved.*

Person 1 will run the following command:

Person 1 will receive the link to the file as an output, looking similar to:

Person 1 will need to send this link to Person 2, Person 3, .... Person N. Person 2 will need to do the same and send the link to Person 1, 3 ..... N. Person 3 will need to do the same and send the link to Person 1, 2 ..... N. Person N will need to do the same and send the link to Person 1, 2, 3, 4, 5 ...... N-1.

DOWNLOADING MULTISIG INFO FILE

Person 1 should change to the directory of their beldex-wallet-cli and use Person 2, 3, 4 ... N’s download link to run the commands:

Replacing <link> with the link Person 2, 3 ... N shared with Person 1 and <filename> with the filename of the Multisig info file that Person 2, 3 or ... N generated, for example Person 1 will run the command:

And the command:

and all the way up to:

Likewise, Person 2, 3 .... and N should do the same, changing directories to their beldex-wallet-cli and downloading with the alternative Persons download link, and filename.

Step 2 - Import Multisig

Now, they must all import each other's file so they can be ready to make a TX later.

For example, Person 2 commands:

The wallet will look for files in the shell working folder* and if the files are found the output will look like:

Persons 1, 3 .... and N do the same.

Spending

Step 1 - Transfer (Preparing Unsigned Transaction)

Any of the multisig wallets can start a transaction, it doesn't matter. To avoid weird things from happening only do it for 1 transaction at a time. If anything weird happens, do the step 1 & 2 again to fix.

For example, let's say that Person 3 will make the TX.

Person 3 performs the usual transfer command:

The output will look like:

Check in the folder where you started beldex-wallet-cli from. There should be a file named multisig_beldex_tx.

Send the file multisig_beldex_tx to one of the people who will sign the TX.

Person 3 will send the file multisig_beldex_tx to the Person 1, 2 or N. Person 3 can send this file through email or alternatively use the transfer.sh commands outside of the wallet:

If Person 3 chooses to use transfer.sh command to send the file to Person 1 or 2 they will receive a <link>.

Person 1 or 2 must finish the signature. Person 1 or 2 copies/downloads the file to the same folder from where he started (or will start) beldex-wallet-cli.

Person 1 or 2 can run the command to download the file to the beldex-wallet-cli directory.

Replacing https://transfer.sh/CJqnM/multisig_beldex_tx with the link provided by Person 3.

Step 2 - Sign Multisig

Let's say Person 2 was picked as the partner. They must finish the signature. Person 2 copies the file to the same folder from where he started (or will start) beldex-wallet-cli.

Then, Person 2 commands:

and they will be prompted to check it first:

If ok, answer Y, and the output will look like:

If the threshold is greater than 2 another multisig_beldex_tx file will need to be signed by the amount of signers required.

Step 3 - Submit Multisig

Finally, person with the final signed file submits the transaction to the network by commanding:

There will be a confirmation prompt:

If ok, answer Y, and the transaction will be sent. The output will look like:

You can check its status by using the show_transfers command.

The person 2 could also send the signed TX to person 3, who could then submit it to the network himself.

If you want to make another one, you have to go back to preparation for spending step (sync the key images again).

The wallet will look for the files and export them to the folder from where it was started, ie where your command prompt / shell was when you called beldex-wallet-cli. It may or may not be the same folder as your actual wallet files or beldex-wallet-cli, depending on how you go about it.

For example, your wallet could be on some USB drive like f:\temp\, and your wallet software on c:\beldex\ and your shell working folder could be c:\.

If you remain in c:\ with the shell, you could start the wallet by its full path and specify the wallet file location: c:\beldex\beldex-wallet-cli.exe --wallet-file f:\temp\mywallet. In this case, all the import/export stuff would be read/written to c:\

Source:

because that's still your shell's working folder.

It would be probably feel more natural to cd into the wallet folder. Do f: to change drive and then cd f:\temp\. Then, simply start the wallet from that location by its full path again: c:\beldex\beldex-wallet-cli.exe --wallet-file mywallet. Notice how you don't have to write the full wallet path now as you're already there with your shell. In this case, all the files mentioned above would be written or read from the same folder as the wallet files.

Monero Stack Exchange: how to use monero multisigniture wallets
prepare_multisig
MultisigV1cR7X7ZAfa5ncRmQv1hpt4P1DmmnhinhokhDMqsmuWXmHFrb6xUr3FtBGygCfMScxnKJvXK1vvPNahXNWfYWVquieBErr98sFtgs24c2YuYrQT78uxV8oYx1A9bKeHSUfYzCniN5kMznEfvKCw3FiomjLvw364gg98ZWp16zA7pUVozid  
Send this multisig info to all other participants, then use make_multisig <threshold> <info1> [<info2>...] with others' multisig info  
This includes the PRIVATE view key, so needs to be disclosed only to that multisig wallet's participants
make_multisig <threshold> <data person 2> <data person 3> ..... <data person N>
make_multisig 2 MultisigV12EHtuvxFyAYDNcDsbDqWHDfkRr4JZchSdf8eZQSFwiMKDk15CYEJeQyEwtSnqUZdRr2BsEaT9z2biUdDTEQM4T3N625owvKMDoyhbRj3bwkBtceLKimap8DBAiUmSABpdf62HnPYiRtLW4JdVFmfqjndhWjYBypx1duvpi3qwfSrBY9a MultisigV1TqQ8Gt5Sb3GYtVJa1fQrK7e7hPm59XbooNvLxPSBR4856bW9jtD1hEyWy4yULKrX7reZZ6vrKdBCdSdk4nfApCGYJAA2WP4pKNwHDyKTuLEeuoDhqno8keEVeEF9AZsWXvng1avUTRREmy11h8wu8pdjopC4AguQKiHCJCN7aT9W6b8C  
Another step is needed  
MultisigxV1PKCwmVrucV8bXi18VnHFqRXcnAq4osFL3ahzPHCiN48zhs28u6jmEhy7ktZbUEGfRtTuFjjKzJYb61fnFwnysBBnNXsUtCgFMXPa7FyNKVy2AnUg3ePEnKqWkgKVvA81axTS8r9EX1DmVPXgFKkFzw4Yj4ZtMcJVo77b5ayuMzjFtsaijko9X2bjd9AVfFVGBFMCSLa4xXhNVNz19CTUJx5gpoPG  
Send this multisig info to all other participants, then use finalize_multisig <info1> [<info2>...] with others' multisig info
finalize_multisig MultisigxV1Vg1tsRLurvAc5aSA9Hd9God3MQhijCFoE1rPDFzx7ufwhs28u6jmEhy7ktZbUEGfRtTuFjjKzJYb61fnFwnysBBnfYm4xJWcJ4qM4khSb2KkyAKDuT39pTvdmemhojNjeYCmgSQ1NZLyBj48R1tVpiGNxa7TDnGbSgLuKBq35AX6jfu5PECAcDDn22CFQbJZip7xnBbn89Szzh27xeozfxcLiqqm MultisigxV14xDZBGACz3iUh2aVKGE5q5VzcvJdg2qCvZECgUWCdy5QNXsUtCgFMXPa7FyNKVy2AnUg3ePEnKqWkgKVvA81axTSfYm4xJWcJ4qM4khSb2KkyAKDuT39pTvdmemhojNjeYCmCNaRSsDEcemLLL8wCvzsy5R6hhkhWLYkD9vhZwprSFFKMZ7tfRko2VfMBoKQhB7PKXbf1npk2xceVKu2y7kExywb
address
show_transfers
balance
export_multisig_info miN
Multisig info exported to miN
curl --upload-file ./mi1 https://transfer.sh/mi1
https://transfer.sh/Ehl5q/mi1
curl <link> -o <filename>
curl https://transfer.sh/Iedv9/mi2 -o mi2
curl https://transfer.sh/dfvr3/mi3 -o mi3
curl https://transfer.sh/dfvr3/mi3 -o miN
curl https://transfer.sh/Ehl5q/mi1 -o mi1
import_multisig_info mi1
import_multisig_info mi3
import_multisig_info miN
2 outputs found in mi1  
Height 56156, transaction <88ba687dc79a0b39e6de6d0763eda8363d33d9f58ec9a096171bd9a7f1dae873>, received 0.100000000000  
Height 56156, transaction <d6ac845b9400759525519cdc5d514eb8f5b1d265b24d1c016e75b20ed3b4b7da>, received 0.100000000000
transfer bxTmZX8EzZVjS9zNg7zAsrEQFDgcVC2qV2ZMyoWsbyK4SNB2SwMHZtMhPSsFyTmRBQUaGVF5k3qy5CMFM6Lvj7gi3AeszDag7 50
Unsigned transaction(s) successfully written to file: multisig_beldex_tx
curl --upload-file ./multisig_beldex_tx https://transfer.sh/multisig_beldex_tx
curl https://transfer.sh/CJqnM/multisig_beldex_tx -o multisig_beldex_tx
sign_multisig multisig_beldex_tx
Loaded 1 transactions, for 108.082287779, fee 0.061108880, sending 50.000000000 to bxTmZX8EzZVjS9zNg7zAsrEQFDgcVC2qV2ZMyoWsbyK4SNB2SwMHZtMhPSsFyTmRBQUaGVF5k3qy5CMFM6Lvj7gi3AeszDag7, 58.021178899 change to bxScXhWpAG2aUHmFemwvn4HddHA5GQ4u6MvYsW2hVteJSwLJXCEhk2aVp4XzyqGmvyUqc3w8fwWwg6szGEytUSx51C6WQ3er8, with min ring size 10, no payment ID.

Is this okay? (Y/Yes/N/No):
Transaction successfully submitted, transaction <3b03b16c79eaa5564171ae88242c4cdb1f9e0b41fc3de949c6524c5026a3f3bb>
submit_multisig multisig_beldex_tx
Loaded 1 transactions, for 108.082287779, fee 0.061108880, sending 50.000000000 to bxTmZX8EzZVjS9zNg7zAsrEQFDgcVC2qV2ZMyoWsbyK4SNB2SwMHZtMhPSsFyTmRBQUaGVF5k3qy5CMFM6Lvj7gi3AeszDag7, 58.021178899 change to bxScXhWpAG2aUHmFemwvn4HddHA5GQ4u6MvYsW2hVteJSwLJXCEhk2aVp4XzyqGmvyUqc3w8fwWwg6szGEytUSx51C6WQ3er8, with min ring size 10, no payment ID.

Is this okay? (Y/Yes/N/No):
Transaction successfully submitted, transaction <3b03b16c79eaa5564171ae88242c4cdb1f9e0b41fc3de949c6524c5026a3f3bb>