aboutsummaryrefslogtreecommitdiff
path: root/src/gen_multisig
diff options
context:
space:
mode:
authornaughtyfox <mail.for.milo@gmail.com>2018-07-12 12:55:52 +0300
committernaughtyfox <mail.for.milo@gmail.com>2018-10-01 19:16:56 +0300
commit9f3963e8235826704b7bc6ef9e3b90613a72e16c (patch)
tree303e65a2dcbaf40520e68d11cdcb7efcb41cff57 /src/gen_multisig
parentMerge pull request #4423 (diff)
downloadmonero-9f3963e8235826704b7bc6ef9e3b90613a72e16c.tar.xz
Arbitrary M/N multisig schemes:
* support in wallet2 * support in monero-wallet-cli * support in monero-wallet-rpc * support in wallet api * support in monero-gen-trusted-multisig * unit tests for multisig wallets creation
Diffstat (limited to 'src/gen_multisig')
-rw-r--r--src/gen_multisig/gen_multisig.cpp15
1 files changed, 3 insertions, 12 deletions
diff --git a/src/gen_multisig/gen_multisig.cpp b/src/gen_multisig/gen_multisig.cpp
index f11f442bc..9749ba13f 100644
--- a/src/gen_multisig/gen_multisig.cpp
+++ b/src/gen_multisig/gen_multisig.cpp
@@ -130,8 +130,8 @@ static bool generate_multisig(uint32_t threshold, uint32_t total, const std::str
ss << " " << name << std::endl;
}
- // finalize step if needed
- if (!extra_info[0].empty())
+ //exchange keys unless exchange_multisig_keys returns no extra info
+ while (!extra_info[0].empty())
{
std::unordered_set<crypto::public_key> pkeys;
std::vector<crypto::public_key> signers(total);
@@ -145,11 +145,7 @@ static bool generate_multisig(uint32_t threshold, uint32_t total, const std::str
}
for (size_t n = 0; n < total; ++n)
{
- if (!wallets[n]->finalize_multisig(pwd_container->password(), pkeys, signers))
- {
- tools::fail_msg_writer() << genms::tr("Error finalizing multisig");
- return false;
- }
+ extra_info[n] = wallets[n]->exchange_multisig_keys(pwd_container->password(), pkeys, signers);
}
}
@@ -244,11 +240,6 @@ int main(int argc, char* argv[])
return 1;
}
- if (threshold != total-1 && threshold != total)
- {
- tools::fail_msg_writer() << genms::tr("Error: unsupported scheme: only N/N and N-1/N are supported");
- return 1;
- }
bool create_address_file = command_line::get_arg(*vm, arg_create_address_file);
if (!generate_multisig(threshold, total, basename, testnet ? TESTNET : stagenet ? STAGENET : MAINNET, create_address_file))
return 1;