aboutsummaryrefslogtreecommitdiff
path: root/src/base58.h
diff options
context:
space:
mode:
authorGavin Andresen <gavinandresen@gmail.com>2011-10-03 13:05:43 -0400
committerGavin Andresen <gavinandresen@gmail.com>2011-12-19 12:40:19 -0500
commite679ec969c8b22c676ebb10bea1038f6c8f13b33 (patch)
treec584f1a152c376ca0df93261d447c5b719449508 /src/base58.h
parentcc40ba2151a627b6da9af4932e0bee58e69aacb5 (diff)
OP_EVAL implementation
OP_EVAL is a new opcode that evaluates an item on the stack as a script. It enables a new type of bitcoin address that needs an arbitrarily complex script to redeem.
Diffstat (limited to 'src/base58.h')
-rw-r--r--src/base58.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/base58.h b/src/base58.h
index 113fa14a5e..8fc546c505 100644
--- a/src/base58.h
+++ b/src/base58.h
@@ -268,6 +268,12 @@ public:
SetHash160(Hash160(vchPubKey));
}
+ bool SetScriptHash160(const uint160& hash160)
+ {
+ SetData(fTestNet ? 112 : 1, &hash160, 20);
+ return true;
+ }
+
bool IsValid() const
{
int nExpectedSize = 20;
@@ -275,9 +281,20 @@ public:
switch(nVersion)
{
case 0:
+ nExpectedSize = 20; // Hash of public key
+ fExpectTestNet = false;
+ break;
+ case 1:
+ nExpectedSize = 20; // OP_EVAL, hash of CScript
+ fExpectTestNet = false;
break;
case 111:
+ nExpectedSize = 20;
+ fExpectTestNet = true;
+ break;
+ case 112:
+ nExpectedSize = 20;
fExpectTestNet = true;
break;
@@ -286,6 +303,14 @@ public:
}
return fExpectTestNet == fTestNet && vchData.size() == nExpectedSize;
}
+ bool IsScript() const
+ {
+ if (!IsValid())
+ return false;
+ if (fTestNet)
+ return nVersion == 112;
+ return nVersion == 1;
+ }
CBitcoinAddress()
{