From c001251966260420609e2b76469da17449049c67 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 14 Mar 2012 11:13:52 -0700 Subject: [PATCH 1/3] Use C++-style casts. --- src/Serializer.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Serializer.cpp b/src/Serializer.cpp index 1abec9cfe..6c083d707 100644 --- a/src/Serializer.cpp +++ b/src/Serializer.cpp @@ -7,32 +7,32 @@ int Serializer::add16(uint16 i) { int ret=mData.size(); - mData.push_back((unsigned char)(i>>8)); - mData.push_back((unsigned char)(i&0xff)); + mData.push_back(static_cast(i>>8)); + mData.push_back(static_cast(i&0xff)); return ret; } int Serializer::add32(uint32 i) { int ret=mData.size(); - mData.push_back((unsigned char)(i>>24)); - mData.push_back((unsigned char)((i>>16)&0xff)); - mData.push_back((unsigned char)((i>>8)&0xff)); - mData.push_back((unsigned char)(i&0xff)); + mData.push_back(static_cast(i>>24)); + mData.push_back(static_cast((i>>16)&0xff)); + mData.push_back(static_cast((i>>8)&0xff)); + mData.push_back(static_cast(i&0xff)); return ret; } int Serializer::add64(uint64 i) { int ret=mData.size(); - mData.push_back((unsigned char)(i>>56)); - mData.push_back((unsigned char)((i>>48)&0xff)); - mData.push_back((unsigned char)((i>>40)&0xff)); - mData.push_back((unsigned char)((i>>32)&0xff)); - mData.push_back((unsigned char)((i>>24)&0xff)); - mData.push_back((unsigned char)((i>>16)&0xff)); - mData.push_back((unsigned char)((i>>8)&0xff)); - mData.push_back((unsigned char)(i&0xff)); + mData.push_back(static_cast(i>>56)); + mData.push_back(static_cast((i>>48)&0xff)); + mData.push_back(static_cast((i>>40)&0xff)); + mData.push_back(static_cast((i>>32)&0xff)); + mData.push_back(static_cast((i>>24)&0xff)); + mData.push_back(static_cast((i>>16)&0xff)); + mData.push_back(static_cast((i>>8)&0xff)); + mData.push_back(static_cast(i&0xff)); return ret; } From 578ca1c748942d18cd731647ede853556881a195 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 14 Mar 2012 11:20:22 -0700 Subject: [PATCH 2/3] Updates to this code. --- src/SerializedObject.h | 8 +++++--- src/SerializedTypes.h | 37 ++++++++++++++++++++----------------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/SerializedObject.h b/src/SerializedObject.h index 4c67ece7e..abc42c42c 100644 --- a/src/SerializedObject.h +++ b/src/SerializedObject.h @@ -1,6 +1,8 @@ #ifndef __SERIALIZEDOBJECT__ #define __SERIALIZEDOBJECT__ +#include + #include "SerializedTypes.h" struct SOElement @@ -22,7 +24,7 @@ class STUObject : public SerializedType { protected: SOType *type; - std::list data; + boost::ptr_vector data; public: STUObject() { ; } @@ -41,8 +43,8 @@ public: void addObject(const SerializedType& t) { data.push_back(t.duplicate()); } void giveObject(SerializedType* t) { data.push_back(t); } - const std::list& peekData() const { return data; } - std::list& peekData() { return data; } + const boost::ptr_vector& peekData() const { return data; } + boost::ptr_vector& peekData() { return data; } }; diff --git a/src/SerializedTypes.h b/src/SerializedTypes.h index 626513fb7..1a454072f 100644 --- a/src/SerializedTypes.h +++ b/src/SerializedTypes.h @@ -9,8 +9,8 @@ enum SerializedTypeID { - STI_OBJECT=0, - STI_UINT8=1, STI_UINT16=2, STI_UINT32=4, STI_UINT64=5, + STI_NOTPRESENT=0, STI_OBJECT=1, + STI_UINT8=2, STI_UINT16=3, STI_UINT32=4, STI_UINT64=5, STI_HASH160=6, STI_HASH256=7, STI_VL=8, STI_TL=8 }; @@ -21,15 +21,18 @@ public: SerializedType() { ; } virtual ~SerializedType() { ; } - virtual int getLength() const=0; - virtual SerializedTypeID getType() const=0; - virtual SerializedType* duplicate() const=0; + virtual int getLength() const { return 0; } + virtual SerializedTypeID getType() const { return STI_NOTPRESENT; } + virtual SerializedType* duplicate() const { return new SerializedType(); } - virtual std::string getText() const=0; - virtual std::string getSQL() const=0; + virtual std::string getText() const { return std::string(); } + virtual std::string getSQL() const { return std::string(); } - virtual std::vector serialize() const=0; - virtual int add(std::vector& j) const; + virtual std::vector serialize() const; + virtual int add(std::vector&) const { return 0; } + + SerializedType* new_clone(const SerializedType& s) { return s.duplicate(); } + void delete_clone(const SerializedType* s) { boost::checked_delete(s); } }; class STUInt8 : public SerializedType @@ -47,7 +50,7 @@ public: STUInt8 *duplicate() const { return new STUInt8(value); } std::string getText() const; std::string getSQL() const; - std::vector serialize() const; + virtual int add(std::vector&) const; unsigned char getValue() const { return value; } void setValue(unsigned char v) { value=v; } @@ -71,7 +74,7 @@ public: STUInt16 *duplicate() const { return new STUInt16(value); } std::string getText() const; std::string getSQL() const; - std::vector serialize() const; + virtual int add(std::vector&) const; uint16 getValue() const { return value; } void setValue(uint16 v) { value=v; } @@ -95,7 +98,7 @@ public: STUInt32 *duplicate() const { return new STUInt32(value); } std::string getText() const; std::string getSQL() const; - std::vector serialize() const; + virtual int add(std::vector&) const; uint32 getValue() const { return value; } void setValue(uint32 v) { value=v; } @@ -119,7 +122,7 @@ public: STUInt64 *duplicate() const { return new STUInt64(value); } std::string getText() const; std::string getSQL() const; - std::vector serialize() const; + virtual int add(std::vector&) const; uint64 getValue() const { return value; } void setValue(uint64 v) { value=v; } @@ -144,7 +147,7 @@ public: STUHash160 *duplicate() const { return new STUHash160(value); } std::string getText() const; std::string getSQL() const; - std::vector serialize() const; + virtual int add(std::vector&) const; const uint160& getValue() const { return value; } void setValue(const uint160& v) { value=v; } @@ -169,7 +172,7 @@ public: STUHash256 *duplicate() const { return new STUHash256(value); } std::string getText() const; std::string getSQL() const; - std::vector serialize() const; + virtual int add(std::vector&) const; const uint256& getValue() const { return value; } void setValue(const uint256& v) { value=v; } @@ -194,7 +197,7 @@ public: STUVariableLength *duplicate() const { return new STUVariableLength(value); } std::string getText() const; std::string getSQL() const; - std::vector serialize() const; + virtual int add(std::vector&) const; const std::vector& peekValue() const { return value; } std::vector& peekValue() { return value; } @@ -221,7 +224,7 @@ public: STUTaggedList *duplicate() const { return new STUTaggedList(value); } std::string getText() const; std::string getSQL() const; - std::vector serialize() const; + virtual int add(std::vector&) const; const std::list& peekValue() const { return value; } std::list& peekValue() { return value; } From e7c350ffec8bf121aa3cd4466bf5a75dcb49cd3b Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 14 Mar 2012 15:07:25 -0700 Subject: [PATCH 3/3] Remove: script.h, keystore.h, and keystore.cpp --- src/keystore.cpp | 36 ----- src/keystore.h | 58 ------- src/script.h | 403 ----------------------------------------------- 3 files changed, 497 deletions(-) delete mode 100644 src/keystore.cpp delete mode 100644 src/keystore.h delete mode 100644 src/script.h diff --git a/src/keystore.cpp b/src/keystore.cpp deleted file mode 100644 index 7f6ef6e97..000000000 --- a/src/keystore.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. - -#include "keystore.h" -#include "BitcoinUtil.h" -#include - - -//#include "crypter.h" - -std::vector CKeyStore::GenerateNewKey() -{ - RandAddSeedPerfmon(); - CKey key; - key.MakeNewKey(); - if (!AddKey(key)) - throw std::runtime_error("CKeyStore::GenerateNewKey() : AddKey failed"); - return key.GetPubKey(); -} - -bool CKeyStore::GetPubKey(const NewcoinAddress& address, std::vector& vchPubKeyOut) const -{ - CKey key; - if (!GetKey(address, key)) - return false; - vchPubKeyOut = key.GetPubKey(); - return true; -} - -bool CBasicKeyStore::AddKey(const CKey& key) -{ - mapKeys[key.GetAddress()] = key.GetSecret(); - return true; -} diff --git a/src/keystore.h b/src/keystore.h deleted file mode 100644 index 1f0745ead..000000000 --- a/src/keystore.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. -#ifndef BITCOIN_KEYSTORE_H -#define BITCOIN_KEYSTORE_H - -#include "key.h" -//#include "crypter.h" -#include - -class CKeyStore -{ -protected: - - -public: - virtual bool AddKey(const CKey& key) =0; - virtual bool HaveKey(const NewcoinAddress &address) const =0; - virtual bool GetKey(const NewcoinAddress &address, CKey& keyOut) const =0; - virtual bool GetPubKey(const NewcoinAddress &address, std::vector& vchPubKeyOut) const; - virtual std::vector GenerateNewKey(); -}; - -typedef std::map KeyMap; - -class CBasicKeyStore : public CKeyStore -{ -protected: - KeyMap mapKeys; - -public: - bool AddKey(const CKey& key); - bool HaveKey(const NewcoinAddress &address) const - { - bool result; - - result = (mapKeys.count(address) > 0); - return result; - } - bool GetKey(const NewcoinAddress &address, CKey& keyOut) const - { - - { - KeyMap::const_iterator mi = mapKeys.find(address); - if (mi != mapKeys.end()) - { - keyOut.SetSecret((*mi).second); - return true; - } - } - return false; - } -}; - - - -#endif diff --git a/src/script.h b/src/script.h deleted file mode 100644 index 52a1cb37e..000000000 --- a/src/script.h +++ /dev/null @@ -1,403 +0,0 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. -#ifndef H_BITCOIN_SCRIPT -#define H_BITCOIN_SCRIPT - -#include "base58.h" -#include "keystore.h" - -#include -#include - -#include - -class CTransaction; - - - - - - - -inline std::string ValueString(const std::vector& vch) -{ - if (vch.size() <= 4) - return strprintf("%d", CBigNum(vch).getint()); - else - return HexStr(vch); -} - -inline std::string StackString(const std::vector >& vStack) -{ - std::string str; - BOOST_FOREACH(const std::vector& vch, vStack) - { - if (!str.empty()) - str += " "; - str += ValueString(vch); - } - return str; -} - - - - - - - - - -class CScript : public std::vector -{ -protected: - CScript& push_int64(int64 n) - { - if (n == -1 || (n >= 1 && n <= 16)) - { - push_back(n + (OP_1 - 1)); - } - else - { - CBigNum bn(n); - *this << bn.getvch(); - } - return *this; - } - - CScript& push_uint64(uint64 n) - { - if (n >= 1 && n <= 16) - { - push_back(n + (OP_1 - 1)); - } - else - { - CBigNum bn(n); - *this << bn.getvch(); - } - return *this; - } - -public: - CScript() { } - CScript(const CScript& b) : std::vector(b.begin(), b.end()) { } - CScript(const_iterator pbegin, const_iterator pend) : std::vector(pbegin, pend) { } -#ifndef _MSC_VER - CScript(const unsigned char* pbegin, const unsigned char* pend) : std::vector(pbegin, pend) { } -#endif - - CScript& operator+=(const CScript& b) - { - insert(end(), b.begin(), b.end()); - return *this; - } - - friend CScript operator+(const CScript& a, const CScript& b) - { - CScript ret = a; - ret += b; - return ret; - } - - - explicit CScript(char b) { operator<<(b); } - explicit CScript(short b) { operator<<(b); } - explicit CScript(int b) { operator<<(b); } - explicit CScript(long b) { operator<<(b); } - explicit CScript(int64 b) { operator<<(b); } - explicit CScript(unsigned char b) { operator<<(b); } - explicit CScript(unsigned int b) { operator<<(b); } - explicit CScript(unsigned short b) { operator<<(b); } - explicit CScript(unsigned long b) { operator<<(b); } - explicit CScript(uint64 b) { operator<<(b); } - - explicit CScript(opcodetype b) { operator<<(b); } - explicit CScript(const uint256& b) { operator<<(b); } - explicit CScript(const CBigNum& b) { operator<<(b); } - explicit CScript(const std::vector& b) { operator<<(b); } - - - CScript& operator<<(char b) { return push_int64(b); } - CScript& operator<<(short b) { return push_int64(b); } - CScript& operator<<(int b) { return push_int64(b); } - CScript& operator<<(long b) { return push_int64(b); } - CScript& operator<<(int64 b) { return push_int64(b); } - CScript& operator<<(unsigned char b) { return push_uint64(b); } - CScript& operator<<(unsigned int b) { return push_uint64(b); } - CScript& operator<<(unsigned short b) { return push_uint64(b); } - CScript& operator<<(unsigned long b) { return push_uint64(b); } - CScript& operator<<(uint64 b) { return push_uint64(b); } - - CScript& operator<<(opcodetype opcode) - { - if (opcode < 0 || opcode > 0xff) - throw std::runtime_error("CScript::operator<<() : invalid opcode"); - insert(end(), (unsigned char)opcode); - return *this; - } - - CScript& operator<<(const uint160& b) - { - insert(end(), sizeof(b)); - insert(end(), (unsigned char*)&b, (unsigned char*)&b + sizeof(b)); - return *this; - } - - CScript& operator<<(const uint256& b) - { - insert(end(), sizeof(b)); - insert(end(), (unsigned char*)&b, (unsigned char*)&b + sizeof(b)); - return *this; - } - - CScript& operator<<(const CBigNum& b) - { - *this << b.getvch(); - return *this; - } - - CScript& operator<<(const std::vector& b) - { - if (b.size() < OP_PUSHDATA1) - { - insert(end(), (unsigned char)b.size()); - } - else if (b.size() <= 0xff) - { - insert(end(), OP_PUSHDATA1); - insert(end(), (unsigned char)b.size()); - } - else if (b.size() <= 0xffff) - { - insert(end(), OP_PUSHDATA2); - unsigned short nSize = b.size(); - insert(end(), (unsigned char*)&nSize, (unsigned char*)&nSize + sizeof(nSize)); - } - else - { - insert(end(), OP_PUSHDATA4); - unsigned int nSize = b.size(); - insert(end(), (unsigned char*)&nSize, (unsigned char*)&nSize + sizeof(nSize)); - } - insert(end(), b.begin(), b.end()); - return *this; - } - - CScript& operator<<(const CScript& b) - { - // I'm not sure if this should push the script or concatenate scripts. - // If there's ever a use for pushing a script onto a script, delete this member fn - assert(!"warning: pushing a CScript onto a CScript with << is probably not intended, use + to concatenate"); - return *this; - } - - - bool GetOp(iterator& pc, opcodetype& opcodeRet, std::vector& vchRet) - { - // Wrapper so it can be called with either iterator or const_iterator - const_iterator pc2 = pc; - bool fRet = GetOp2(pc2, opcodeRet, &vchRet); - pc = begin() + (pc2 - begin()); - return fRet; - } - - bool GetOp(iterator& pc, opcodetype& opcodeRet) - { - const_iterator pc2 = pc; - bool fRet = GetOp2(pc2, opcodeRet, NULL); - pc = begin() + (pc2 - begin()); - return fRet; - } - - bool GetOp(const_iterator& pc, opcodetype& opcodeRet, std::vector& vchRet) const - { - return GetOp2(pc, opcodeRet, &vchRet); - } - - bool GetOp(const_iterator& pc, opcodetype& opcodeRet) const - { - return GetOp2(pc, opcodeRet, NULL); - } - - bool GetOp2(const_iterator& pc, opcodetype& opcodeRet, std::vector* pvchRet) const - { - opcodeRet = OP_INVALIDOPCODE; - if (pvchRet) - pvchRet->clear(); - if (pc >= end()) - return false; - - // Read instruction - if (end() - pc < 1) - return false; - unsigned int opcode = *pc++; - - // Immediate operand - if (opcode <= OP_PUSHDATA4) - { - unsigned int nSize; - if (opcode < OP_PUSHDATA1) - { - nSize = opcode; - } - else if (opcode == OP_PUSHDATA1) - { - if (end() - pc < 1) - return false; - nSize = *pc++; - } - else if (opcode == OP_PUSHDATA2) - { - if (end() - pc < 2) - return false; - nSize = 0; - memcpy(&nSize, &pc[0], 2); - pc += 2; - } - else if (opcode == OP_PUSHDATA4) - { - if (end() - pc < 4) - return false; - memcpy(&nSize, &pc[0], 4); - pc += 4; - } - if (end() - pc < nSize) - return false; - if (pvchRet) - pvchRet->assign(pc, pc + nSize); - pc += nSize; - } - - opcodeRet = (opcodetype)opcode; - return true; - } - - - void FindAndDelete(const CScript& b) - { - if (b.empty()) - return; - iterator pc = begin(); - opcodetype opcode; - do - { - while (end() - pc >= b.size() && memcmp(&pc[0], &b[0], b.size()) == 0) - erase(pc, pc + b.size()); - } - while (GetOp(pc, opcode)); - } - - - int GetSigOpCount() const - { - int n = 0; - const_iterator pc = begin(); - while (pc < end()) - { - opcodetype opcode; - if (!GetOp(pc, opcode)) - break; - if (opcode == OP_CHECKSIG || opcode == OP_CHECKSIGVERIFY) - n++; - else if (opcode == OP_CHECKMULTISIG || opcode == OP_CHECKMULTISIGVERIFY) - n += 20; - } - return n; - } - - - bool IsPushOnly() const - { - if (size() > 200) - return false; - const_iterator pc = begin(); - while (pc < end()) - { - opcodetype opcode; - if (!GetOp(pc, opcode)) - return false; - if (opcode > OP_16) - return false; - } - return true; - } - - - NewcoinAddress GetBitcoinAddress() const - { - opcodetype opcode; - std::vector vch; - CScript::const_iterator pc = begin(); - if (!GetOp(pc, opcode, vch) || opcode != OP_DUP) return 0; - if (!GetOp(pc, opcode, vch) || opcode != OP_HASH160) return 0; - if (!GetOp(pc, opcode, vch) || vch.size() != sizeof(uint160)) return 0; - uint160 hash160 = uint160(vch); - if (!GetOp(pc, opcode, vch) || opcode != OP_EQUALVERIFY) return 0; - if (!GetOp(pc, opcode, vch) || opcode != OP_CHECKSIG) return 0; - if (pc != end()) return 0; - return NewcoinAddress(hash160); - } - - void SetBitcoinAddress(const NewcoinAddress& address) - { - this->clear(); - *this << OP_DUP << OP_HASH160 << address.GetHash160()) << OP_EQUALVERIFY << OP_CHECKSIG; - } - - void SetBitcoinAddress(const std::vector& vchPubKey) - { - SetBitcoinAddress(NewcoinAddress(vchPubKey)); - } - - - void PrintHex() const - { - printf("CScript(%s)\n", HexStr(begin(), end(), true).c_str()); - } - - std::string ToString() const - { - std::string str; - opcodetype opcode; - std::vector vch; - const_iterator pc = begin(); - while (pc < end()) - { - if (!str.empty()) - str += " "; - if (!GetOp(pc, opcode, vch)) - { - str += "[error]"; - return str; - } - if (0 <= opcode && opcode <= OP_PUSHDATA4) - str += ValueString(vch); - else - str += GetOpName(opcode); - } - return str; - } - - void print() const - { - printf("%s\n", ToString().c_str()); - } -}; - - - - - - - -bool EvalScript(std::vector >& stack, const CScript& script, const CTransaction& txTo, unsigned int nIn, int nHashType); - -bool IsStandard(const CScript& scriptPubKey); -bool IsMine(const CKeyStore& keystore, const CScript& scriptPubKey); -bool ExtractAddress(const CScript& scriptPubKey, const CKeyStore* pkeystore, NewcoinAddress& addressRet); -bool SignSignature(const CKeyStore& keystore, const CTransaction& txFrom, CTransaction& txTo, unsigned int nIn, int nHashType=SIGHASH_ALL, CScript scriptPrereq=CScript()); -bool VerifySignature(const CTransaction& txFrom, const CTransaction& txTo, unsigned int nIn, int nHashType=0); - -#endif