aboutsummaryrefslogtreecommitdiff
path: root/src/script.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2011-07-27 21:44:55 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2011-07-27 21:44:55 +0200
commitb5b1d1a66b9f418c9fb293cb1cc3eac09a711c4e (patch)
tree0efbb26069cf36cc64775ba0a50c62a7e7f644aa /src/script.cpp
parent7df001be9449bf99e720d6e750d282b77eda5a51 (diff)
parenta139ed74f2a5764afbd678c0e4eb6143455a3a49 (diff)
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Conflicts: src/script.cpp
Diffstat (limited to 'src/script.cpp')
-rw-r--r--src/script.cpp33
1 files changed, 20 insertions, 13 deletions
diff --git a/src/script.cpp b/src/script.cpp
index d1e747251b..f5ca87ced8 100644
--- a/src/script.cpp
+++ b/src/script.cpp
@@ -1122,31 +1122,38 @@ bool IsMine(const CKeyStore &keystore, const CScript& scriptPubKey)
return true;
}
-
-bool ExtractAddress(const CScript& scriptPubKey, const CKeyStore* keystore, CBitcoinAddress& addressRet)
+// requires either keystore==0, or a lock on keystore->cs_KeyStore
+bool static ExtractAddressInner(const CScript& scriptPubKey, const CKeyStore* keystore, CBitcoinAddress& addressRet)
{
vector<pair<opcodetype, valtype> > vSolution;
if (!Solver(scriptPubKey, vSolution))
return false;
- CRITICAL_BLOCK(keystore->cs_KeyStore)
+ BOOST_FOREACH(PAIRTYPE(opcodetype, valtype)& item, vSolution)
{
- BOOST_FOREACH(PAIRTYPE(opcodetype, valtype)& item, vSolution)
- {
- uint160 hash160;
- if (item.first == OP_PUBKEY)
- addressRet.SetPubKey(item.second);
- else if (item.first == OP_PUBKEYHASH)
- addressRet.SetHash160((uint160)item.second);
- //if (keystore == NULL || keystore->HaveKey(addressRet))
- return true;
- }
+ if (item.first == OP_PUBKEY)
+ addressRet.SetPubKey(item.second);
+ else if (item.first == OP_PUBKEYHASH)
+ addressRet.SetHash160((uint160)item.second);
+ if (keystore == NULL || keystore->HaveKey(addressRet))
+ return true;
}
return false;
}
+bool ExtractAddress(const CScript& scriptPubKey, const CKeyStore* keystore, CBitcoinAddress& addressRet)
+{
+ if (keystore)
+ CRITICAL_BLOCK(keystore->cs_KeyStore)
+ return ExtractAddressInner(scriptPubKey, keystore, addressRet);
+ else
+ return ExtractAddressInner(scriptPubKey, NULL, addressRet);
+ return false;
+}
+
+
bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const CTransaction& txTo, unsigned int nIn, int nHashType)
{
vector<vector<unsigned char> > stack;