Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Erik Jansen
crown-core-test-new-gitlab-runner
Commits
59f0475d
Commit
59f0475d
authored
11 years ago
by
Jeff Garzik
Browse files
Options
Download
Email Patches
Plain Diff
Support absence of wallet (pwalletMain==NULL) in several locations,
notably RPC.
parent
e7ea5155
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
src/bitcoinrpc.cpp
+80
-72
src/bitcoinrpc.cpp
src/bitcoinrpc.h
+1
-0
src/bitcoinrpc.h
src/init.cpp
+17
-11
src/init.cpp
src/rpcmining.cpp
+12
-1
src/rpcmining.cpp
src/rpcrawtransaction.cpp
+2
-1
src/rpcrawtransaction.cpp
src/rpcwallet.cpp
+11
-7
src/rpcwallet.cpp
with
123 additions
and
92 deletions
+123
-92
src/bitcoinrpc.cpp
View file @
59f0475d
...
...
@@ -160,6 +160,9 @@ string CRPCTable::help(string strCommand) const
continue
;
if
(
strCommand
!=
""
&&
strMethod
!=
strCommand
)
continue
;
if
(
pcmd
->
reqWallet
&&
!
pwalletMain
)
continue
;
try
{
Array
params
;
...
...
@@ -218,77 +221,77 @@ Value stop(const Array& params, bool fHelp)
static
const
CRPCCommand
vRPCCommands
[]
=
{
// name actor (function) okSafeMode threadSafe
// ------------------------ ----------------------- ---------- ----------
{
"help"
,
&
help
,
true
,
true
},
{
"stop"
,
&
stop
,
true
,
true
},
{
"getblockcount"
,
&
getblockcount
,
true
,
false
},
{
"getbestblockhash"
,
&
getbestblockhash
,
true
,
false
},
{
"getconnectioncount"
,
&
getconnectioncount
,
true
,
false
},
{
"getpeerinfo"
,
&
getpeerinfo
,
true
,
false
},
{
"addnode"
,
&
addnode
,
true
,
true
},
{
"getaddednodeinfo"
,
&
getaddednodeinfo
,
true
,
true
},
{
"getdifficulty"
,
&
getdifficulty
,
true
,
false
},
{
"getnetworkhashps"
,
&
getnetworkhashps
,
true
,
false
},
{
"getgenerate"
,
&
getgenerate
,
true
,
false
},
{
"setgenerate"
,
&
setgenerate
,
true
,
false
},
{
"gethashespersec"
,
&
gethashespersec
,
true
,
false
},
{
"getinfo"
,
&
getinfo
,
true
,
false
},
{
"getmininginfo"
,
&
getmininginfo
,
true
,
false
},
{
"getnewaddress"
,
&
getnewaddress
,
true
,
false
},
{
"getaccountaddress"
,
&
getaccountaddress
,
true
,
false
},
{
"getrawchangeaddress"
,
&
getrawchangeaddress
,
true
,
false
},
{
"setaccount"
,
&
setaccount
,
true
,
false
},
{
"getaccount"
,
&
getaccount
,
false
,
false
},
{
"getaddressesbyaccount"
,
&
getaddressesbyaccount
,
true
,
false
},
{
"sendtoaddress"
,
&
sendtoaddress
,
false
,
false
},
{
"getreceivedbyaddress"
,
&
getreceivedbyaddress
,
false
,
false
},
{
"getreceivedbyaccount"
,
&
getreceivedbyaccount
,
false
,
false
},
{
"listreceivedbyaddress"
,
&
listreceivedbyaddress
,
false
,
false
},
{
"listreceivedbyaccount"
,
&
listreceivedbyaccount
,
false
,
false
},
{
"backupwallet"
,
&
backupwallet
,
true
,
false
},
{
"keypoolrefill"
,
&
keypoolrefill
,
true
,
false
},
{
"walletpassphrase"
,
&
walletpassphrase
,
true
,
false
},
{
"walletpassphrasechange"
,
&
walletpassphrasechange
,
false
,
false
},
{
"walletlock"
,
&
walletlock
,
true
,
false
},
{
"encryptwallet"
,
&
encryptwallet
,
false
,
false
},
{
"validateaddress"
,
&
validateaddress
,
true
,
false
},
{
"getbalance"
,
&
getbalance
,
false
,
false
},
{
"move"
,
&
movecmd
,
false
,
false
},
{
"sendfrom"
,
&
sendfrom
,
false
,
false
},
{
"sendmany"
,
&
sendmany
,
false
,
false
},
{
"addmultisigaddress"
,
&
addmultisigaddress
,
false
,
false
},
{
"createmultisig"
,
&
createmultisig
,
true
,
true
},
{
"getrawmempool"
,
&
getrawmempool
,
true
,
false
},
{
"getblock"
,
&
getblock
,
false
,
false
},
{
"getblockhash"
,
&
getblockhash
,
false
,
false
},
{
"gettransaction"
,
&
gettransaction
,
false
,
false
},
{
"listtransactions"
,
&
listtransactions
,
false
,
false
},
{
"listaddressgroupings"
,
&
listaddressgroupings
,
false
,
false
},
{
"signmessage"
,
&
signmessage
,
false
,
false
},
{
"verifymessage"
,
&
verifymessage
,
false
,
false
},
{
"getwork"
,
&
getwork
,
true
,
false
},
{
"listaccounts"
,
&
listaccounts
,
false
,
false
},
{
"settxfee"
,
&
settxfee
,
false
,
false
},
{
"getblocktemplate"
,
&
getblocktemplate
,
true
,
false
},
{
"submitblock"
,
&
submitblock
,
false
,
false
},
{
"listsinceblock"
,
&
listsinceblock
,
false
,
false
},
{
"dumpprivkey"
,
&
dumpprivkey
,
true
,
false
},
{
"dumpwallet"
,
&
dumpwallet
,
true
,
false
},
{
"importprivkey"
,
&
importprivkey
,
false
,
false
},
{
"importwallet"
,
&
importwallet
,
false
,
false
},
{
"listunspent"
,
&
listunspent
,
false
,
false
},
{
"getrawtransaction"
,
&
getrawtransaction
,
false
,
false
},
{
"createrawtransaction"
,
&
createrawtransaction
,
false
,
false
},
{
"decoderawtransaction"
,
&
decoderawtransaction
,
false
,
false
},
{
"decodescript"
,
&
decodescript
,
false
,
false
},
{
"signrawtransaction"
,
&
signrawtransaction
,
false
,
false
},
{
"sendrawtransaction"
,
&
sendrawtransaction
,
false
,
false
},
{
"gettxoutsetinfo"
,
&
gettxoutsetinfo
,
true
,
false
},
{
"gettxout"
,
&
gettxout
,
true
,
false
},
{
"lockunspent"
,
&
lockunspent
,
false
,
false
},
{
"listlockunspent"
,
&
listlockunspent
,
false
,
false
},
{
"verifychain"
,
&
verifychain
,
true
,
false
},
{
// name actor (function) okSafeMode threadSafe
reqWallet
// ------------------------ ----------------------- ---------- ----------
---------
{
"help"
,
&
help
,
true
,
true
,
false
},
{
"stop"
,
&
stop
,
true
,
true
,
false
},
{
"getblockcount"
,
&
getblockcount
,
true
,
false
,
false
},
{
"getbestblockhash"
,
&
getbestblockhash
,
true
,
false
,
false
},
{
"getconnectioncount"
,
&
getconnectioncount
,
true
,
false
,
false
},
{
"getpeerinfo"
,
&
getpeerinfo
,
true
,
false
,
false
},
{
"addnode"
,
&
addnode
,
true
,
true
,
false
},
{
"getaddednodeinfo"
,
&
getaddednodeinfo
,
true
,
true
,
false
},
{
"getdifficulty"
,
&
getdifficulty
,
true
,
false
,
false
},
{
"getnetworkhashps"
,
&
getnetworkhashps
,
true
,
false
,
false
},
{
"getgenerate"
,
&
getgenerate
,
true
,
false
,
false
},
{
"setgenerate"
,
&
setgenerate
,
true
,
false
,
true
},
{
"gethashespersec"
,
&
gethashespersec
,
true
,
false
,
false
},
{
"getinfo"
,
&
getinfo
,
true
,
false
,
false
},
{
"getmininginfo"
,
&
getmininginfo
,
true
,
false
,
false
},
{
"getnewaddress"
,
&
getnewaddress
,
true
,
false
,
true
},
{
"getaccountaddress"
,
&
getaccountaddress
,
true
,
false
,
true
},
{
"getrawchangeaddress"
,
&
getrawchangeaddress
,
true
,
false
,
true
},
{
"setaccount"
,
&
setaccount
,
true
,
false
,
true
},
{
"getaccount"
,
&
getaccount
,
false
,
false
,
true
},
{
"getaddressesbyaccount"
,
&
getaddressesbyaccount
,
true
,
false
,
true
},
{
"sendtoaddress"
,
&
sendtoaddress
,
false
,
false
,
true
},
{
"getreceivedbyaddress"
,
&
getreceivedbyaddress
,
false
,
false
,
true
},
{
"getreceivedbyaccount"
,
&
getreceivedbyaccount
,
false
,
false
,
true
},
{
"listreceivedbyaddress"
,
&
listreceivedbyaddress
,
false
,
false
,
true
},
{
"listreceivedbyaccount"
,
&
listreceivedbyaccount
,
false
,
false
,
true
},
{
"backupwallet"
,
&
backupwallet
,
true
,
false
,
true
},
{
"keypoolrefill"
,
&
keypoolrefill
,
true
,
false
,
true
},
{
"walletpassphrase"
,
&
walletpassphrase
,
true
,
false
,
true
},
{
"walletpassphrasechange"
,
&
walletpassphrasechange
,
false
,
false
,
true
},
{
"walletlock"
,
&
walletlock
,
true
,
false
,
true
},
{
"encryptwallet"
,
&
encryptwallet
,
false
,
false
,
true
},
{
"validateaddress"
,
&
validateaddress
,
true
,
false
,
false
},
{
"getbalance"
,
&
getbalance
,
false
,
false
,
true
},
{
"move"
,
&
movecmd
,
false
,
false
,
true
},
{
"sendfrom"
,
&
sendfrom
,
false
,
false
,
true
},
{
"sendmany"
,
&
sendmany
,
false
,
false
,
true
},
{
"addmultisigaddress"
,
&
addmultisigaddress
,
false
,
false
,
true
},
{
"createmultisig"
,
&
createmultisig
,
true
,
true
,
false
},
{
"getrawmempool"
,
&
getrawmempool
,
true
,
false
,
false
},
{
"getblock"
,
&
getblock
,
false
,
false
,
false
},
{
"getblockhash"
,
&
getblockhash
,
false
,
false
,
false
},
{
"gettransaction"
,
&
gettransaction
,
false
,
false
,
true
},
{
"listtransactions"
,
&
listtransactions
,
false
,
false
,
true
},
{
"listaddressgroupings"
,
&
listaddressgroupings
,
false
,
false
,
true
},
{
"signmessage"
,
&
signmessage
,
false
,
false
,
true
},
{
"verifymessage"
,
&
verifymessage
,
false
,
false
,
false
},
{
"getwork"
,
&
getwork
,
true
,
false
,
true
},
{
"listaccounts"
,
&
listaccounts
,
false
,
false
,
true
},
{
"settxfee"
,
&
settxfee
,
false
,
false
,
true
},
{
"getblocktemplate"
,
&
getblocktemplate
,
true
,
false
,
false
},
{
"submitblock"
,
&
submitblock
,
false
,
false
,
false
},
{
"listsinceblock"
,
&
listsinceblock
,
false
,
false
,
true
},
{
"dumpprivkey"
,
&
dumpprivkey
,
true
,
false
,
true
},
{
"dumpwallet"
,
&
dumpwallet
,
true
,
false
,
true
},
{
"importprivkey"
,
&
importprivkey
,
false
,
false
,
true
},
{
"importwallet"
,
&
importwallet
,
false
,
false
,
true
},
{
"listunspent"
,
&
listunspent
,
false
,
false
,
true
},
{
"getrawtransaction"
,
&
getrawtransaction
,
false
,
false
,
false
},
{
"createrawtransaction"
,
&
createrawtransaction
,
false
,
false
,
false
},
{
"decoderawtransaction"
,
&
decoderawtransaction
,
false
,
false
,
false
},
{
"decodescript"
,
&
decodescript
,
false
,
false
,
false
},
{
"signrawtransaction"
,
&
signrawtransaction
,
false
,
false
,
false
},
{
"sendrawtransaction"
,
&
sendrawtransaction
,
false
,
false
,
false
},
{
"gettxoutsetinfo"
,
&
gettxoutsetinfo
,
true
,
false
,
false
},
{
"gettxout"
,
&
gettxout
,
true
,
false
,
false
},
{
"lockunspent"
,
&
lockunspent
,
false
,
false
,
true
},
{
"listlockunspent"
,
&
listlockunspent
,
false
,
false
,
true
},
{
"verifychain"
,
&
verifychain
,
true
,
false
,
false
},
};
CRPCTable
::
CRPCTable
()
...
...
@@ -1065,6 +1068,8 @@ json_spirit::Value CRPCTable::execute(const std::string &strMethod, const json_s
const
CRPCCommand
*
pcmd
=
tableRPC
[
strMethod
];
if
(
!
pcmd
)
throw
JSONRPCError
(
RPC_METHOD_NOT_FOUND
,
"Method not found"
);
if
(
pcmd
->
reqWallet
&&
!
pwalletMain
)
throw
JSONRPCError
(
RPC_METHOD_NOT_FOUND
,
"Method not found (disabled)"
);
// Observe safe mode
string
strWarning
=
GetWarnings
(
"rpc"
);
...
...
@@ -1079,7 +1084,10 @@ json_spirit::Value CRPCTable::execute(const std::string &strMethod, const json_s
{
if
(
pcmd
->
threadSafe
)
result
=
pcmd
->
actor
(
params
,
false
);
else
{
else
if
(
!
pwalletMain
)
{
LOCK
(
cs_main
);
result
=
pcmd
->
actor
(
params
,
false
);
}
else
{
LOCK2
(
cs_main
,
pwalletMain
->
cs_wallet
);
result
=
pcmd
->
actor
(
params
,
false
);
}
...
...
This diff is collapsed.
Click to expand it.
src/bitcoinrpc.h
View file @
59f0475d
...
...
@@ -104,6 +104,7 @@ public:
rpcfn_type
actor
;
bool
okSafeMode
;
bool
threadSafe
;
bool
reqWallet
;
};
/**
...
...
This diff is collapsed.
Click to expand it.
src/init.cpp
View file @
59f0475d
...
...
@@ -108,7 +108,8 @@ void Shutdown()
nTransactionsUpdated
++
;
StopRPCThreads
();
ShutdownRPCMining
();
bitdb
.
Flush
(
false
);
if
(
pwalletMain
)
bitdb
.
Flush
(
false
);
GenerateBitcoins
(
false
,
NULL
);
StopNode
();
{
...
...
@@ -123,10 +124,12 @@ void Shutdown()
delete
pcoinsdbview
;
pcoinsdbview
=
NULL
;
delete
pblocktree
;
pblocktree
=
NULL
;
}
bitdb
.
Flush
(
true
);
if
(
pwalletMain
)
bitdb
.
Flush
(
true
);
boost
::
filesystem
::
remove
(
GetPidFile
());
UnregisterAllWallets
();
delete
pwalletMain
;
if
(
pwalletMain
)
delete
pwalletMain
;
}
//
...
...
@@ -981,9 +984,9 @@ bool AppInit2(boost::thread_group& threadGroup)
//// debug print
LogPrintf
(
"mapBlockIndex.size() = %"
PRIszu
"
\n
"
,
mapBlockIndex
.
size
());
LogPrintf
(
"nBestHeight = %d
\n
"
,
nBestHeight
);
LogPrintf
(
"setKeyPool.size() = %"
PRIszu
"
\n
"
,
pwalletMain
->
setKeyPool
.
size
());
LogPrintf
(
"mapWallet.size() = %"
PRIszu
"
\n
"
,
pwalletMain
->
mapWallet
.
size
());
LogPrintf
(
"mapAddressBook.size() = %"
PRIszu
"
\n
"
,
pwalletMain
->
mapAddressBook
.
size
());
LogPrintf
(
"setKeyPool.size() = %"
PRIszu
"
\n
"
,
pwalletMain
?
pwalletMain
->
setKeyPool
.
size
()
:
0
);
LogPrintf
(
"mapWallet.size() = %"
PRIszu
"
\n
"
,
pwalletMain
?
pwalletMain
->
mapWallet
.
size
()
:
0
);
LogPrintf
(
"mapAddressBook.size() = %"
PRIszu
"
\n
"
,
pwalletMain
?
pwalletMain
->
mapAddressBook
.
size
()
:
0
);
StartNode
(
threadGroup
);
...
...
@@ -993,17 +996,20 @@ bool AppInit2(boost::thread_group& threadGroup)
StartRPCThreads
();
// Generate coins in the background
GenerateBitcoins
(
GetBoolArg
(
"-gen"
,
false
),
pwalletMain
);
if
(
pwalletMain
)
GenerateBitcoins
(
GetBoolArg
(
"-gen"
,
false
),
pwalletMain
);
// ********************************************************* Step 12: finished
uiInterface
.
InitMessage
(
_
(
"Done loading"
));
// Add wallet transactions that aren't already in a block to mapTransactions
pwalletMain
->
ReacceptWalletTransactions
();
if
(
pwalletMain
)
{
// Add wallet transactions that aren't already in a block to mapTransactions
pwalletMain
->
ReacceptWalletTransactions
();
// Run a thread to flush wallet periodically
threadGroup
.
create_thread
(
boost
::
bind
(
&
ThreadFlushWalletDB
,
boost
::
ref
(
pwalletMain
->
strWalletFile
)));
// Run a thread to flush wallet periodically
threadGroup
.
create_thread
(
boost
::
bind
(
&
ThreadFlushWalletDB
,
boost
::
ref
(
pwalletMain
->
strWalletFile
)));
}
return
!
fRequestShutdown
;
}
This diff is collapsed.
Click to expand it.
src/rpcmining.cpp
View file @
59f0475d
...
...
@@ -18,12 +18,18 @@ static CReserveKey* pMiningKey = NULL;
void
InitRPCMining
()
{
if
(
!
pwalletMain
)
return
;
// getwork/getblocktemplate mining rewards paid here:
pMiningKey
=
new
CReserveKey
(
pwalletMain
);
}
void
ShutdownRPCMining
()
{
if
(
!
pMiningKey
)
return
;
delete
pMiningKey
;
pMiningKey
=
NULL
;
}
...
...
@@ -87,6 +93,9 @@ Value getgenerate(const Array& params, bool fHelp)
"getgenerate
\n
"
"Returns true or false."
);
if
(
!
pMiningKey
)
return
false
;
return
GetBoolArg
(
"-gen"
,
false
);
}
...
...
@@ -112,6 +121,7 @@ Value setgenerate(const Array& params, bool fHelp)
}
mapArgs
[
"-gen"
]
=
(
fGenerate
?
"1"
:
"0"
);
assert
(
pwalletMain
!=
NULL
);
GenerateBitcoins
(
fGenerate
,
pwalletMain
);
return
Value
::
null
;
}
...
...
@@ -143,7 +153,7 @@ Value getmininginfo(const Array& params, bool fHelp)
obj
.
push_back
(
Pair
(
"currentblocktx"
,
(
uint64_t
)
nLastBlockTx
));
obj
.
push_back
(
Pair
(
"difficulty"
,
(
double
)
GetDifficulty
()));
obj
.
push_back
(
Pair
(
"errors"
,
GetWarnings
(
"statusbar"
)));
obj
.
push_back
(
Pair
(
"generate"
,
G
et
BoolArg
(
"-gen"
,
false
)));
obj
.
push_back
(
Pair
(
"generate"
,
g
et
generate
(
params
,
false
)));
obj
.
push_back
(
Pair
(
"genproclimit"
,
(
int
)
GetArg
(
"-genproclimit"
,
-
1
)));
obj
.
push_back
(
Pair
(
"hashespersec"
,
gethashespersec
(
params
,
false
)));
obj
.
push_back
(
Pair
(
"networkhashps"
,
getnetworkhashps
(
params
,
false
)));
...
...
@@ -261,6 +271,7 @@ Value getwork(const Array& params, bool fHelp)
pblock
->
vtx
[
0
].
vin
[
0
].
scriptSig
=
mapNewBlock
[
pdata
->
hashMerkleRoot
].
second
;
pblock
->
hashMerkleRoot
=
pblock
->
BuildMerkleTree
();
assert
(
pwalletMain
!=
NULL
);
return
CheckWork
(
pblock
,
*
pwalletMain
,
*
pMiningKey
);
}
}
...
...
This diff is collapsed.
Click to expand it.
src/rpcrawtransaction.cpp
View file @
59f0475d
...
...
@@ -171,6 +171,7 @@ Value listunspent(const Array& params, bool fHelp)
Array
results
;
vector
<
COutput
>
vecOutputs
;
assert
(
pwalletMain
!=
NULL
);
pwalletMain
->
AvailableCoins
(
vecOutputs
,
false
);
BOOST_FOREACH
(
const
COutput
&
out
,
vecOutputs
)
{
...
...
@@ -458,7 +459,7 @@ Value signrawtransaction(const Array& params, bool fHelp)
}
}
const
CKeyStore
&
keystore
=
(
fGivenKeys
?
tempKeystore
:
*
pwalletMain
);
const
CKeyStore
&
keystore
=
(
(
fGivenKeys
||
!
pwalletMain
)
?
tempKeystore
:
*
pwalletMain
);
int
nHashType
=
SIGHASH_ALL
;
if
(
params
.
size
()
>
3
&&
params
[
3
].
type
()
!=
null_type
)
...
...
This diff is collapsed.
Click to expand it.
src/rpcwallet.cpp
View file @
59f0475d
...
...
@@ -21,7 +21,7 @@ static CCriticalSection cs_nWalletUnlockTime;
std
::
string
HelpRequiringPassphrase
()
{
return
pwalletMain
->
IsCrypted
()
return
pwalletMain
&&
pwalletMain
->
IsCrypted
()
?
"
\n
requires wallet passphrase to be set with walletpassphrase first"
:
""
;
}
...
...
@@ -72,18 +72,22 @@ Value getinfo(const Array& params, bool fHelp)
Object
obj
;
obj
.
push_back
(
Pair
(
"version"
,
(
int
)
CLIENT_VERSION
));
obj
.
push_back
(
Pair
(
"protocolversion"
,(
int
)
PROTOCOL_VERSION
));
obj
.
push_back
(
Pair
(
"walletversion"
,
pwalletMain
->
GetVersion
()));
obj
.
push_back
(
Pair
(
"balance"
,
ValueFromAmount
(
pwalletMain
->
GetBalance
())));
if
(
pwalletMain
)
{
obj
.
push_back
(
Pair
(
"walletversion"
,
pwalletMain
->
GetVersion
()));
obj
.
push_back
(
Pair
(
"balance"
,
ValueFromAmount
(
pwalletMain
->
GetBalance
())));
}
obj
.
push_back
(
Pair
(
"blocks"
,
(
int
)
nBestHeight
));
obj
.
push_back
(
Pair
(
"timeoffset"
,
(
boost
::
int64_t
)
GetTimeOffset
()));
obj
.
push_back
(
Pair
(
"connections"
,
(
int
)
vNodes
.
size
()));
obj
.
push_back
(
Pair
(
"proxy"
,
(
proxy
.
first
.
IsValid
()
?
proxy
.
first
.
ToStringIPPort
()
:
string
())));
obj
.
push_back
(
Pair
(
"difficulty"
,
(
double
)
GetDifficulty
()));
obj
.
push_back
(
Pair
(
"testnet"
,
TestNet
()));
obj
.
push_back
(
Pair
(
"keypoololdest"
,
(
boost
::
int64_t
)
pwalletMain
->
GetOldestKeyPoolTime
()));
obj
.
push_back
(
Pair
(
"keypoolsize"
,
(
int
)
pwalletMain
->
GetKeyPoolSize
()));
if
(
pwalletMain
)
{
obj
.
push_back
(
Pair
(
"keypoololdest"
,
(
boost
::
int64_t
)
pwalletMain
->
GetOldestKeyPoolTime
()));
obj
.
push_back
(
Pair
(
"keypoolsize"
,
(
int
)
pwalletMain
->
GetKeyPoolSize
()));
}
obj
.
push_back
(
Pair
(
"paytxfee"
,
ValueFromAmount
(
nTransactionFee
)));
if
(
pwalletMain
->
IsCrypted
())
if
(
pwalletMain
&&
pwalletMain
->
IsCrypted
())
obj
.
push_back
(
Pair
(
"unlocked_until"
,
(
boost
::
int64_t
)
nWalletUnlockTime
));
obj
.
push_back
(
Pair
(
"errors"
,
GetWarnings
(
"statusbar"
)));
return
obj
;
...
...
@@ -738,7 +742,7 @@ static CScript _createmultisig(const Array& params)
// Case 1: Bitcoin address and we have full public key:
CBitcoinAddress
address
(
ks
);
if
(
address
.
IsValid
())
if
(
pwalletMain
&&
address
.
IsValid
())
{
CKeyID
keyID
;
if
(
!
address
.
GetKeyID
(
keyID
))
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment