mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-25 09:34:19 +01:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
73aa262647 | ||
|
|
e1cb7ce017 |
18
bignum.h
18
bignum.h
@@ -401,8 +401,16 @@ public:
|
||||
|
||||
CBigNum& operator>>=(unsigned int shift)
|
||||
{
|
||||
// Note: BN_rshift segfaults on 64-bit ubuntu 9.10 if 2^shift is greater than the number,
|
||||
// tested OK on 64-bit ubuntu 10.4
|
||||
// Note: BN_rshift segfaults on 64-bit if 2^shift is greater than the number
|
||||
// if built on ubuntu 9.04 or 9.10, probably depends on version of openssl
|
||||
CBigNum a = 1;
|
||||
a <<= shift;
|
||||
if (BN_cmp(&a, this) > 0)
|
||||
{
|
||||
*this = 0;
|
||||
return *this;
|
||||
}
|
||||
|
||||
if (!BN_rshift(this, this, shift))
|
||||
throw bignum_error("CBigNum:operator>>= : BN_rshift failed");
|
||||
return *this;
|
||||
@@ -511,10 +519,8 @@ inline const CBigNum operator<<(const CBigNum& a, unsigned int shift)
|
||||
|
||||
inline const CBigNum operator>>(const CBigNum& a, unsigned int shift)
|
||||
{
|
||||
CBigNum r;
|
||||
// Note: BN_rshift segfaults on 64-bit ubuntu 9.10 if 2^shift is greater than the number
|
||||
if (!BN_rshift(&r, &a, shift))
|
||||
throw bignum_error("CBigNum:operator>> : BN_rshift failed");
|
||||
CBigNum r = a;
|
||||
r >>= shift;
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,13 +16,12 @@ sudo apt-get install libgtk2.0-dev
|
||||
sudo apt-get install libssl-dev
|
||||
sudo apt-get install libdb4.7-dev
|
||||
sudo apt-get install libdb4.7++-dev
|
||||
sudo apt-get install libboost-all-dev
|
||||
Boost 1.40+: sudo apt-get install libboost-all-dev
|
||||
or Boost 1.37: sudo apt-get install libboost1.37-dev
|
||||
|
||||
We're now using wxWidgets 2.9, which uses UTF-8.
|
||||
If using Boost 1.37, append -mt to the boost libraries in the makefile.
|
||||
|
||||
There isn't currently a debian package of wxWidgets we can use. The 2.8
|
||||
packages for Karmic are UTF-16 unicode and won't work for us, and we've had
|
||||
trouble building 2.8 on 64-bit.
|
||||
We're now using wxWidgets 2.9, which uses UTF-8. Don't try 2.8, it won't work.
|
||||
|
||||
You need to download wxWidgets from http://www.wxwidgets.org/downloads/
|
||||
and build it yourself. See the build instructions and configure parameters
|
||||
@@ -34,11 +33,11 @@ Berkeley DB New BSD license with additional requirement that linked software
|
||||
Boost MIT-like license
|
||||
|
||||
Versions used in this release:
|
||||
GCC 4.4.3
|
||||
OpenSSL 0.9.8k
|
||||
GCC 4.3.3
|
||||
OpenSSL 0.9.8g
|
||||
wxWidgets 2.9.0
|
||||
Berkeley DB 4.7.25.NC
|
||||
Boost 1.40.0
|
||||
Boost 1.37
|
||||
|
||||
|
||||
Notes
|
||||
@@ -55,7 +54,7 @@ wxWidgets
|
||||
---------
|
||||
cd /usr/local
|
||||
tar -xzvf wxWidgets-2.9.0.tar.gz
|
||||
cd /usr/local/wxWidgets-2.9.0
|
||||
cd wxWidgets-2.9.0
|
||||
mkdir buildgtk
|
||||
cd buildgtk
|
||||
../configure --with-gtk --enable-debug --disable-shared --enable-monolithic
|
||||
@@ -63,15 +62,6 @@ make
|
||||
sudo su
|
||||
make install
|
||||
ldconfig
|
||||
su <username>
|
||||
cd ..
|
||||
mkdir buildbase
|
||||
cd buildbase
|
||||
../configure --disable-gui --enable-debug --disable-shared --enable-monolithic
|
||||
make
|
||||
sudo su
|
||||
make install
|
||||
ldconfig
|
||||
|
||||
|
||||
Boost
|
||||
|
||||
3
main.cpp
3
main.cpp
@@ -3036,7 +3036,8 @@ bool CreateTransaction(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, CK
|
||||
foreach(CWalletTx* pcoin, setCoins)
|
||||
for (int nOut = 0; nOut < pcoin->vout.size(); nOut++)
|
||||
if (pcoin->vout[nOut].IsMine())
|
||||
SignSignature(*pcoin, wtxNew, nIn++);
|
||||
if (!SignSignature(*pcoin, wtxNew, nIn++))
|
||||
return false;
|
||||
|
||||
// Check that enough fee is included
|
||||
if (nFee < wtxNew.GetMinFee())
|
||||
|
||||
@@ -4,20 +4,16 @@
|
||||
|
||||
|
||||
INCLUDEPATHS= \
|
||||
-I"/usr/include" \
|
||||
-I"/usr/local/include/wx-2.9" \
|
||||
-I"/usr/local/lib/wx/include/gtk2-unicode-debug-static-2.9"
|
||||
|
||||
LIBPATHS= \
|
||||
-L"/usr/lib" \
|
||||
-L"/usr/local/lib"
|
||||
|
||||
WXLIBS= \
|
||||
-Wl,-Bstatic \
|
||||
-l wx_gtk2ud-2.9 \
|
||||
-Wl,-Bdynamic \
|
||||
-l gtk-x11-2.0 -l SM
|
||||
|
||||
# for boost 1.37, add -mt to the boost libraries
|
||||
LIBS= \
|
||||
-Wl,-Bstatic \
|
||||
-l boost_system \
|
||||
@@ -51,24 +47,21 @@ OBJS= \
|
||||
all: bitcoin
|
||||
|
||||
|
||||
headers.h.gch: headers.h $(HEADERS)
|
||||
g++ -c $(CFLAGS) -DGUI -o $@ $<
|
||||
|
||||
obj/%.o: %.cpp $(HEADERS) headers.h.gch
|
||||
obj/%.o: %.cpp $(HEADERS)
|
||||
g++ -c $(CFLAGS) -DGUI -o $@ $<
|
||||
|
||||
cryptopp/obj/%.o: cryptopp/%.cpp
|
||||
g++ -c $(CFLAGS) -O3 -DCRYPTOPP_DISABLE_SSE2 -o $@ $<
|
||||
|
||||
bitcoin: $(OBJS) obj/ui.o obj/uibase.o
|
||||
g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(WXLIBS) $(LIBS)
|
||||
g++ $(CFLAGS) -o $@ $^ $(WXLIBS) $(LIBS)
|
||||
|
||||
|
||||
obj/nogui/%.o: %.cpp $(HEADERS)
|
||||
g++ -c $(CFLAGS) -o $@ $<
|
||||
|
||||
bitcoind: $(OBJS:obj/%=obj/nogui/%)
|
||||
g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
|
||||
g++ $(CFLAGS) -o $@ $^ $(LIBS)
|
||||
|
||||
|
||||
clean:
|
||||
|
||||
32
script.cpp
32
script.cpp
@@ -42,20 +42,17 @@ void MakeSameSize(valtype& vch1, valtype& vch2)
|
||||
#define stacktop(i) (stack.at(stack.size()+(i)))
|
||||
#define altstacktop(i) (altstack.at(altstack.size()+(i)))
|
||||
|
||||
bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nIn, int nHashType,
|
||||
vector<vector<unsigned char> >* pvStackRet)
|
||||
bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, const CTransaction& txTo, unsigned int nIn, int nHashType)
|
||||
{
|
||||
CAutoBN_CTX pctx;
|
||||
CScript::const_iterator pc = script.begin();
|
||||
CScript::const_iterator pend = script.end();
|
||||
CScript::const_iterator pbegincodehash = script.begin();
|
||||
vector<bool> vfExec;
|
||||
vector<valtype> stack;
|
||||
vector<valtype> altstack;
|
||||
if (pvStackRet)
|
||||
pvStackRet->clear();
|
||||
if (script.size() > 20000)
|
||||
if (script.size() > 10000)
|
||||
return false;
|
||||
int nOpCount = 0;
|
||||
|
||||
|
||||
try
|
||||
@@ -73,6 +70,8 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
|
||||
return false;
|
||||
if (vchPushValue.size() > 5000)
|
||||
return false;
|
||||
if (opcode > OP_16 && nOpCount++ > 200)
|
||||
return false;
|
||||
|
||||
if (fExec && opcode <= OP_PUSHDATA4)
|
||||
stack.push_back(vchPushValue);
|
||||
@@ -828,9 +827,7 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
|
||||
if (!vfExec.empty())
|
||||
return false;
|
||||
|
||||
if (pvStackRet)
|
||||
*pvStackRet = stack;
|
||||
return (stack.empty() ? false : CastToBool(stack.back()));
|
||||
return true;
|
||||
}
|
||||
|
||||
#undef top
|
||||
@@ -1114,6 +1111,19 @@ bool ExtractHash160(const CScript& scriptPubKey, uint160& hash160Ret)
|
||||
}
|
||||
|
||||
|
||||
bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const CTransaction& txTo, unsigned int nIn, int nHashType)
|
||||
{
|
||||
vector<vector<unsigned char> > stack;
|
||||
if (!EvalScript(stack, scriptSig, txTo, nIn, nHashType))
|
||||
return false;
|
||||
if (!EvalScript(stack, scriptPubKey, txTo, nIn, nHashType))
|
||||
return false;
|
||||
if (stack.empty())
|
||||
return false;
|
||||
return CastToBool(stack.back());
|
||||
}
|
||||
|
||||
|
||||
bool SignSignature(const CTransaction& txFrom, CTransaction& txTo, unsigned int nIn, int nHashType, CScript scriptPrereq)
|
||||
{
|
||||
assert(nIn < txTo.vin.size());
|
||||
@@ -1132,7 +1142,7 @@ bool SignSignature(const CTransaction& txFrom, CTransaction& txTo, unsigned int
|
||||
|
||||
// Test solution
|
||||
if (scriptPrereq.empty())
|
||||
if (!EvalScript(txin.scriptSig + CScript(OP_CODESEPARATOR) + txout.scriptPubKey, txTo, nIn))
|
||||
if (!VerifyScript(txin.scriptSig, txout.scriptPubKey, txTo, nIn, 0))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@@ -1150,7 +1160,7 @@ bool VerifySignature(const CTransaction& txFrom, const CTransaction& txTo, unsig
|
||||
if (txin.prevout.hash != txFrom.GetHash())
|
||||
return false;
|
||||
|
||||
if (!EvalScript(txin.scriptSig + CScript(OP_CODESEPARATOR) + txout.scriptPubKey, txTo, nIn, nHashType))
|
||||
if (!VerifyScript(txin.scriptSig, txout.scriptPubKey, txTo, nIn, nHashType))
|
||||
return false;
|
||||
|
||||
// Anytime a signature is successfully verified, it's proof the outpoint is spent,
|
||||
|
||||
2
script.h
2
script.h
@@ -657,8 +657,6 @@ public:
|
||||
|
||||
|
||||
|
||||
bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nIn, int nHashType=0,
|
||||
vector<vector<unsigned char> >* pvStackRet=NULL);
|
||||
uint256 SignatureHash(CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType);
|
||||
bool IsMine(const CScript& scriptPubKey);
|
||||
bool ExtractPubKey(const CScript& scriptPubKey, bool fMineOnly, vector<unsigned char>& vchPubKeyRet);
|
||||
|
||||
@@ -19,7 +19,7 @@ class CScript;
|
||||
class CDataStream;
|
||||
class CAutoFile;
|
||||
|
||||
static const int VERSION = 306;
|
||||
static const int VERSION = 307;
|
||||
static const char* pszSubVer = "";
|
||||
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ RequestExecutionLevel highest
|
||||
|
||||
# General Symbol Definitions
|
||||
!define REGKEY "SOFTWARE\$(^Name)"
|
||||
!define VERSION 0.3.6
|
||||
!define VERSION 0.3.7
|
||||
!define COMPANY "Bitcoin project"
|
||||
!define URL http://www.bitcoin.org/
|
||||
|
||||
@@ -42,12 +42,12 @@ Var StartMenuGroup
|
||||
!insertmacro MUI_LANGUAGE English
|
||||
|
||||
# Installer attributes
|
||||
OutFile bitcoin-0.3.6-win32-setup.exe
|
||||
OutFile bitcoin-0.3.7-win32-setup.exe
|
||||
InstallDir $PROGRAMFILES\Bitcoin
|
||||
CRCCheck on
|
||||
XPStyle on
|
||||
ShowInstDetails show
|
||||
VIProductVersion 0.3.6.0
|
||||
VIProductVersion 0.3.7.0
|
||||
VIAddVersionKey ProductName Bitcoin
|
||||
VIAddVersionKey ProductVersion "${VERSION}"
|
||||
VIAddVersionKey CompanyName "${COMPANY}"
|
||||
|
||||
Reference in New Issue
Block a user