General purpose any M-of-N multisig monero wallet wrapper for getmonero.org wallet
Uses tor and hidden services to create serverless peer to peer connections for multisig
With this you can easily create any M-of-N multisig setup, for example
- 2-of-3: collaborative decision-making - requres 2 of 3 parties to sign off on every transaction
- 3-of-5, 5-of-7: treasury management - requres multiple parties to sign off on every transaction
- 2-of-2, 3-of-3: joint account - requires all parties to sign off on every transaction
- ...
As this is a wrapper - the wallet files are compatible with getmonero.org wallet
This is a nodejs package - install nodejs
and install package dependencies in p2p
folder with yarn
or npm i
This is package uses monero binaries, tor and tmux from your system path
for Ubuntu/Debian based apt install tmux tor node nodejs monero
might suffice
Each party would should execute these in their own environment (laptop, workstations...)
This will start the monero daemon in simple mode
./binaries/daemon-simple-start
./binaries/wallet-create mywallet1
./binaries/wallet-create mywallet2
./binaries/wallet-create mywallet3
...
Do note down the onion + port for each wallet as these are required for next step
This will open monero-wallet-rpc
and tor
(not as daemon)
./binaries/wallet-open mywallet1
./binaries/wallet-open mywallet2
./binaries/wallet-open mywallet3
...
This needs to be left open for the proceeding steps
This is an interactive wizard and will ask
- multisig config creation path
- shared secret password (used for authentication when connecting to other parties)
- M to use (number of parties required to sign for spending)
- N to use (number of total parties)
- parties' wallet names and onion + port identifiers
./p2p/binaries/config-create
Specify previously created multisig config file path
./p2p/binaries/multisig-setup --wallet-name mywallet1 --config-path multisig-config.yaml
./p2p/binaries/multisig-setup --wallet-name mywallet2 --config-path multisig-config.yaml
./p2p/binaries/multisig-setup --wallet-name mywallet3 --config-path multisig-config.yaml
...
Do note down your deposit address here
This is required before and after every spend
./p2p/binaries/multisig-import --wallet-name mywallet1 --config-path multisig-config.yaml
./p2p/binaries/multisig-import --wallet-name mywallet2 --config-path multisig-config.yaml
./p2p/binaries/multisig-import --wallet-name mywallet3 --config-path multisig-config.yaml
...
Total and unlocked balance are also displayed here
When your deposit has been confirmed you can spend
The party that wants to spend executes
./p2p/binaries/multisig-spend \
--wallet-name mywallet1 \
--config-path multisig-config.yaml \
--spend-address 888tNkZrPN6JsEgekjMnABU4TBzc2Dt29EPAvkRxbANsAnjyPbb3iQ1YBRk1UXcdRsiKc9dhwMVgN5S9cQUiyoogDavup3H \
--spend-amount 1.5
The other parties who wish to sign execute
./p2p/binaries/multisig-spend --wallet-name mywallet2 --config-path multisig-config.yaml