mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 06:28:31 +01:00
multiprocess: add interfaces::ExternalSigner class
Add interfaces::ExternalSigner to let signer objects be passed between processes and signer code to run in the original process, without multiple processes linking and running signer code.
This commit is contained in:
@@ -67,6 +67,17 @@ using interfaces::WalletClient;
|
||||
|
||||
namespace node {
|
||||
namespace {
|
||||
#ifdef ENABLE_EXTERNAL_SIGNER
|
||||
class ExternalSignerImpl : public interfaces::ExternalSigner
|
||||
{
|
||||
public:
|
||||
ExternalSignerImpl(::ExternalSigner signer) : m_signer(std::move(signer)) {}
|
||||
std::string getName() override { return m_signer.m_name; }
|
||||
private:
|
||||
::ExternalSigner m_signer;
|
||||
};
|
||||
#endif
|
||||
|
||||
class NodeImpl : public Node
|
||||
{
|
||||
private:
|
||||
@@ -172,14 +183,18 @@ public:
|
||||
}
|
||||
return false;
|
||||
}
|
||||
std::vector<ExternalSigner> externalSigners() override
|
||||
std::vector<std::unique_ptr<interfaces::ExternalSigner>> listExternalSigners() override
|
||||
{
|
||||
#ifdef ENABLE_EXTERNAL_SIGNER
|
||||
std::vector<ExternalSigner> signers = {};
|
||||
const std::string command = gArgs.GetArg("-signer", "");
|
||||
if (command == "") return signers;
|
||||
if (command == "") return {};
|
||||
ExternalSigner::Enumerate(command, signers, Params().NetworkIDString());
|
||||
return signers;
|
||||
std::vector<std::unique_ptr<interfaces::ExternalSigner>> result;
|
||||
for (auto& signer : signers) {
|
||||
result.emplace_back(std::make_unique<ExternalSignerImpl>(std::move(signer)));
|
||||
}
|
||||
return result;
|
||||
#else
|
||||
// This result is indistinguishable from a successful call that returns
|
||||
// no signers. For the current GUI this doesn't matter, because the wallet
|
||||
|
||||
Reference in New Issue
Block a user