Version 1.1.0.0 update

This commit is contained in:
transcoder
2014-02-12 04:09:36 -07:00
parent 58decdbca7
commit f03acc635f
481 changed files with 156398 additions and 57772 deletions

140
.cproject Normal file
View File

@@ -0,0 +1,140 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?>
<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.debug.172842326">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.debug.172842326" moduleId="org.eclipse.cdt.core.settings" name="Debug">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.debug.172842326" name="Debug" parent="cdt.managedbuild.config.gnu.cross.exe.debug">
<folderInfo id="cdt.managedbuild.config.gnu.cross.exe.debug.172842326." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.debug.1259948566" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.debug">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.1539370003" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/>
<builder buildPath="${workspace_loc:/casinocoin}/Debug" id="cdt.managedbuild.builder.gnu.cross.1807486951" managedBuildOn="true" name="Gnu Make Builder.Debug" superClass="cdt.managedbuild.builder.gnu.cross"/>
<tool id="cdt.managedbuild.tool.gnu.cross.c.compiler.1107909872" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler">
<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.2125193379" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
<option id="gnu.c.compiler.option.debugging.level.537205567" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.28410970" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.480548153" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler">
<option id="gnu.cpp.compiler.option.optimization.level.876235436" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
<option id="gnu.cpp.compiler.option.debugging.level.1195198404" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1619301070" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cross.c.linker.1888896082" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/>
<tool id="cdt.managedbuild.tool.gnu.cross.cpp.linker.474265676" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker">
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1056446951" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cross.archiver.294324117" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/>
<tool id="cdt.managedbuild.tool.gnu.cross.assembler.214220336" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler">
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.670125084" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.148332217">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.148332217" moduleId="org.eclipse.cdt.core.settings" name="Release">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.148332217" name="Release" parent="cdt.managedbuild.config.gnu.cross.exe.release">
<folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.148332217." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.1472045181" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.1533442375" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/>
<builder buildPath="${workspace_loc:/casinocoin}/Release" id="cdt.managedbuild.builder.gnu.cross.1467589981" managedBuildOn="true" name="Gnu Make Builder.Release" superClass="cdt.managedbuild.builder.gnu.cross"/>
<tool id="cdt.managedbuild.tool.gnu.cross.c.compiler.805125232" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler">
<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1233127282" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
<option id="gnu.c.compiler.option.debugging.level.2130930995" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1519045347" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1271002374" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler">
<option id="gnu.cpp.compiler.option.optimization.level.956716050" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
<option id="gnu.cpp.compiler.option.debugging.level.1177950679" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1462654649" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cross.c.linker.1300972913" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/>
<tool id="cdt.managedbuild.tool.gnu.cross.cpp.linker.369534960" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker">
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.437722938" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cross.archiver.967657786" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/>
<tool id="cdt.managedbuild.tool.gnu.cross.assembler.1360556378" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler">
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1759599147" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="casinocoin.cdt.managedbuild.target.gnu.cross.exe.635480249" name="Executable" projectType="cdt.managedbuild.target.gnu.cross.exe"/>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.cross.exe.debug.172842326;cdt.managedbuild.config.gnu.cross.exe.debug.172842326.;cdt.managedbuild.tool.gnu.cross.c.compiler.1107909872;cdt.managedbuild.tool.gnu.c.compiler.input.28410970">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.1471743357;cdt.managedbuild.config.gnu.mingw.exe.release.1471743357.;cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.release.375634714;cdt.managedbuild.tool.gnu.cpp.compiler.input.1144699877">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.1435310155;cdt.managedbuild.config.gnu.mingw.exe.debug.1435310155.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.1854403951;cdt.managedbuild.tool.gnu.c.compiler.input.1471551438">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.cross.exe.release.148332217;cdt.managedbuild.config.gnu.cross.exe.release.148332217.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1271002374;cdt.managedbuild.tool.gnu.cpp.compiler.input.1462654649">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.1471743357;cdt.managedbuild.config.gnu.mingw.exe.release.1471743357.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.1297945128;cdt.managedbuild.tool.gnu.c.compiler.input.210756021">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.cross.exe.release.148332217;cdt.managedbuild.config.gnu.cross.exe.release.148332217.;cdt.managedbuild.tool.gnu.cross.c.compiler.805125232;cdt.managedbuild.tool.gnu.c.compiler.input.1519045347">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.cross.exe.debug.172842326;cdt.managedbuild.config.gnu.cross.exe.debug.172842326.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.480548153;cdt.managedbuild.tool.gnu.cpp.compiler.input.1619301070">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.1122881577;cdt.managedbuild.config.gnu.mingw.exe.release.1122881577.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.312010361;cdt.managedbuild.tool.gnu.c.compiler.input.210460344">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.1122881577;cdt.managedbuild.config.gnu.mingw.exe.release.1122881577.;cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.release.1553334727;cdt.managedbuild.tool.gnu.cpp.compiler.input.1552324071">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.1435310155;cdt.managedbuild.config.gnu.mingw.exe.debug.1435310155.;cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.debug.927789664;cdt.managedbuild.tool.gnu.cpp.compiler.input.1916891361">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.6837134;cdt.managedbuild.config.gnu.mingw.exe.debug.6837134.;cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.debug.1289133059;cdt.managedbuild.tool.gnu.cpp.compiler.input.1714548268">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.6837134;cdt.managedbuild.config.gnu.mingw.exe.debug.6837134.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.1475000612;cdt.managedbuild.tool.gnu.c.compiler.input.1556660283">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
</scannerConfigBuildInfo>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
</cproject>

31
.gitignore vendored
View File

@@ -2,7 +2,6 @@ src/*.exe
src/casinocoin src/casinocoin
src/casinocoind src/casinocoind
src/test_casinocoin src/test_casinocoin
src/build.h
.*.swp .*.swp
*.*~* *.*~*
*.bak *.bak
@@ -10,24 +9,26 @@ src/build.h
*.orig *.orig
*.o *.o
*.patch *.patch
.bitcoin .casinocoin
#compilation and Qt preprocessor part
# Compilation and Qt preprocessor part
*.qm *.qm
Makefile Makefile
casinocoin-qt casinocoin-qt
#resources cpp CasinoCoin-Qt.app
# Unit-tests
Makefile.test
casinocoin-qt_test
# Resources cpp
qrc_*.cpp qrc_*.cpp
#qt creator
# Qt creator
*.pro.user *.pro.user
#mac specific
# Mac specific
.DS_Store .DS_Store
build build
.cproject
.project !src/leveldb-*/Makefile
debug
release
.svn
object_script.casinocoin-qt.Debug
object_script.casinocoin-qt.Release
object_script.litecoin-qt.Debug
object_script.litecoin-qt.Release

27
.project Normal file
View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>csc</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
</projectDescription>

View File

@@ -1,6 +1,5 @@
Copyright (c) 2009-2012 Bitcoin Developers Copyright (c) 2009-2013 Bitcoin Developers
Copyright (c) 2011-2012 Litecoin Developers Copyright (c) 2011-2013 CasinoCoin Developers
Copyright (c) 2013 CasinoCoin Developers
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -1,6 +1,6 @@
Building CasinoCoin Building CasinoCoin
See doc/readme-qt.rst for instructions on building CasinoCoin-QT, See doc/readme-qt.rst for instructions on building CasinoCoin-Qt,
the intended-for-end-users, nice-graphical-interface, reference the intended-for-end-users, nice-graphical-interface, reference
implementation of CasinoCoin. implementation of CasinoCoin.

View File

@@ -1,9 +1,13 @@
TEMPLATE = app TEMPLATE = app
TARGET = TARGET = casinocoin-qt
VERSION = 1.0.0.4 macx:TARGET = "CasinoCoin-Qt"
VERSION = 1.1.0.0
INCLUDEPATH += src src/json src/qt INCLUDEPATH += src src/json src/qt
QT += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
DEFINES += QT_GUI BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE USE_IPV6 __NO_SYSTEM_INCLUDES DEFINES += QT_GUI BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE USE_IPV6 __NO_SYSTEM_INCLUDES
CONFIG += no_include_pwd CONFIG += no_include_pwd
CONFIG += thread
# for boost 1.37, add -mt to the boost libraries # for boost 1.37, add -mt to the boost libraries
# use: qmake BOOST_LIB_SUFFIX=-mt # use: qmake BOOST_LIB_SUFFIX=-mt
@@ -21,6 +25,8 @@ BDB_INCLUDE_PATH=E:/crypto/deps/db-4.8.30.NC/build_unix
BDB_LIB_PATH=E:/crypto/deps/db-4.8.30.NC/build_unix BDB_LIB_PATH=E:/crypto/deps/db-4.8.30.NC/build_unix
OPENSSL_INCLUDE_PATH=E:/crypto/deps/openssl-1.0.1b/include OPENSSL_INCLUDE_PATH=E:/crypto/deps/openssl-1.0.1b/include
OPENSSL_LIB_PATH=E:/crypto/deps/openssl-1.0.1b OPENSSL_LIB_PATH=E:/crypto/deps/openssl-1.0.1b
QRENCODE_INCLUDE_PATH=E:/crypto/deps/qrencode-3.4.3
QRENCODE_LIB_PATH=E:/crypto/deps/qrencode-3.4.3/.libs
OBJECTS_DIR = build OBJECTS_DIR = build
MOC_DIR = build MOC_DIR = build
@@ -31,20 +37,37 @@ contains(RELEASE, 1) {
# Mac: compile for maximum compatibility (10.5, 32-bit) # Mac: compile for maximum compatibility (10.5, 32-bit)
macx:QMAKE_CXXFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk macx:QMAKE_CXXFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk
macx:QMAKE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk macx:QMAKE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk
macx:QMAKE_LFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk macx:QMAKE_OBJECTIVE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk
!windows:!macx { !win32:!macx {
# Linux: static link # Linux: static link and extra security (see: https://wiki.debian.org/Hardening)
LIBS += -Wl,-Bstatic LIBS += -Wl,-Bstatic -Wl,-z,relro -Wl,-z,now
} }
} }
!win32 {
# for extra security against potential buffer overflows: enable GCCs Stack Smashing Protection
QMAKE_CXXFLAGS *= -fstack-protector-all
QMAKE_LFLAGS *= -fstack-protector-all
# Exclude on Windows cross compile with MinGW 4.2.x, as it will result in a non-working executable!
# This can be enabled for Windows, when we switch to MinGW >= 4.4.x.
}
# for extra security (see: https://wiki.debian.org/Hardening): this flag is GCC compiler-specific
QMAKE_CXXFLAGS *= -D_FORTIFY_SOURCE=2
# for extra security on Windows: enable ASLR and DEP via GCC linker flags
win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat
# on Windows: enable GCC large address aware linker flag
win32:QMAKE_LFLAGS *= -Wl,--large-address-aware
# i686-w64-mingw32
win32:QMAKE_LFLAGS *= -static-libgcc -static-libstdc++
# use: qmake "USE_QRCODE=1" # use: qmake "USE_QRCODE=1"
# libqrencode (http://fukuchi.org/works/qrencode/index.en.html) must be installed for support # libqrencode (http://fukuchi.org/works/qrencode/index.en.html) must be installed for support
contains(USE_QRCODE, 1) { contains(USE_QRCODE, 1) {
message(Building with QRCode support) message(Building with QRCode support)
DEFINES += USE_QRCODE DEFINES += USE_QRCODE
LIBS += -lqrencode #LIBS += -lqrencode
LIBS += -lqrencode $$join(QRENCODE_LIB_PATH,,-L,)
} }
# use: qmake "USE_UPNP=1" ( enabled by default; default) # use: qmake "USE_UPNP=1" ( enabled by default; default)
@@ -71,10 +94,16 @@ contains(USE_DBUS, 1) {
QT += dbus QT += dbus
} }
# use: qmake "FIRST_CLASS_MESSAGING=1" # use: qmake "USE_IPV6=1" ( enabled by default; default)
contains(FIRST_CLASS_MESSAGING, 1) { # or: qmake "USE_IPV6=0" (disabled by default)
message(Building with first-class messaging) # or: qmake "USE_IPV6=-" (not supported)
DEFINES += FIRST_CLASS_MESSAGING contains(USE_IPV6, -) {
message(Building without IPv6 support)
} else {
count(USE_IPV6, 0) {
USE_IPV6=1
}
DEFINES += USE_IPV6=$$USE_IPV6
} }
contains(BITCOIN_NEED_QT_PLUGINS, 1) { contains(BITCOIN_NEED_QT_PLUGINS, 1) {
@@ -82,15 +111,28 @@ contains(BITCOIN_NEED_QT_PLUGINS, 1) {
QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets
} }
!windows { INCLUDEPATH += src/leveldb/include src/leveldb/helpers
# for extra security against potential buffer overflows LIBS += $$PWD/src/leveldb/libleveldb.a $$PWD/src/leveldb/libmemenv.a
QMAKE_CXXFLAGS += -fstack-protector !win32 {
QMAKE_LFLAGS += -fstack-protector # we use QMAKE_CXXFLAGS_RELEASE even without RELEASE=1 because we use RELEASE to indicate linking preferences not -O preferences
# do not enable this on windows, as it will result in a non-working executable! genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a
} else {
# make an educated guess about what the ranlib command is called
isEmpty(QMAKE_RANLIB) {
QMAKE_RANLIB = $$replace(QMAKE_STRIP, strip, ranlib)
}
LIBS += -lshlwapi
# genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a
} }
genleveldb.target = $$PWD/src/leveldb/libleveldb.a
genleveldb.depends = FORCE
PRE_TARGETDEPS += $$PWD/src/leveldb/libleveldb.a
QMAKE_EXTRA_TARGETS += genleveldb
# Gross ugly hack that depends on qmake internals, unfortunately there is no other way to do it.
QMAKE_CLEAN += $$PWD/src/leveldb/libleveldb.a; cd $$PWD/src/leveldb ; $(MAKE) clean
# regenerate src/build.h # regenerate src/build.h
!windows|contains(USE_BUILD_INFO, 1) { !win32|contains(USE_BUILD_INFO, 1) {
genbuild.depends = FORCE genbuild.depends = FORCE
genbuild.commands = cd $$PWD; /bin/sh share/genbuild.sh $$OUT_PWD/build/build.h genbuild.commands = cd $$PWD; /bin/sh share/genbuild.sh $$OUT_PWD/build/build.h
genbuild.target = $$OUT_PWD/build/build.h genbuild.target = $$OUT_PWD/build/build.h
@@ -99,7 +141,7 @@ contains(BITCOIN_NEED_QT_PLUGINS, 1) {
DEFINES += HAVE_BUILD_INFO DEFINES += HAVE_BUILD_INFO
} }
QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wstack-protector
# Input # Input
DEPENDPATH += src src/json src/qt DEPENDPATH += src src/json src/qt
@@ -108,21 +150,25 @@ HEADERS += src/qt/bitcoingui.h \
src/qt/addresstablemodel.h \ src/qt/addresstablemodel.h \
src/qt/optionsdialog.h \ src/qt/optionsdialog.h \
src/qt/sendcoinsdialog.h \ src/qt/sendcoinsdialog.h \
src/qt/coincontroldialog.h \
src/qt/coincontroltreewidget.h \
src/qt/addressbookpage.h \ src/qt/addressbookpage.h \
src/qt/signverifymessagedialog.h \ src/qt/signverifymessagedialog.h \
src/qt/aboutdialog.h \ src/qt/aboutdialog.h \
src/qt/editaddressdialog.h \ src/qt/editaddressdialog.h \
src/qt/bitcoinaddressvalidator.h \ src/qt/bitcoinaddressvalidator.h \
src/alert.h \
src/addrman.h \ src/addrman.h \
src/base58.h \ src/base58.h \
src/bignum.h \ src/bignum.h \
src/checkpoints.h \ src/checkpoints.h \
src/coincontrol.h \
src/compat.h \ src/compat.h \
src/sync.h \ src/sync.h \
src/util.h \ src/util.h \
src/hash.h \
src/uint256.h \ src/uint256.h \
src/serialize.h \ src/serialize.h \
src/strlcpy.h \
src/main.h \ src/main.h \
src/net.h \ src/net.h \
src/key.h \ src/key.h \
@@ -130,8 +176,9 @@ HEADERS += src/qt/bitcoingui.h \
src/walletdb.h \ src/walletdb.h \
src/script.h \ src/script.h \
src/init.h \ src/init.h \
src/irc.h \ src/bloom.h \
src/mruset.h \ src/mruset.h \
src/checkqueue.h \
src/json/json_spirit_writer_template.h \ src/json/json_spirit_writer_template.h \
src/json/json_spirit_writer.h \ src/json/json_spirit_writer.h \
src/json/json_spirit_value.h \ src/json/json_spirit_value.h \
@@ -155,6 +202,9 @@ HEADERS += src/qt/bitcoingui.h \
src/qt/transactionfilterproxy.h \ src/qt/transactionfilterproxy.h \
src/qt/transactionview.h \ src/qt/transactionview.h \
src/qt/walletmodel.h \ src/qt/walletmodel.h \
src/qt/walletview.h \
src/qt/walletstack.h \
src/qt/walletframe.h \
src/bitcoinrpc.h \ src/bitcoinrpc.h \
src/qt/overviewpage.h \ src/qt/overviewpage.h \
src/qt/csvmodelwriter.h \ src/qt/csvmodelwriter.h \
@@ -166,40 +216,50 @@ HEADERS += src/qt/bitcoingui.h \
src/qt/askpassphrasedialog.h \ src/qt/askpassphrasedialog.h \
src/protocol.h \ src/protocol.h \
src/qt/notificator.h \ src/qt/notificator.h \
src/qt/qtipcserver.h \ src/qt/paymentserver.h \
src/allocators.h \ src/allocators.h \
src/ui_interface.h \ src/ui_interface.h \
src/qt/rpcconsole.h \
src/scrypt.h \ src/scrypt.h \
src/version.h \ src/version.h \
src/qt/rpcconsole.h src/netbase.h \
src/clientversion.h \
src/txdb.h \
src/leveldb.h \
src/threadsafety.h \
src/limitedmap.h \
src/qt/macnotificationhandler.h \
src/qt/splashscreen.h
SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \ SOURCES += src/qt/bitcoin.cpp \
src/qt/bitcoingui.cpp \
src/qt/transactiontablemodel.cpp \ src/qt/transactiontablemodel.cpp \
src/qt/addresstablemodel.cpp \ src/qt/addresstablemodel.cpp \
src/qt/optionsdialog.cpp \ src/qt/optionsdialog.cpp \
src/qt/sendcoinsdialog.cpp \ src/qt/sendcoinsdialog.cpp \
src/qt/coincontroldialog.cpp \
src/qt/coincontroltreewidget.cpp \
src/qt/addressbookpage.cpp \ src/qt/addressbookpage.cpp \
src/qt/signverifymessagedialog.cpp \ src/qt/signverifymessagedialog.cpp \
src/qt/aboutdialog.cpp \ src/qt/aboutdialog.cpp \
src/qt/editaddressdialog.cpp \ src/qt/editaddressdialog.cpp \
src/qt/bitcoinaddressvalidator.cpp \ src/qt/bitcoinaddressvalidator.cpp \
src/alert.cpp \
src/version.cpp \ src/version.cpp \
src/sync.cpp \ src/sync.cpp \
src/util.cpp \ src/util.cpp \
src/hash.cpp \
src/netbase.cpp \ src/netbase.cpp \
src/key.cpp \ src/key.cpp \
src/script.cpp \ src/script.cpp \
src/main.cpp \ src/main.cpp \
src/init.cpp \ src/init.cpp \
src/net.cpp \ src/net.cpp \
src/irc.cpp \ src/bloom.cpp \
src/checkpoints.cpp \ src/checkpoints.cpp \
src/addrman.cpp \ src/addrman.cpp \
src/db.cpp \ src/db.cpp \
src/walletdb.cpp \ src/walletdb.cpp \
src/json/json_spirit_writer.cpp \
src/json/json_spirit_value.cpp \
src/json/json_spirit_reader.cpp \
src/qt/clientmodel.cpp \ src/qt/clientmodel.cpp \
src/qt/guiutil.cpp \ src/qt/guiutil.cpp \
src/qt/transactionrecord.cpp \ src/qt/transactionrecord.cpp \
@@ -214,9 +274,15 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \
src/qt/transactionfilterproxy.cpp \ src/qt/transactionfilterproxy.cpp \
src/qt/transactionview.cpp \ src/qt/transactionview.cpp \
src/qt/walletmodel.cpp \ src/qt/walletmodel.cpp \
src/qt/walletview.cpp \
src/qt/walletstack.cpp \
src/qt/walletframe.cpp \
src/bitcoinrpc.cpp \ src/bitcoinrpc.cpp \
src/rpcdump.cpp \ src/rpcdump.cpp \
src/rpcnet.cpp \ src/rpcnet.cpp \
src/rpcmining.cpp \
src/rpcwallet.cpp \
src/rpcblockchain.cpp \
src/rpcrawtransaction.cpp \ src/rpcrawtransaction.cpp \
src/qt/overviewpage.cpp \ src/qt/overviewpage.cpp \
src/qt/csvmodelwriter.cpp \ src/qt/csvmodelwriter.cpp \
@@ -228,16 +294,18 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \
src/qt/askpassphrasedialog.cpp \ src/qt/askpassphrasedialog.cpp \
src/protocol.cpp \ src/protocol.cpp \
src/qt/notificator.cpp \ src/qt/notificator.cpp \
src/qt/qtipcserver.cpp \ src/qt/paymentserver.cpp \
src/qt/rpcconsole.cpp \ src/qt/rpcconsole.cpp \
src/scrypt.c \ src/scrypt.cpp \
src/noui.cpp src/noui.cpp \
src/leveldb.cpp \
src/txdb.cpp \
src/qt/splashscreen.cpp
RESOURCES += \ RESOURCES += src/qt/bitcoin.qrc
src/qt/bitcoin.qrc
FORMS += \ FORMS += src/qt/forms/sendcoinsdialog.ui \
src/qt/forms/sendcoinsdialog.ui \ src/qt/forms/coincontroldialog.ui \
src/qt/forms/addressbookpage.ui \ src/qt/forms/addressbookpage.ui \
src/qt/forms/signverifymessagedialog.ui \ src/qt/forms/signverifymessagedialog.ui \
src/qt/forms/aboutdialog.ui \ src/qt/forms/aboutdialog.ui \
@@ -261,10 +329,21 @@ SOURCES += src/qt/test/test_main.cpp \
HEADERS += src/qt/test/uritests.h HEADERS += src/qt/test/uritests.h
DEPENDPATH += src/qt/test DEPENDPATH += src/qt/test
QT += testlib QT += testlib
TARGET = bitcoin-qt_test TARGET = casinocoin-qt_test
DEFINES += BITCOIN_QT_TEST DEFINES += BITCOIN_QT_TEST
macx: CONFIG -= app_bundle
} }
contains(USE_SSE2, 1) {
DEFINES += USE_SSE2
gccsse2.input = SOURCES_SSE2
gccsse2.output = $$PWD/build/${QMAKE_FILE_BASE}.o
gccsse2.commands = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME} -msse2 -mstackrealign
QMAKE_EXTRA_COMPILERS += gccsse2
SOURCES_SSE2 += src/scrypt-sse2.cpp
}
# Todo: Remove this line when switching to Qt5, as that option was removed
CODECFORTR = UTF-8 CODECFORTR = UTF-8
# for lrelease/lupdate # for lrelease/lupdate
@@ -285,14 +364,20 @@ TSQM.CONFIG = no_link
QMAKE_EXTRA_COMPILERS += TSQM QMAKE_EXTRA_COMPILERS += TSQM
# "Other files" to show in Qt Creator # "Other files" to show in Qt Creator
OTHER_FILES += \ OTHER_FILES += README.md \
contrib/gitian-descriptors/* doc/*.rst doc/*.txt doc/README README.md res/bitcoin-qt.rc \ doc/*.rst \
share/setup.nsi doc/*.txt \
doc/*.md \
src/qt/res/bitcoin-qt.rc \
src/test/*.cpp \
src/test/*.h \
src/qt/test/*.cpp \
src/qt/test/*.h
# platform specific defaults, if not overridden on command line # platform specific defaults, if not overridden on command line
isEmpty(BOOST_LIB_SUFFIX) { isEmpty(BOOST_LIB_SUFFIX) {
macx:BOOST_LIB_SUFFIX = -mt macx:BOOST_LIB_SUFFIX = -mt
windows:BOOST_LIB_SUFFIX = -mgw46-mt-s-1_53 win32:BOOST_LIB_SUFFIX = -mgw46-mt-s-1_53
} }
isEmpty(BOOST_THREAD_LIB_SUFFIX) { isEmpty(BOOST_THREAD_LIB_SUFFIX) {
@@ -319,11 +404,10 @@ isEmpty(BOOST_INCLUDE_PATH) {
macx:BOOST_INCLUDE_PATH = /opt/local/include macx:BOOST_INCLUDE_PATH = /opt/local/include
} }
windows:LIBS += -lshlwapi win32:DEFINES += WIN32
windows:DEFINES += WIN32 win32:RC_FILE = src/qt/res/bitcoin-qt.rc
windows:RC_FILE = src/qt/res/bitcoin-qt.rc
windows:!contains(MINGW_THREAD_BUGFIX, 0) { win32:!contains(MINGW_THREAD_BUGFIX, 0) {
# At least qmake's win32-g++-cross profile is missing the -lmingwthrd # At least qmake's win32-g++-cross profile is missing the -lmingwthrd
# thread-safety flag. GCC has -mthreads to enable this, but it doesn't # thread-safety flag. GCC has -mthreads to enable this, but it doesn't
# work with static linking. -lmingwthrd must come BEFORE -lmingw, so # work with static linking. -lmingwthrd must come BEFORE -lmingw, so
@@ -334,33 +418,38 @@ windows:!contains(MINGW_THREAD_BUGFIX, 0) {
QMAKE_LIBS_QT_ENTRY = -lmingwthrd $$QMAKE_LIBS_QT_ENTRY QMAKE_LIBS_QT_ENTRY = -lmingwthrd $$QMAKE_LIBS_QT_ENTRY
} }
!windows:!mac { !win32:!macx {
DEFINES += LINUX DEFINES += LINUX
LIBS += -lrt LIBS += -lrt
# _FILE_OFFSET_BITS=64 lets 32-bit fopen transparently support large files.
DEFINES += _FILE_OFFSET_BITS=64
} }
macx:HEADERS += src/qt/macdockiconhandler.h macx:HEADERS += src/qt/macdockiconhandler.h src/qt/macnotificationhandler.h
macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm src/qt/macnotificationhandler.mm
macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -framework CoreServices
macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0 macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0
macx:ICON = src/qt/res/icons/bitcoin.icns macx:ICON = src/qt/res/icons/casinocoin.icns
macx:TARGET = "CasinoCoin-Qt" macx:QMAKE_CFLAGS_THREAD += -pthread
macx:QMAKE_LFLAGS_THREAD += -pthread
macx:QMAKE_CXXFLAGS_THREAD += -pthread
macx:QMAKE_INFO_PLIST = share/qt/Info.plist
# Set libraries and includes at end, to use platform-defined defaults if not overridden # Set libraries and includes at end, to use platform-defined defaults if not overridden
INCLUDEPATH += $$BOOST_INCLUDE_PATH $$BDB_INCLUDE_PATH $$OPENSSL_INCLUDE_PATH $$QRENCODE_INCLUDE_PATH INCLUDEPATH += $$BOOST_INCLUDE_PATH $$BDB_INCLUDE_PATH $$OPENSSL_INCLUDE_PATH $$QRENCODE_INCLUDE_PATH
LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,) $$join(QRENCODE_LIB_PATH,,-L,) LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,) $$join(QRENCODE_LIB_PATH,,-L,)
LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX -lpthread
# -lgdi32 has to happen after -lcrypto (see #681) # -lgdi32 has to happen after -lcrypto (see #681)
windows:LIBS += -lws2_32 -lole32 -lmswsock -loleaut32 -luuid -lgdi32 win32:LIBS += -lws2_32 -lole32 -lmswsock -loleaut32 -luuid -lgdi32 -lshlwapi
LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX
win32:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX
macx:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX
contains(RELEASE, 1) { contains(RELEASE, 1) {
!windows:!macx { !win32:!macx {
# Linux: turn dynamic linking back on for c/c++ runtime libraries # Linux: turn dynamic linking back on for c/c++ runtime libraries
LIBS += -Wl,-Bdynamic LIBS += -Wl,-Bdynamic
} }
} }
system($$QMAKE_LRELEASE -silent $$_PRO_FILE_) system($$QMAKE_LRELEASE -silent $$TRANSLATIONS)

View File

@@ -10,9 +10,9 @@ rpcpass = ""
if rpcpass == "": if rpcpass == "":
access = ServiceProxy("http://127.0.0.1:8332") access = ServiceProxy("http://127.0.0.1:47970")
else: else:
access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:8332") access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:47970")
cmd = sys.argv[1].lower() cmd = sys.argv[1].lower()
if cmd == "backupwallet": if cmd == "backupwallet":
@@ -24,7 +24,7 @@ if cmd == "backupwallet":
elif cmd == "getaccount": elif cmd == "getaccount":
try: try:
addr = raw_input("Enter a Bitcoin address: ") addr = raw_input("Enter a CasinoCoin address: ")
print access.getaccount(addr) print access.getaccount(addr)
except: except:
print "\n---An error occurred---\n" print "\n---An error occurred---\n"
@@ -126,7 +126,7 @@ elif cmd == "getreceivedbyaccount":
elif cmd == "getreceivedbyaddress": elif cmd == "getreceivedbyaddress":
try: try:
addr = raw_input("Enter a Bitcoin address (optional): ") addr = raw_input("Enter a CasinoCoin address (optional): ")
mc = raw_input("Minimum confirmations (optional): ") mc = raw_input("Minimum confirmations (optional): ")
try: try:
print access.getreceivedbyaddress(addr, mc) print access.getreceivedbyaddress(addr, mc)
@@ -321,4 +321,4 @@ elif cmd == "walletpassphrasechange":
print print
else: else:
print "Command not found or not supported" print "Command not found or not supported"

20
contrib/debian/README Normal file
View File

@@ -0,0 +1,20 @@
This directory contains files used to package bitcoind/bitcoin-qt
for Debian-based Linux systems.
If you compile bitcoind/bitcoin-qt yourself, there are some
useful files here:
bitcoin: URI support
--------------------
bitcoin-qt.desktop (Gnome / Open Desktop)
To install:
sudo desktop-file-install bitcoin-qt.desktop
sudo update-desktop-database
If you build yourself, you will either need to modify the paths in
the .desktop file or copy or symlink your bitcoin-qt binary to /usr/bin
and the ../../share/pixmaps/bitcoin128.png to /usr/share/pixmaps
bitcoin-qt.protocol (KDE)

View File

@@ -0,0 +1,62 @@
10
dir
114
svn://svn.greyhatapps.com/repos/projects/casinocoin/contrib/debian/bin
svn://svn.greyhatapps.com/repos/projects
2013-07-03T07:48:00.318239Z
64
nam
svn:special svn:externals svn:needs-lock
1324ab70-8081-43f4-a012-72ad25adf38d
bitcoind
file
2013-06-25T14:29:02.000000Z
1e30c9a90444273ac9aa7a656a7b8948
2013-07-03T07:48:00.318239Z
64
nam
258

View File

@@ -0,0 +1,14 @@
#!/bin/sh
set -e
umask 077
basedir=~/.bitcoin
cfgfile="$basedir/bitcoin.conf"
[ -e "$basedir" ] || mkdir "$basedir"
[ -e "$cfgfile" ] || perl -le 'print"rpcpassword=",map{(a..z,A..Z,0..9)[rand 62]}0..9' > "$cfgfile"
exec /usr/lib/bitcoin/bitcoind "$@"

View File

@@ -4,9 +4,9 @@ Name=Bitcoin
Comment=Bitcoin P2P Cryptocurrency Comment=Bitcoin P2P Cryptocurrency
Comment[fr]=Bitcoin, monnaie virtuelle cryptographique pair à pair Comment[fr]=Bitcoin, monnaie virtuelle cryptographique pair à pair
Comment[tr]=Bitcoin, eşten eşe kriptografik sanal para birimi Comment[tr]=Bitcoin, eşten eşe kriptografik sanal para birimi
Exec=/usr/bin/bitcoin-qt Exec=/usr/bin/bitcoin-qt %u
Terminal=false Terminal=false
Type=Application Type=Application
Icon=/usr/share/pixmaps/bitcoin80.xpm Icon=/usr/share/pixmaps/bitcoin128.png
MimeType=x-scheme-handler/bitcoin; MimeType=x-scheme-handler/bitcoin;
Categories=Office; Categories=Office;

View File

@@ -1,5 +1,6 @@
bitcoin-qt usr/bin bitcoin-qt usr/bin
share/pixmaps/bitcoin32.xpm usr/share/pixmaps share/pixmaps/bitcoin32.xpm usr/share/pixmaps
share/pixmaps/bitcoin80.xpm usr/share/pixmaps share/pixmaps/bitcoin16.xpm usr/share/pixmaps
share/pixmaps/bitcoin128.png usr/share/pixmaps
debian/bitcoin-qt.desktop usr/share/applications debian/bitcoin-qt.desktop usr/share/applications
debian/bitcoin-qt.protocol usr/share/kde4/services/ debian/bitcoin-qt.protocol usr/share/kde4/services/

View File

@@ -1,2 +1 @@
debian/bin/bitcoind usr/bin src/bitcoind usr/bin
src/bitcoind usr/lib/bitcoin

View File

@@ -1,3 +1,45 @@
bitcoin (0.8.1-natty3) natty; urgency=low
* New pixmaps
-- Jonas Schnelli <jonas.schnelli@include7.ch> Mon, 13 May 2013 16:14:00 +0100
bitcoin (0.8.1-natty2) natty; urgency=low
* Remove dumb broken launcher script
-- Matt Corallo <matt@bluematt.me> Sun, 24 Mar 2013 20:01:00 -0400
bitcoin (0.8.1-natty1) natty; urgency=low
* New upstream release.
-- Matt Corallo <matt@bluematt.me> Tue, 19 Mar 2013 13:03:00 -0400
bitcoin (0.8.0-natty1) natty; urgency=low
* New upstream release.
-- Matt Corallo <matt@bluematt.me> Sat, 23 Feb 2013 16:01:00 -0500
bitcoin (0.7.2-natty1) natty; urgency=low
* New upstream release.
-- Matt Corallo <matt@bluematt.me> Sat, 15 Dec 2012 10:59:00 -0400
bitcoin (0.7.1-natty1) natty; urgency=low
* New upstream release.
-- Matt Corallo <matt@bluematt.me> Wed, 24 Oct 2012 15:06:00 -0400
bitcoin (0.7.0-natty1) natty; urgency=low
* New upstream release.
-- Matt Corallo <matt@bluematt.me> Mon, 17 Sep 2012 13:45:00 +0200
bitcoin (0.6.3-natty1) natty; urgency=low bitcoin (0.6.3-natty1) natty; urgency=low
* New upstream release. * New upstream release.

View File

@@ -33,8 +33,6 @@ Description: peer-to-peer network based digital currency - daemon
transact directly with each other, with the help of a P2P network to transact directly with each other, with the help of a P2P network to
check for double-spending. check for double-spending.
. .
By default connects to an IRC network to discover other peers.
.
Full transaction history is stored locally at each client. This Full transaction history is stored locally at each client. This
requires 2+ GB of space, slowly growing. requires 2+ GB of space, slowly growing.
. .
@@ -51,8 +49,6 @@ Description: peer-to-peer network based digital currency - Qt GUI
transact directly with each other, with the help of a P2P network to transact directly with each other, with the help of a P2P network to
check for double-spending. check for double-spending.
. .
By default connects to an IRC network to discover other peers.
.
Full transaction history is stored locally at each client. This Full transaction history is stored locally at each client. This
requires 2+ GB of space, slowly growing. requires 2+ GB of space, slowly growing.
. .

View File

@@ -55,8 +55,7 @@ Comment: Icon Pack: Human-O2
Files: src/qt/res/icons/transaction*.png Files: src/qt/res/icons/transaction*.png
Copyright: md2k7 Copyright: md2k7
License: You are free to do with these icons as you wish, including selling, License: Expat
copying, modifying etc.
Comment: Site: https://bitcointalk.org/index.php?topic=15276.0 Comment: Site: https://bitcointalk.org/index.php?topic=15276.0
Files: src/qt/res/icons/configure.png, src/qt/res/icons/quit.png, Files: src/qt/res/icons/configure.png, src/qt/res/icons/quit.png,
@@ -78,7 +77,7 @@ License: GPL-3+
Comment: Icon Pack: Kids Comment: Icon Pack: Kids
Site: http://findicons.com/icon/17102/reload?id=17102 Site: http://findicons.com/icon/17102/reload?id=17102
Files: src/qt/res/images/splash2.jpg Files: src/qt/res/images/splash.jpg
License: PUB-DOM License: PUB-DOM
Copyright: Crobbo (forum) Copyright: Crobbo (forum)
Comment: Site: https://bitcointalk.org/index.php?topic=32273.0 Comment: Site: https://bitcointalk.org/index.php?topic=32273.0

View File

@@ -11,16 +11,12 @@
# Use as many addnode= settings as you like to connect to specific peers # Use as many addnode= settings as you like to connect to specific peers
#addnode=69.164.218.197 #addnode=69.164.218.197
#addnode=10.0.0.2:8333 #addnode=10.0.0.2:47950
# ... or use as many connect= settings as you like to connect ONLY # ... or use as many connect= settings as you like to connect ONLY
# to specific peers: # to specific peers:
#connect=69.164.218.197 #connect=69.164.218.197
#connect=10.0.0.1:8333 #connect=10.0.0.1:47950
# Do not use Internet Relay Chat (irc.lfnet.org #bitcoin channel) to
# find other peers.
#noirc=1
# Maximum number of inbound+outbound connections. # Maximum number of inbound+outbound connections.
#maxconnections= #maxconnections=
@@ -42,7 +38,7 @@
#rpcallowip=192.168.1.* #rpcallowip=192.168.1.*
# Listen for RPC connections on this TCP port: # Listen for RPC connections on this TCP port:
rpcport=8332 rpcport=47970
# You can use Bitcoin or bitcoind to send commands to Bitcoin/bitcoind # You can use Bitcoin or bitcoind to send commands to Bitcoin/bitcoind
# running on another host using this option: # running on another host using this option:

View File

@@ -0,0 +1,206 @@
.TH BITCOIN-QT "1" "April 2013" "bitcoin-qt 1"
.SH NAME
bitcoin-qt \- peer-to-peer network based digital currency
.SH DESCRIPTION
.SS "Usage:"
.IP
bitcoin\-qt [command\-line options]
.SH OPTIONS
.TP
\-?
This help message
.TP
\fB\-conf=\fR<file>
Specify configuration file (default: bitcoin.conf)
.TP
\fB\-pid=\fR<file>
Specify pid file (default: bitcoind.pid)
.TP
\fB\-gen\fR
Generate coins
.TP
\fB\-gen\fR=\fI0\fR
Don't generate coins
.TP
\fB\-datadir=\fR<dir>
Specify data directory
.TP
\fB\-dbcache=\fR<n>
Set database cache size in megabytes (default: 25)
.TP
\fB\-timeout=\fR<n>
Specify connection timeout in milliseconds (default: 5000)
.TP
\fB\-proxy=\fR<ip:port>
Connect through socks proxy
.TP
\fB\-socks=\fR<n>
Select the version of socks proxy to use (4\-5, default: 5)
.TP
\fB\-tor=\fR<ip:port>
Use proxy to reach tor hidden services (default: same as \fB\-proxy\fR)
.TP
\fB\-dns\fR
Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR
.TP
\fB\-port=\fR<port>
Listen for connections on <port> (default: 47950 or testnet: 17950)
.TP
\fB\-maxconnections=\fR<n>
Maintain at most <n> connections to peers (default: 125)
.TP
\fB\-addnode=\fR<ip>
Add a node to connect to and attempt to keep the connection open
.TP
\fB\-connect=\fR<ip>
Connect only to the specified node(s)
.TP
\fB\-seednode=\fR<ip>
Connect to a node to retrieve peer addresses, and disconnect
.TP
\fB\-externalip=\fR<ip>
Specify your own public address
.TP
\fB\-onlynet=\fR<net>
Only connect to nodes in network <net> (IPv4, IPv6 or Tor)
.TP
\fB\-discover\fR
Discover own IP address (default: 1 when listening and no \fB\-externalip\fR)
.TP
\fB\-checkpoints\fR
Only accept block chain matching built\-in checkpoints (default: 1)
.TP
\fB\-listen\fR
Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR)
.TP
\fB\-bind=\fR<addr>
Bind to given address and always listen on it. Use [host]:port notation for IPv6
.TP
\fB\-dnsseed\fR
Find peers using DNS lookup (default: 1 unless \fB\-connect\fR)
.TP
\fB\-banscore=\fR<n>
Threshold for disconnecting misbehaving peers (default: 100)
.TP
\fB\-bantime=\fR<n>
Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
.TP
\fB\-maxreceivebuffer=\fR<n>
Maximum per\-connection receive buffer, <n>*1000 bytes (default: 5000)
.TP
\fB\-maxsendbuffer=\fR<n>
Maximum per\-connection send buffer, <n>*1000 bytes (default: 1000)
.TP
\fB\-upnp\fR
Use UPnP to map the listening port (default: 1 when listening)
.TP
\fB\-paytxfee=\fR<amt>
Fee per KB to add to transactions you send
.TP
\fB\-server\fR
Accept command line and JSON\-RPC commands
.TP
\fB\-testnet\fR
Use the test network
.TP
\fB\-debug\fR
Output extra debugging information. Implies all other \fB\-debug\fR* options
.TP
\fB\-debugnet\fR
Output extra network debugging information
.TP
\fB\-logtimestamps\fR
Prepend debug output with timestamp
.TP
\fB\-shrinkdebugfile\fR
Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR)
.TP
\fB\-printtoconsole\fR
Send trace/debug info to console instead of debug.log file
.TP
\fB\-rpcuser=\fR<user>
Username for JSON\-RPC connections
.TP
\fB\-rpcpassword=\fR<pw>
Password for JSON\-RPC connections
.TP
\fB\-rpcport=\fR<port>
Listen for JSON\-RPC connections on <port> (default: 47970 or testnet: 17970)
.TP
\fB\-rpcallowip=\fR<ip>
Allow JSON\-RPC connections from specified IP address
.TP
\fB\-rpcthreads=\fR<n>
Set the number of threads to service RPC calls (default: 4)
.TP
\fB\-blocknotify=\fR<cmd>
Execute command when the best block changes (%s in cmd is replaced by block hash)
.TP
\fB\-walletnotify=\fR<cmd>
Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)
.TP
\fB\-alertnotify=\fR<cmd>
Execute command when a relevant alert is received (%s in cmd is replaced by message)
.TP
\fB\-upgradewallet\fR
Upgrade wallet to latest format
.TP
\fB\-keypool=\fR<n>
Set key pool size to <n> (default: 100)
.TP
\fB\-rescan\fR
Rescan the block chain for missing wallet transactions
.TP
\fB\-salvagewallet\fR
Attempt to recover private keys from a corrupt wallet.dat
.TP
\fB\-checkblocks=\fR<n>
How many blocks to check at startup (default: 288, 0 = all)
.TP
\fB\-checklevel=\fR<n>
How thorough the block verification is (0\-4, default: 3)
.TP
\fB\-txindex\fR
Maintain a full transaction index (default: 0)
.TP
\fB\-loadblock=\fR<file>
Imports blocks from external blk000??.dat file
.TP
\fB\-reindex\fR
Rebuild block chain index from current blk000??.dat files
.TP
\fB\-par=\fR<n>
Set the number of script verification threads (1\-16, 0=auto, default: 0)
.SS "Block creation options:"
.TP
\fB\-blockminsize=\fR<n>
Set minimum block size in bytes (default: 0)
.TP
\fB\-blockmaxsize=\fR<n>
Set maximum block size in bytes (default: 250000)
.HP
\fB\-blockprioritysize=\fR<n> Set maximum size of high\-priority/low\-fee transactions in bytes (default: 27000)
.PP
SSL options: (see the Bitcoin Wiki for SSL setup instructions)
.TP
\fB\-rpcssl\fR
Use OpenSSL (https) for JSON\-RPC connections
.TP
\fB\-rpcsslcertificatechainfile=\fR<file.cert>
Server certificate file (default: server.cert)
.TP
\fB\-rpcsslprivatekeyfile=\fR<file.pem>
Server private key (default: server.pem)
.TP
\fB\-rpcsslciphers=\fR<ciphers>
Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
.SS "UI options:"
.TP
\fB\-lang=\fR<lang>
Set language, for example "de_DE" (default: system locale)
.TP
\fB\-min\fR
Start minimized
.TP
\fB\-splash\fR
Show splash screen on startup (default: 1)

View File

@@ -2,11 +2,11 @@
.SH NAME .SH NAME
bitcoin.conf \- bitcoin configuration file bitcoin.conf \- bitcoin configuration file
.SH SYNOPSIS .SH SYNOPSIS
All command-line options (except for '-datadir' and '-conf') may be specified in a configuration file, and all configuration file options may also be specified on the command line. Command-line options override values set in the configuration file. All command-line options (except for '\-datadir' and '\-conf') may be specified in a configuration file, and all configuration file options may also be specified on the command line. Command-line options override values set in the configuration file.
.TP .TP
The configuration file is a list of 'setting=value' pairs, one per line, with optional comments starting with the '#' character. The configuration file is a list of 'setting=value' pairs, one per line, with optional comments starting with the '#' character.
.TP .TP
The configuration file is not automatically created; you can create it using your favorite plain-text editor. By default, bitcoind(1) will look for a file named bitcoin.conf(5) in the bitcoin data directory, but both the data directory and the configuration file path may be changed using the '-datadir' and '-conf' command-line arguments. The configuration file is not automatically created; you can create it using your favorite plain-text editor. By default, bitcoind(1) will look for a file named bitcoin.conf(5) in the bitcoin data directory, but both the data directory and the configuration file path may be changed using the '\-datadir' and '\-conf' command-line arguments.
.SH LOCATION .SH LOCATION
bitcoin.conf should be located in $HOME/.bitcoin bitcoin.conf should be located in $HOME/.bitcoin
.SH NETWORK-RELATED SETTINGS .SH NETWORK-RELATED SETTINGS
@@ -18,15 +18,12 @@ Enable or disable run on the test network instead of the real *bitcoin* network.
\fBproxy=\fR\fI'127.0.0.1:9050'\fR \fBproxy=\fR\fI'127.0.0.1:9050'\fR
Connect via a socks4 proxy. Connect via a socks4 proxy.
.TP .TP
\fBaddnode=\fR\fI'10.0.0.2:8333'\fR \fBaddnode=\fR\fI'10.0.0.2:47950'\fR
Use as many *addnode=* settings as you like to connect to specific peers. Use as many *addnode=* settings as you like to connect to specific peers.
.TP .TP
\fBconnect=\fR\fI'10.0.0.1:8333'\fR \fBconnect=\fR\fI'10.0.0.1:47950'\fR
Use as many *connect=* settings as you like to connect ONLY to specific peers. Use as many *connect=* settings as you like to connect ONLY to specific peers.
.TP .TP
\fBnoirc=\fR[\fI'1'\fR|\fI'0'\fR]
Use or Do not use Internet Relay Chat (irc.lfnet.org #bitcoin channel) to find other peers.
.TP
\fRmaxconnections=\fR\fI'value'\fR \fRmaxconnections=\fR\fI'value'\fR
Maximum number of inbound+outbound connections. Maximum number of inbound+outbound connections.
.SH JSON-RPC OPTIONS .SH JSON-RPC OPTIONS
@@ -46,16 +43,17 @@ How many seconds *bitcoin* will wait for a complete RPC HTTP request, after the
\fBrpcallowip=\fR\fI'192.168.1.*'\fR \fBrpcallowip=\fR\fI'192.168.1.*'\fR
By default, only RPC connections from localhost are allowed. Specify as many *rpcallowip=* settings as you like to allow connections from other hosts (and you may use * as a wildcard character). By default, only RPC connections from localhost are allowed. Specify as many *rpcallowip=* settings as you like to allow connections from other hosts (and you may use * as a wildcard character).
.TP .TP
\fBrpcport=\fR\fI'8332'\fR \fBrpcport=\fR\fI'47970'\fR
Listen for RPC connections on this TCP port. Listen for RPC connections on this TCP port.
.TP .TP
\fBrpcconnect=\fR\fI'127.0.0.1'\fR \fBrpcconnect=\fR\fI'127.0.0.1'\fR
You can use *bitcoin* or *bitcoind(1)* to send commands to *bitcoin*/*bitcoind(1)* running on another host using this option. You can use *bitcoin* or *bitcoind(1)* to send commands to *bitcoin*/*bitcoind(1)* running on another host using this option.
.TP .TP
\fBrpcssl=\fR\fI'1'\fR \fBrpcssl=\fR\fI'1'\fR
Use Secure Sockets Layer (also known as TLS or HTTPS) to communicate with *bitcoin* '-server' or *bitcoind(1)*. Example of OpenSSL settings used when *rpcssl*='1': Use Secure Sockets Layer (also known as TLS or HTTPS) to communicate with *bitcoin* '\-server' or *bitcoind(1)*. Example of OpenSSL settings used when *rpcssl*='1':
.TP .TP
\fBrpcsslciphers=\fR\fI'TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH'\fR \fB\-rpcsslciphers=\fR<ciphers>
Acceptable ciphers (default: TLSv1+HIGH:\:!SSLv2:\:!aNULL:\:!eNULL:\:!AH:\:!3DES:\:@STRENGTH)
.TP .TP
\fBrpcsslcertificatechainfile=\fR\fI'server.cert'\fR \fBrpcsslcertificatechainfile=\fR\fI'server.cert'\fR
.TP .TP

View File

@@ -4,7 +4,7 @@ bitcoind \- peer-to-peer network based digital currency
.SH SYNOPSIS .SH SYNOPSIS
bitcoin [options] <command> [params] bitcoin [options] <command> [params]
.TP .TP
bitcoin [options] help <command> - Get help for a command bitcoin [options] help <command> \- Get help for a command
.SH DESCRIPTION .SH DESCRIPTION
This manual page documents the bitcoind program. Bitcoin is a peer-to-peer digital currency. Peer-to-peer (P2P) means that there is no central authority to issue new money or keep track of transactions. Instead, these tasks are managed collectively by the nodes of the network. Advantages: This manual page documents the bitcoind program. Bitcoin is a peer-to-peer digital currency. Peer-to-peer (P2P) means that there is no central authority to issue new money or keep track of transactions. Instead, these tasks are managed collectively by the nodes of the network. Advantages:
@@ -75,7 +75,7 @@ Server certificate file (default: server.cert)
Server private key (default: server.pem) Server private key (default: server.pem)
.TP .TP
\fB\-rpcsslciphers=\fR<ciphers> \fB\-rpcsslciphers=\fR<ciphers>
Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) Acceptable ciphers (default: TLSv1+HIGH:\:!SSLv2:\:!aNULL:\:!eNULL:\:!AH:\:!3DES:\:@STRENGTH)
.TP .TP
\-? \-?
This help message This help message
@@ -115,7 +115,7 @@ Returns the proof-of-work difficulty as a multiple of the minimum difficulty.
Returns boolean true if server is trying to generate bitcoins, false otherwise. Returns boolean true if server is trying to generate bitcoins, false otherwise.
.TP .TP
\fBsetgenerate 'generate' ['genproclimit']\fR \fBsetgenerate 'generate' ['genproclimit']\fR
Generation is limited to ['genproclimit'] processors, -1 is unlimited. Generation is limited to ['genproclimit'] processors, \-1 is unlimited.
.TP .TP
\fBgethashespersec\fR \fBgethashespersec\fR
Returns a recent hashes per second performance measurement while generating. Returns a recent hashes per second performance measurement while generating.
@@ -166,7 +166,7 @@ List accounts and their current balances.
"confirmations" : number of confirmations of the most recent transaction included. "confirmations" : number of confirmations of the most recent transaction included.
.TP .TP
\fBlisttransactions 'account' ['count=10']\fR \fBlisttransactions 'account' ['count=10']\fR
Returns a list of the last ['count'] transactions for 'account' - for all accounts if 'account' is not specified or is "*". Each entry in the list may contain: Returns a list of the last ['count'] transactions for 'account' \- for all accounts if 'account' is not specified or is "*". Each entry in the list may contain:
"category" : will be generate, send, receive, or move. "category" : will be generate, send, receive, or move.
"amount" : amount of transaction. "amount" : amount of transaction.

View File

@@ -1,31 +1,86 @@
Gavin's notes on getting gitian builds up and running: Gavin's notes on getting gitian builds up and running using KVM:
These instructions distilled from:
https://help.ubuntu.com/community/KVM/Installation
... see there for complete details.
You need the right hardware: you need a 64-bit-capable CPU with hardware virtualization support (Intel VT-x or AMD-V). Not all modern CPUs support hardware virtualization. You need the right hardware: you need a 64-bit-capable CPU with hardware virtualization support (Intel VT-x or AMD-V). Not all modern CPUs support hardware virtualization.
You probably need to enable hardware virtualization in your machine's BIOS. You probably need to enable hardware virtualization in your machine's BIOS.
You need to be running a recent version of 64-bit-Ubuntu, and you need to install several prerequisites: You need to be running a recent version of 64-bit-Ubuntu, and you need to install several prerequisites:
sudo apt-get install apache2 git apt-cacher-ng python-vm-builder qemu-kvm sudo apt-get install ruby apache2 git apt-cacher-ng python-vm-builder qemu-kvm
Sanity checks: Sanity checks:
sudo service apt-cacher-ng status # Should return apt-cacher-ng is running sudo service apt-cacher-ng status # Should return apt-cacher-ng is running
ls -l /dev/kvm # Should show a /dev/kvm device ls -l /dev/kvm # Should show a /dev/kvm device
Once you've got the right hardware and software: Once you've got the right hardware and software:
git clone git://github.com/bitcoin/bitcoin.git git clone git://github.com/bitcoin/bitcoin.git
git clone git://github.com/devrandom/gitian-builder.git git clone git://github.com/devrandom/gitian-builder.git
mkdir gitian-builder/inputs mkdir gitian-builder/inputs
wget 'http://miniupnp.tuxfamily.org/files/download.php?file=miniupnpc-1.6.tar.gz' -O gitian-builder/inputs/miniupnpc-1.6.tar.gz cd gitian-builder/inputs
# Inputs for Linux and Win32:
wget -O miniupnpc-1.6.tar.gz 'http://miniupnp.tuxfamily.org/files/download.php?file=miniupnpc-1.6.tar.gz'
wget 'http://fukuchi.org/works/qrencode/qrencode-3.2.0.tar.bz2'
# Inputs for Win32: (Linux has packages for these)
wget 'https://downloads.sourceforge.net/project/boost/boost/1.50.0/boost_1_50_0.tar.bz2'
wget 'http://www.openssl.org/source/openssl-1.0.1c.tar.gz'
wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
wget 'https://downloads.sourceforge.net/project/libpng/zlib/1.2.6/zlib-1.2.6.tar.gz'
wget 'https://downloads.sourceforge.net/project/libpng/libpng15/older-releases/1.5.9/libpng-1.5.9.tar.gz'
wget 'http://releases.qt-project.org/qt4/source/qt-everywhere-opensource-src-4.8.3.tar.gz'
cd ../..
cd gitian-builder cd gitian-builder
bin/make-base-vm --arch i386 bin/make-base-vm --arch i386
bin/make-base-vm --arch amd64 bin/make-base-vm --arch amd64
cd .. cd ..
# To build # Build Linux release:
cd bitcoin cd bitcoin
git pull git pull
cd ../gitian-builder cd ../gitian-builder
git pull git pull
./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian.yml ./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian-descriptors/gitian.yml
# Build Win32 dependencies: (only needs to be done once, or when dependency versions change)
./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian-descriptors/boost-win32.yml
./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian-descriptors/deps-win32.yml
./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian-descriptors/qt-win32.yml
# Build Win32 release:
./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml
---------------------
gitian-builder now also supports building using LXC. See
https://help.ubuntu.com/12.04/serverguide/lxc.html
... for how to get LXC up and running under Ubuntu.
If your main machine is a 64-bit Mac or PC with a few gigabytes of memory
and at least 10 gigabytes of free disk space, you can gitian-build using
LXC running inside a virtual machine.
Here's a description of Gavin's setup on OSX 10.6:
1. Download and install VirtualBox from https://www.virtualbox.org/
2. Download the 64-bit Ubuntu Desktop 12.04 LTS .iso CD image from
http://www.ubuntu.com/
3. Run VirtualBox and create a new virtual machine, using the
Ubuntu .iso (see the VirtualBox documentation for details).
Create it with at least 2 gigabytes of memory and a disk
that is at least 20 gigabytes big.
4. Inside the running Ubuntu desktop, install:
sudo apt-get install debootstrap lxc ruby apache2 git apt-cacher-ng python-vm-builder
5. Still inside Ubuntu, tell gitian-builder to use LXC, then follow the "Once you've got the right
hardware and software" instructions above:
export USE_LXC=1
git clone git://github.com/bitcoin/bitcoin.git
... etc

View File

@@ -1,38 +1,66 @@
--- ---
name: "boost" name: "boost"
suites: suites:
- "lucid" - "precise"
architectures: architectures:
- "i386" - "amd64"
packages: packages:
- "mingw32" - "mingw-w64"
- "g++-mingw-w64"
- "faketime" - "faketime"
- "zip" - "zip"
reference_datetime: "2011-01-30 00:00:00" reference_datetime: "2011-01-30 00:00:00"
remotes: [] remotes: []
files: files:
- "boost_1_49_0.tar.bz2" - "boost_1_55_0.tar.bz2"
- "boost-mingw-gas-cross-compile-2013-03-03.patch"
script: | script: |
TMPDIR="$HOME/tmpdir" # Defines
mkdir -p $TMPDIR/bin/$GBUILD_BITS $TMPDIR/include INSTALLPREFIX="$OUTDIR/staging/boost"
tar xjf boost_1_49_0.tar.bz2 HOST=i686-w64-mingw32
cd boost_1_49_0 # Input Integrity Check
echo "using gcc : 4.4 : i586-mingw32msvc-g++ echo "fff00023dd79486d444c8e29922f4072e1d451fc5a4d2b6075852ead7f2b7b52 boost_1_55_0.tar.bz2" | shasum -c
echo "d2b7f6a1d7051faef3c9cf41a92fa3671d905ef1e1da920d07651a43299f6268 boost-mingw-gas-cross-compile-2013-03-03.patch" | shasum -c
mkdir -p "$INSTALLPREFIX"
tar xjf boost_1_55_0.tar.bz2
cd boost_1_55_0
GCCVERSION=$($HOST-g++ -E -dM $(mktemp --suffix=.h) | grep __VERSION__ | cut -d ' ' -f 3 | cut -d '"' -f 2)
echo "using gcc : $GCCVERSION : $HOST-g++
: :
<rc>i586-mingw32msvc-windres <rc>$HOST-windres
<archiver>i586-mingw32msvc-ar <archiver>$HOST-ar
<cxxflags>-frandom-seed=boost1 <cxxflags>-frandom-seed=boost1
<ranlib>$HOST-ranlib
;" > user-config.jam ;" > user-config.jam
./bootstrap.sh --without-icu ./bootstrap.sh --without-icu
./bjam toolset=gcc target-os=windows threadapi=win32 threading=multi variant=release link=static --user-config=user-config.jam --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged --build-type=complete $MAKEOPTS stage
for lib in chrono date_time exception filesystem graph iostreams math_c99f math_c99l math_c99 math_tr1f math_tr1l math_tr1 prg_exec_monitor program_options random regex serialization signals system test_exec_monitor thread_win32 unit_test_framework wave wserialization; do # Workaround: Upstream boost dev refuses to include patch that would allow Free Software cross-compile toolchain to work
mkdir $lib # This patch was authored by the Fedora package developer and ships in Fedora's mingw32-boost.
(cd $lib ; ar xf ../stage/lib/libboost_${lib}-mt-s.a) # Please obtain the exact patch that matches the above sha256sum from one of the following mirrors.
mv $lib $TMPDIR/bin/$GBUILD_BITS #
done # Read History: https://svn.boost.org/trac/boost/ticket/7262
cp -a boost $TMPDIR/include # History Mirror: http://rose.makesad.us/~paulproteus/mirrors/7262%20Boost.Context%20fails%20to%20build%20using%20MinGW.html
cd $TMPDIR #
# Patch: https://svn.boost.org/trac/boost/raw-attachment/ticket/7262/boost-mingw.patch
# Patch Mirror: http://wtogami.fedorapeople.org/boost-mingw-gas-cross-compile-2013-03-03.patch
# Patch Mirror: http://mindstalk.net/host/boost-mingw-gas-cross-compile-2013-03-03.patch
# Patch Mirror: http://rose.makesad.us/~paulproteus/mirrors/boost-mingw-gas-cross-compile-2013-03-03.patch
patch -p0 < ../boost-mingw-gas-cross-compile-2013-03-03.patch
# Bug Workaround: boost-1.54.0 broke the ability to disable zlib, still broken in 1.55
# https://svn.boost.org/trac/boost/ticket/9156
sed -i 's^\[ ac.check-library /zlib//zlib : <library>/zlib//zlib^^' libs/iostreams/build/Jamfile.v2
sed -i 's^<source>zlib.cpp <source>gzip.cpp \]^^' libs/iostreams/build/Jamfile.v2
# http://statmt.org/~s0565741/software/boost_1_52_0/libs/context/doc/html/context/requirements.html
# Note: Might need these options in the future for 64bit builds.
# "Please note that address-model=64 must be given to bjam command line on 64bit Windows for 64bit build; otherwise 32bit code will be generated."
# "For cross-compiling the lib you must specify certain additional properties at bjam command line: target-os, abi, binary-format, architecture and address-model."
./bjam toolset=gcc binary-format=pe target-os=windows threadapi=win32 threading=multi variant=release link=static --user-config=user-config.jam --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged --build-type=complete --prefix="$INSTALLPREFIX" $MAKEOPTS install
cd "$INSTALLPREFIX"
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
export FAKETIME=$REFERENCE_DATETIME export FAKETIME=$REFERENCE_DATETIME
zip -r boost-win32-1.49.0-gitian2.zip * zip -r boost-win32-1.55.0-gitian-r6.zip *
cp boost-win32-1.49.0-gitian2.zip $OUTDIR cp boost-win32-1.55.0-gitian-r6.zip $OUTDIR

View File

@@ -1,72 +1,93 @@
--- ---
name: "casinocoin-deps" name: "bitcoin-deps"
suites: suites:
- "lucid" - "precise"
architectures: architectures:
- "i386" - "amd64"
packages: packages:
- "mingw32" - "mingw-w64"
- "g++-mingw-w64"
- "git-core" - "git-core"
- "zip" - "zip"
- "faketime" - "faketime"
- "wine"
- "psmisc" - "psmisc"
reference_datetime: "2011-01-30 00:00:00" reference_datetime: "2011-01-30 00:00:00"
remotes: [] remotes: []
files: files:
- "openssl-1.0.1b.tar.gz" - "openssl-1.0.1c.tar.gz"
- "db-4.8.30.NC.tar.gz" - "db-4.8.30.NC.tar.gz"
- "miniupnpc-1.6.tar.gz" - "miniupnpc-1.6.tar.gz"
- "zlib-1.2.7.tar.gz" - "zlib-1.2.6.tar.gz"
- "libpng-1.5.12.tar.gz" - "libpng-1.5.9.tar.gz"
- "qrencode-3.2.0.tar.bz2" - "qrencode-3.2.0.tar.bz2"
script: | script: |
# #
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
export FAKETIME=$REFERENCE_DATETIME export FAKETIME=$REFERENCE_DATETIME
export TZ=UTC export TZ=UTC
export INSTALLPREFIX=$OUTDIR/staging/deps
export HOST=i686-w64-mingw32
# #
tar xzf openssl-1.0.1b.tar.gz mkdir -p $INSTALLPREFIX
cd openssl-1.0.1b
./Configure --cross-compile-prefix=i586-mingw32msvc- mingw tar xzf openssl-1.0.1c.tar.gz
cd openssl-1.0.1c
./Configure --cross-compile-prefix=$HOST- mingw --openssldir=$INSTALLPREFIX
make make
make install_sw
cd .. cd ..
# #
tar xzf db-4.8.30.NC.tar.gz tar xzf db-4.8.30.NC.tar.gz
cd db-4.8.30.NC/build_unix cd db-4.8.30.NC/build_unix
../dist/configure --enable-mingw --enable-cxx --host=i586-mingw32msvc CFLAGS="-I/usr/i586-mingw32msvc/include" ../dist/configure --prefix=$INSTALLPREFIX --enable-mingw --enable-cxx --host=$HOST --disable-shared
make $MAKEOPTS make $MAKEOPTS library_build
make install_lib install_include
cd ../.. cd ../..
# #
tar xzf miniupnpc-1.6.tar.gz tar xzf miniupnpc-1.6.tar.gz
cd miniupnpc-1.6 cd miniupnpc-1.6
sed 's/dllwrap -k --driver-name gcc/$(DLLWRAP) -k --driver-name $(CC)/' -i Makefile.mingw echo "
sed 's|wingenminiupnpcstrings $< $@|./wingenminiupnpcstrings $< $@|' -i Makefile.mingw --- miniupnpc-1.6/Makefile.mingw.orig 2013-09-29 18:52:51.014087958 -1000
make -f Makefile.mingw DLLWRAP=i586-mingw32msvc-dllwrap CC=i586-mingw32msvc-gcc AR=i586-mingw32msvc-ar +++ miniupnpc-1.6/Makefile.mingw 2013-09-29 19:09:29.663318691 -1000
cd .. @@ -67,8 +67,8 @@
mv miniupnpc-1.6 miniupnpc
# wingenminiupnpcstrings.o: wingenminiupnpcstrings.c
tar xzf zlib-1.2.7.tar.gz
cd zlib-1.2.7 -miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings
make -f win32/Makefile.gcc PREFIX=i586-mingw32msvc- $MAKEOPTS - wingenminiupnpcstrings \$< \$@
+miniupnpcstrings.h: miniupnpcstrings.h.in
+ sed -e 's|OS/version|MSWindows/5.1.2600|' -e 's|MINIUPNPC_VERSION_STRING \"version\"|MINIUPNPC_VERSION_STRING \"VERSIONHERE\"|' \$< > \$@
minixml.o: minixml.c minixml.h miniupnpcstrings.h
" | sed "s/VERSIONHERE/$(cat VERSION)/" | patch -p1
mkdir -p dll
make -f Makefile.mingw CC=$HOST-gcc AR=$HOST-ar libminiupnpc.a
install -d $INSTALLPREFIX/include/miniupnpc
install *.h $INSTALLPREFIX/include/miniupnpc
install libminiupnpc.a $INSTALLPREFIX/lib
cd .. cd ..
# #
tar xzf libpng-1.5.12.tar.gz tar xzf zlib-1.2.6.tar.gz
cd libpng-1.5.12 cd zlib-1.2.6
./configure -disable-shared CC=i586-mingw32msvc-cc AR=i586-mingw32msvc-ar STRIP=i586-mingw32msvc-strip RANLIB=i586-mingw32msvc-ranlib OBJDUMP=i586-mingw32msvc-objdump LD=i586-mingw32msvc-ld LDFLAGS="-L../zlib-1.2.7/" CFLAGS="-I../zlib-1.2.7/" CROSS_PREFIX=$HOST- ./configure --prefix=$INSTALLPREFIX --static
make
make install
cd ..
#
tar xzf libpng-1.5.9.tar.gz
cd libpng-1.5.9
CFLAGS="-I$INSTALLPREFIX/include" LDFLAGS="-L$INSTALLPREFIX/lib" ./configure --disable-shared --prefix=$INSTALLPREFIX --host=$HOST
make $MAKEOPTS make $MAKEOPTS
make install
cd .. cd ..
# #
tar xjf qrencode-3.2.0.tar.bz2 tar xjf qrencode-3.2.0.tar.bz2
cd qrencode-3.2.0 cd qrencode-3.2.0
./configure CC=i586-mingw32msvc-cc AR=i586-mingw32msvc-ar STRIP=i586-mingw32msvc-strip RANLIB=i586-mingw32msvc-ranlib OBJDUMP=i586-mingw32msvc-objdump LD=i586-mingw32msvc-ld png_LIBS="../libpng-1.5.12/.libs/libpng15.a ../zlib-1.2.7/libz.a" png_CFLAGS="-I../libpng-1.5.12" png_CFLAGS="-I$INSTALLPREFIX/include" png_LIBS="-L$INSTALLPREFIX/lib -lpng" ./configure --prefix=$INSTALLPREFIX --host=$HOST
make $MAKEOPTS make
make install
cd .. cd ..
# #
zip -r $OUTDIR/casinocoin-deps-0.0.4.zip \ cd $INSTALLPREFIX
$(ls qrencode-*/{qrencode.h,.libs/libqrencode.{,l}a} | sort) \ zip -r $OUTDIR/bitcoin-deps-win32-gitian-r9.zip include lib
$(ls db-*/build_unix/{libdb_cxx.a,db.h,db_cxx.h,libdb.a,.libs/libdb_cxx-?.?.a} | sort) \
$(find openssl-* -name '*.a' -o -name '*.h' | sort) \
$(find miniupnpc -name '*.h' -o -name 'libminiupnpc.a' | sort)
# Kill wine processes as gitian won't figure out we are done otherwise
killall wineserver services.exe explorer.exe winedevice.exe

View File

@@ -1,11 +1,12 @@
--- ---
name: "casinocoin" name: "casinocoin"
suites: suites:
- "lucid" - "precise"
architectures: architectures:
- "i386" - "amd64"
packages: packages:
- "mingw32" - "mingw-w64"
- "g++-mingw-w64"
- "git-core" - "git-core"
- "unzip" - "unzip"
- "nsis" - "nsis"
@@ -15,53 +16,42 @@ remotes:
- "url": "https://github.com/casinocoin-project/casinocoin.git" - "url": "https://github.com/casinocoin-project/casinocoin.git"
"dir": "casinocoin" "dir": "casinocoin"
files: files:
- "qt-win32-4.7.4-gitian.zip" - "qt-win32-4.8.3-gitian-r4.zip"
- "boost-win32-1.49.0-gitian2.zip" - "boost-win32-1.55.0-gitian-r6.zip"
- "casinocoin-deps-0.0.4.zip" - "bitcoin-deps-win32-gitian-r9.zip"
script: | script: |
# #
mkdir $HOME/qt STAGING=$HOME/staging
cd $HOME/qt HOST=i686-w64-mingw32
unzip ../build/qt-win32-4.7.4-gitian.zip #
mkdir -p $STAGING
cd $STAGING
unzip ../build/qt-win32-4.8.3-gitian-r4.zip
unzip ../build/boost-win32-1.55.0-gitian-r6.zip
unzip ../build/bitcoin-deps-win32-gitian-r9.zip
cd $HOME/build/ cd $HOME/build/
export PATH=$PATH:$HOME/qt/bin/
#
mkdir boost_1_49_0
cd boost_1_49_0
mkdir -p stage/lib
unzip ../boost-win32-1.49.0-gitian2.zip
cd bin/$GBUILD_BITS
for lib in *; do
i586-mingw32msvc-ar rc ../../stage/lib/libboost_${lib}-mt-s.a $lib/*.o
i586-mingw32msvc-ranlib ../../stage/lib/libboost_${lib}-mt-s.a
done
cd ../..
mv include/boost .
cd ..
#
unzip casinocoin-deps-0.0.4.zip
#
find -type f | xargs touch --date="$REFERENCE_DATETIME"
# #
cd casinocoin cd casinocoin
export PATH=$STAGING/host/bin:$PATH
mkdir -p $OUTDIR/src mkdir -p $OUTDIR/src
git archive HEAD | tar -x -C $OUTDIR/src git archive HEAD | tar -x -C $OUTDIR/src
cp $OUTDIR/src/doc/README_windows.txt $OUTDIR/readme.txt cp $OUTDIR/src/doc/README_windows.txt $OUTDIR/readme.txt
cp $OUTDIR/src/COPYING $OUTDIR/license.txt cp $OUTDIR/src/COPYING $OUTDIR/COPYING.txt
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
export FAKETIME=$REFERENCE_DATETIME export FAKETIME=$REFERENCE_DATETIME
export TZ=UTC export TZ=UTC
$HOME/qt/src/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/boost_1_49_0/stage/lib BOOST_INCLUDE_PATH=$HOME/build/boost_1_49_0 BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.1b OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.1b/include QRENCODE_LIB_PATH=$HOME/build/qrencode-3.2.0/.libs QRENCODE_INCLUDE_PATH=$HOME/build/qrencode-3.2.0 USE_QRCODE=1 INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin QMAKE_LFLAGS=-frandom-seed=bitcoin USE_BUILD_INFO=1 ln -s $STAGING $HOME/qt
$HOME/staging/host/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$STAGING MINIUPNPC_INCLUDE_PATH=$STAGING BDB_LIB_PATH=$STAGING BDB_INCLUDE_PATH=$STAGING BOOST_LIB_PATH=$STAGING BOOST_INCLUDE_PATH=$STAGING BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$STAGING OPENSSL_INCLUDE_PATH=$STAGING QRENCODE_LIB_PATH=$STAGING QRENCODE_INCLUDE_PATH=$STAGING USE_QRCODE=1 INCLUDEPATH=$STAGING DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=casinocoin USE_BUILD_INFO=1 USE_SSE2=1
make $MAKEOPTS make $MAKEOPTS
i586-mingw32msvc-strip release/casinocoin-qt.exe $HOST-strip release/casinocoin-qt.exe
cp release/casinocoin-qt.exe $OUTDIR/ cp release/casinocoin-qt.exe $OUTDIR/
# #
cd src cd src
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
export FAKETIME=$REFERENCE_DATETIME export FAKETIME=$REFERENCE_DATETIME
export TZ=UTC export TZ=UTC
make -f makefile.linux-mingw $MAKEOPTS DEPSDIR=$HOME/build casinocoind.exe USE_UPNP=0 DEBUGFLAGS="-frandom-seed=casinocoin" make -f makefile.linux-mingw $MAKEOPTS DEPSDIR=$STAGING casinocoind.exe USE_UPNP=0 DEBUGFLAGS="-frandom-seed=casinocoin" USE_SSE2=1
i586-mingw32msvc-strip casinocoind.exe $HOST-strip casinocoind.exe
mkdir $OUTDIR/daemon mkdir $OUTDIR/daemon
cp casinocoind.exe $OUTDIR/daemon cp casinocoind.exe $OUTDIR/daemon
cd .. cd ..

View File

@@ -43,13 +43,13 @@ script: |
cd casinocoin cd casinocoin
mkdir -p $OUTDIR/src mkdir -p $OUTDIR/src
git archive HEAD | tar -x -C $OUTDIR/src git archive HEAD | tar -x -C $OUTDIR/src
cp $OUTDIR/src/doc/README $OUTDIR cp $OUTDIR/src/doc/README.md $OUTDIR
cp $OUTDIR/src/COPYING $OUTDIR cp $OUTDIR/src/COPYING $OUTDIR
cd src cd src
make -f makefile.unix STATIC=1 OPENSSL_INCLUDE_PATH="$INSTDIR/include" OPENSSL_LIB_PATH="$INSTDIR/lib" $MAKEOPTS casinocoind USE_UPNP=0 DEBUGFLAGS= make -f makefile.unix STATIC=1 OPENSSL_INCLUDE_PATH="$INSTDIR/include" OPENSSL_LIB_PATH="$INSTDIR/lib" $MAKEOPTS casinocoind USE_UPNP=0 DEBUGFLAGS= USE_SSE2=1
mkdir -p $OUTDIR/bin/$GBUILD_BITS mkdir -p $OUTDIR/bin/$GBUILD_BITS
install -s casinocoind $OUTDIR/bin/$GBUILD_BITS install -s casinocoind $OUTDIR/bin/$GBUILD_BITS
cd .. cd ..
qmake INCLUDEPATH="$INSTDIR/include" LIBS="-L$INSTDIR/lib" RELEASE=1 USE_QRCODE=1 qmake INCLUDEPATH="$INSTDIR/include" LIBS="-L$INSTDIR/lib" RELEASE=1 USE_QRCODE=1 USE_SSE2=1
make $MAKEOPTS make $MAKEOPTS
install -s casinocoin-qt $OUTDIR/bin/$GBUILD_BITS install casinocoin-qt $OUTDIR/bin/$GBUILD_BITS

View File

@@ -1,54 +1,62 @@
--- ---
name: "qt" name: "qt"
suites: suites:
- "lucid" - "precise"
architectures: architectures:
- "i386" - "amd64"
packages: packages:
- "mingw32" - "mingw-w64"
- "g++-mingw-w64"
- "zip" - "zip"
- "unzip"
- "faketime" - "faketime"
reference_datetime: "2011-01-30 00:00:00" reference_datetime: "2011-01-30 00:00:00"
remotes: [] remotes: []
files: files:
- "qt-everywhere-opensource-src-4.7.4.tar.gz" - "qt-everywhere-opensource-src-4.8.3.tar.gz"
- "bitcoin-deps-win32-gitian-r9.zip"
script: | script: |
INSTDIR="$HOME/qt/"
mkdir $INSTDIR
SRCDIR="$INSTDIR/src/"
mkdir $SRCDIR
# #
tar xzf qt-everywhere-opensource-src-4.7.4.tar.gz HOST=i686-w64-mingw32
cd qt-everywhere-opensource-src-4.7.4 INSTDIR="$HOME/qt/"
#
mkdir $INSTDIR
mkdir -p $INSTDIR/host/bin
#
# Need mingw-compiled openssl from bitcoin-deps:
unzip bitcoin-deps-win32-gitian-r9.zip
DEPSDIR=`pwd`
#
tar xzf qt-everywhere-opensource-src-4.8.3.tar.gz
cd qt-everywhere-opensource-src-4.8.3
sed 's/$TODAY/2011-01-30/' -i configure sed 's/$TODAY/2011-01-30/' -i configure
sed 's/i686-pc-mingw32-/i586-mingw32msvc-/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf sed "s/i686-pc-mingw32-/$HOST-/" -i mkspecs/unsupported/win32-g++-cross/qmake.conf
sed --posix 's|QMAKE_CFLAGS\t\t= -pipe|QMAKE_CFLAGS\t\t= -pipe -isystem /usr/i586-mingw32msvc/include/ -frandom-seed=qtbuild|' -i mkspecs/unsupported/win32-g++-cross/qmake.conf sed --posix "s|QMAKE_CFLAGS\t\t= -pipe|QMAKE_CFLAGS\t\t= -pipe -isystem /usr/$HOST/include/ -frandom-seed=qtbuild|" -i mkspecs/unsupported/win32-g++-cross/qmake.conf
sed 's/QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads/QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf sed 's/QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads/QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf
sed 's/QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads/QMAKE_LFLAGS_EXCEPTIONS_ON = -lmingwthrd/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf sed 's/QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads/QMAKE_LFLAGS_EXCEPTIONS_ON = -lmingwthrd/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf
sed --posix 's/QMAKE_MOC\t\t= i586-mingw32msvc-moc/QMAKE_MOC\t\t= moc/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf sed --posix "s/QMAKE_MOC\t\t= $HOST-moc/QMAKE_MOC\t\t= moc/" -i mkspecs/unsupported/win32-g++-cross/qmake.conf
sed --posix 's/QMAKE_RCC\t\t= i586-mingw32msvc-rcc/QMAKE_RCC\t\t= rcc/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf sed --posix "s/QMAKE_RCC\t\t= $HOST-rcc/QMAKE_RCC\t\t= rcc/" -i mkspecs/unsupported/win32-g++-cross/qmake.conf
sed --posix 's/QMAKE_UIC\t\t= i586-mingw32msvc-uic/QMAKE_UIC\t\t= uic/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf sed --posix "s/QMAKE_UIC\t\t= $HOST-uic/QMAKE_UIC\t\t= uic/" -i mkspecs/unsupported/win32-g++-cross/qmake.conf
# ar adds timestamps to every object file included in the static library # ar adds timestamps to every object file included in the static library
# providing -D as ar argument is supposed to solve it, but doesn't work as qmake strips off the arguments and adds -M to pass a script... # providing -D as ar argument is supposed to solve it, but doesn't work as qmake strips off the arguments and adds -M to pass a script...
# which somehow cannot be combined with other flags. # which somehow cannot be combined with other flags.
# use faketime only for ar, as it confuses make/qmake into hanging sometimes # use faketime only for ar, as it confuses make/qmake into hanging sometimes
sed --posix "s|QMAKE_LIB\t\t= i586-mingw32msvc-ar -ru|QMAKE_LIB\t\t= $HOME/ar -Dr|" -i mkspecs/unsupported/win32-g++-cross/qmake.conf sed --posix "s|QMAKE_LIB\t\t= $HOST-ar -ru|QMAKE_LIB\t\t= $HOME/ar -Dr|" -i mkspecs/unsupported/win32-g++-cross/qmake.conf
echo '#!/bin/bash' > $HOME/ar echo '#!/bin/bash' > $HOME/ar
echo 'export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1' >> $HOME/ar echo 'export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1' >> $HOME/ar
echo 'i586-mingw32msvc-ar "$@"' >> $HOME/ar echo "$HOST-ar \"\$@\"" >> $HOME/ar
chmod +x $HOME/ar chmod +x $HOME/ar
#export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 #export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
export FAKETIME=$REFERENCE_DATETIME export FAKETIME=$REFERENCE_DATETIME
export TZ=UTC export TZ=UTC
./configure -prefix $INSTDIR -confirm-license -release -opensource -static -no-qt3support -xplatform unsupported/win32-g++-cross -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-declarative -no-script -no-scripttools -no-javascript-jit -no-webkit -no-svg -no-xmlpatterns -no-sql-sqlite -no-nis -no-cups -no-iconv -no-dbus -no-gif -no-libtiff -opengl no -nomake examples -nomake demos -nomake docs # Compile static libraries, and use statically linked openssl (-openssl-linked):
OPENSSL_LIBS="-L$DEPSDIR/lib -lssl -lcrypto -lgdi32" ./configure -prefix $INSTDIR -bindir $INSTDIR/host/bin -I $DEPSDIR/include -confirm-license -release -opensource -static -no-qt3support -xplatform unsupported/win32-g++-cross -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-declarative -no-script -no-scripttools -no-javascript-jit -no-webkit -no-svg -no-xmlpatterns -no-sql-sqlite -no-nis -no-cups -no-iconv -no-dbus -no-gif -no-libtiff -no-opengl -nomake examples -nomake demos -nomake docs -no-feature-style-plastique -no-feature-style-cleanlooks -no-feature-style-motif -no-feature-style-cde -no-feature-style-windowsce -no-feature-style-windowsmobile -no-feature-style-s60 -openssl-linked
find . -name *.prl | xargs -l sed 's|/\.||' -i find . -name *.prl | xargs -l sed 's|/\.||' -i
find . -name *.prl | xargs -l sed 's|/$||' -i find . -name *.prl | xargs -l sed 's|/$||' -i
make $MAKEOPTS install make $MAKEOPTS install
cp -a bin $SRCDIR/
cd $INSTDIR cd $INSTDIR
find . -name *.prl | xargs -l sed 's|/$||' -i find . -name *.prl | xargs -l sed 's|/$||' -i
#sed 's|QMAKE_PRL_LIBS.*|QMAKE_PRL_LIBS = -lQtDeclarative -lQtScript -lQtSvg -lQtSql -lQtXmlPatterns -lQtGui -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtNetwork -lQtCore -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32|' -i imports/Qt/labs/particles/qmlparticlesplugin.prl
# as zip stores file timestamps, use faketime to intercept stat calls to set dates for all files to reference date # as zip stores file timestamps, use faketime to intercept stat calls to set dates for all files to reference date
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
zip -r $OUTDIR/qt-win32-4.7.4-gitian.zip * zip -r $OUTDIR/qt-win32-4.8.3-gitian-r4.zip *

View File

@@ -0,0 +1,20 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.13 (GNU/Linux)
mQENBFHHt8wBCADfLkCS9624TrJ4pbFf5Cg88p0Sp7qofcPGjPa6K1Gs9cLfPHLu
EX17YvS9zxdmdlogVDGQ3d82O2OrjDCr26yioZteHsK1oPdzgwQJ5tAGxlv75UiW
BvhaDKXVfX+rdb+wnK3YMhynNQbG6pxQ0Q1Qujh6Xw0b1wbvg2FNEwpfHmL1ZoYd
ba0w6eRmREBMrk50lp8pmDxWjc7+7SdKPxqWsPpWOJTaMBVQNSaVr7ePoCOKwFNI
7CQiqMlGJUG1Zb7CnEkbiwNSwEi0VQkz8Ir8gBFzCTEgt2K1EGO8yo0Mq0hNTRdW
bC14pamlbu/+nx+LAefSJ9sMx7n/uzTjI1uTABEBAAG0LUFudG9uIFllbWVseWFu
b3YgPGFudG9uLnllbWVseWFub3ZAZ21haWwuY29tPokBOQQTAQIAIwUCUce3zAIb
DwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJEKFZZWb4e+YxUwIIAM7DoCnv
lJXX5+z9My0RBIpd99if1udXBVtVxPgaF7lDDIaKY2cBktyXBp/R/G8arYRc9zIK
e+0bY+POpTrfMoTioqbiwoxPwhkXu39KwvPfSWY1UBQHTcMpFibMuFjRu6YrAEZ2
ZH+CrLcmn6rB66uVm3OPE55sKdAL9C+TGIKU/GIRgQzI3S9/DT8E/F4Oifx/V9sh
V2flIXU2QBH4ZOP0G+OTp6QXZRD9TBfmrYRMU+yL5sYMalCjwz79ZZua50CQI5hN
5pEBvHxZ4GziWc5V40GSv1RnM/mGgrdmBlzej34OLjfEac2PCrZy8+FnQf04Lhvn
cRQpj+5V0a6RIfKIRgQQEQIABgUCUciczAAKCRBr3f6OVKKs8dqgAJ94zRvs99HM
pItL1r8v8vS5lXZrHgCfXy5V7AFtL8XvZlPC0uQqdyWKzHo=
=Bp2a
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,75 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.13 (GNU/Linux)
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
Vk4vo5kBKxymtUB8mUtVL19rR0zwINuZ
=f8X6
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,54 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.13 (GNU/Linux)
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
e0T7DjY=
=KQ8d
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -35,4 +35,24 @@ signers:
weight: 40 weight: 40
name: "Wladimir J. van der Laan" name: "Wladimir J. van der Laan"
key: laanwj key: laanwj
AEC1884398647C47413C1C3FB1179EB7347DC10D:
weight: 40
name: "Warren Togami"
key: wtogami
E084FE305BDF0C476F779792657EB016521670C0:
weight: 40
name: "Rama McIntosh"
key: face
1A2511E978239E491A096D0A828AC1F94EF26053:
weight: 40
name: "Charles Lee"
key: coblee
EFDFCBD38FFF68B49160C7D3A1596566F87BE631:
weight: 40
name: "Anton Yemelyanov"
key: aspect
59CAF0E96F23F53747945FD4FE3348877809386C:
weight: 40
name: "Adrian Gallagher"
key: thrasher
minimum_weight: 120 minimum_weight: 120

View File

@@ -0,0 +1,30 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.13 (GNU/Linux)
mQENBFHBpq4BCAClUHF5fvpm1V0dxM1QKenkqeOl7w0EJ2MSZ26nzzH22yVOvwED
5h/7/Lb+o6QyPf/89uEPsPi4paPzgkDPT+CoZAkjKyzWy2YW/m2wHWoXWw1xSJql
qxFogmrq3ZHbjnxYOjAA4KsGpIijbLUAxOaAl5dkOCDEFl0KiKZzrXJNnYlbFef0
fqj10QVW+o5uV9wYH6UMoc2x4yVucpLyJJVy25Qz33dqcG+nYdsT+jAPVG2Fcig/
WlHZ2fQFloH3mThOa6PIHbym1YzjzLRLXH/oobE9RASpdwbsivVTUfq49B7BecKC
uwPRCWnv5es+dfRZrPsoipckB3ZNLQIy618TABEBAAG0MUFkcmlhbiBHYWxsYWdo
ZXIgPHRocmFzaGVyQGFkZGljdGlvbnNvZnR3YXJlLmNvbT6JATgEEwECACIFAlHB
pq4CGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEP4zSId4CThs/5AH/3jY
S6hF3P2IuXfmsO8WGxcZNHx+aTwDcAdpAr4PQ9aZWXbPwBD9cDxbqJkFA604cZfT
2YrL0sRrNXyz9auFTaSxM6nWsGuI60yd2+R+DfRo7irAsJgCG1Tzx5XYOuQXlhqh
Spq4tnv5lNvJczBlijC2G7uX7bUKvPN+AqmqWMuCcS7Pezrb5d0x5JJKQhw4g+ch
Qj8bmD57kFELYq4yXVx7Wraitgn8l+pzRBTVEwAyoyNoeLiGACx8IehFx/P67LFC
tmmCaaN9U7XGX77frhzEgphK9w1rvxdd8Va1F8agAdykcztxyG5tNn1HwwGk+xA5
482nlDKQv6U6thi44Z65AQ0EUcGmrgEIAOGydbByhDehHAFYIRTEkxnd3LGxFR+S
hmyPMCobSCgbYS6SEq9Y1+X9zcvm5dB6lnTglqV3XIznl13RTAIwLwIdLCks4KE/
smhGHMn4/gxddQOSJg+jdSBsIwhFnfU0y5ZOYtXXpkmaUZaMq2cBkgka17nqTsd4
DPYZasErFc/Jlqllwlr4uynLJ1I9FZ2LA9Xzx3thIHByNFXdjxKPD0sT910i3h9A
TJ4Q7sJJ/Ir7okOwrGzGVAWQvMaGj85Fq7XJNLCSd3bXaXAskYlUryJijQAWjhvq
R9mcVZz4TLjI5TyGXatYqE8B/euovYsD8HoRDgVAtsQDimkuS8Xx0R8AEQEAAYkB
HwQYAQIACQUCUcGmrgIbDAAKCRD+M0iHeAk4bHGwB/96uN7K1MVO8dKQeq2avhrH
QZCczGXB/0gRhWNj6njBJMdsfOtPypSqLWuCCN107TRJkig+77lQ8JFhRGo+5QNt
76fQL9a/VFbm1gTsAy3uL4hasHTUIrY7Uq1nDX6poHd25wXWdEBbtiwAoCjp/gid
o69WS5lsga0S2e/IySx6Tel1pUO1hYUhUzSZYVFUjM/ncPJih+VMT/3+kB4iY/Sc
eNTx85gJSnucL+mXDuZTvxXui5tt4zGxSp+POHXBDduZliyxzKr5FTPGXw493DiM
3KggSieIDL6x3BWZR2U97w0iDbGWxS5mMJt+6FNCBJmeK2ooFRT+IJ6zeoXM0z6s
=hamx
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -35,4 +35,24 @@ signers:
weight: 40 weight: 40
name: "Wladimir J. van der Laan" name: "Wladimir J. van der Laan"
key: laanwj key: laanwj
AEC1884398647C47413C1C3FB1179EB7347DC10D:
weight: 40
name: "Warren Togami"
key: wtogami
E084FE305BDF0C476F779792657EB016521670C0:
weight: 40
name: "Rama McIntosh"
key: face
1A2511E978239E491A096D0A828AC1F94EF26053:
weight: 40
name: "Charles Lee"
key: coblee
EFDFCBD38FFF68B49160C7D3A1596566F87BE631:
weight: 40
name: "Anton Yemelyanov"
key: aspect
59CAF0E96F23F53747945FD4FE3348877809386C:
weight: 40
name: "Adrian Gallagher"
key: thrasher
minimum_weight: 120 minimum_weight: 120

View File

@@ -0,0 +1,131 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.13 (GNU/Linux)
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
=icdI
-----END PGP PUBLIC KEY BLOCK-----

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -18,6 +18,7 @@
# #
import subprocess, sys, re, os, shutil, stat, os.path import subprocess, sys, re, os, shutil, stat, os.path
from string import Template
from time import sleep from time import sleep
from argparse import ArgumentParser from argparse import ArgumentParser
@@ -169,7 +170,12 @@ class DeploymentInfo(object):
elif os.path.exists(os.path.join(parentDir, "share", "qt4", "translations")): elif os.path.exists(os.path.join(parentDir, "share", "qt4", "translations")):
# MacPorts layout, e.g. "/opt/local/share/qt4" # MacPorts layout, e.g. "/opt/local/share/qt4"
self.qtPath = os.path.join(parentDir, "share", "qt4") self.qtPath = os.path.join(parentDir, "share", "qt4")
elif os.path.exists(os.path.join(os.path.dirname(parentDir), "share", "qt4", "translations")):
# Newer Macports layout
self.qtPath = os.path.join(os.path.dirname(parentDir), "share", "qt4")
else:
self.qtPath = os.getenv("QTDIR", None)
if self.qtPath is not None: if self.qtPath is not None:
pluginPath = os.path.join(self.qtPath, "plugins") pluginPath = os.path.join(self.qtPath, "plugins")
if os.path.exists(pluginPath): if os.path.exists(pluginPath):
@@ -239,7 +245,11 @@ def runStrip(binaryPath, verbose):
subprocess.check_call(["strip", "-x", binaryPath]) subprocess.check_call(["strip", "-x", binaryPath])
def copyFramework(framework, path, verbose): def copyFramework(framework, path, verbose):
fromPath = framework.sourceFilePath if framework.sourceFilePath.startswith("Qt"):
#standard place for Nokia Qt installer's frameworks
fromPath = "/Library/Frameworks/" + framework.sourceFilePath
else:
fromPath = framework.sourceFilePath
toDir = os.path.join(path, framework.destinationDirectory) toDir = os.path.join(path, framework.destinationDirectory)
toPath = os.path.join(toDir, framework.binaryName) toPath = os.path.join(toDir, framework.binaryName)
@@ -342,7 +352,7 @@ def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose):
if pluginDirectory == "designer": if pluginDirectory == "designer":
# Skip designer plugins # Skip designer plugins
continue continue
elif pluginDirectory == "phonon": elif pluginDirectory == "phonon" or pluginDirectory == "phonon_backend":
# Deploy the phonon plugins only if phonon is in use # Deploy the phonon plugins only if phonon is in use
if not deploymentInfo.usesFramework("phonon"): if not deploymentInfo.usesFramework("phonon"):
continue continue
@@ -420,12 +430,17 @@ ap = ArgumentParser(description="""Improved version of macdeployqt.
Outputs a ready-to-deploy app in a folder "dist" and optionally wraps it in a .dmg file. Outputs a ready-to-deploy app in a folder "dist" and optionally wraps it in a .dmg file.
Note, that the "dist" folder will be deleted before deploying on each run. Note, that the "dist" folder will be deleted before deploying on each run.
Optionally, Qt translation files (.qm) and additional resources can be added to the bundle.""") Optionally, Qt translation files (.qm) and additional resources can be added to the bundle.
Also optionally signs the .app bundle; set the CODESIGNARGS environment variable to pass arguments
to the codesign tool.
E.g. CODESIGNARGS='--sign "Developer ID Application: ..." --keychain /encrypted/foo.keychain'""")
ap.add_argument("app_bundle", nargs=1, metavar="app-bundle", help="application bundle to be deployed") ap.add_argument("app_bundle", nargs=1, metavar="app-bundle", help="application bundle to be deployed")
ap.add_argument("-verbose", type=int, nargs=1, default=[1], metavar="<0-3>", help="0 = no output, 1 = error/warning (default), 2 = normal, 3 = debug") ap.add_argument("-verbose", type=int, nargs=1, default=[1], metavar="<0-3>", help="0 = no output, 1 = error/warning (default), 2 = normal, 3 = debug")
ap.add_argument("-no-plugins", dest="plugins", action="store_false", default=True, help="skip plugin deployment") ap.add_argument("-no-plugins", dest="plugins", action="store_false", default=True, help="skip plugin deployment")
ap.add_argument("-no-strip", dest="strip", action="store_false", default=True, help="don't run 'strip' on the binaries") ap.add_argument("-no-strip", dest="strip", action="store_false", default=True, help="don't run 'strip' on the binaries")
ap.add_argument("-sign", dest="sign", action="store_true", default=False, help="sign .app bundle with codesign tool")
ap.add_argument("-dmg", nargs="?", const="", metavar="basename", help="create a .dmg disk image; if basename is not specified, a camel-cased version of the app name is used") ap.add_argument("-dmg", nargs="?", const="", metavar="basename", help="create a .dmg disk image; if basename is not specified, a camel-cased version of the app name is used")
ap.add_argument("-fancy", nargs=1, metavar="plist", default=[], help="make a fancy looking disk image using the given plist file with instructions; requires -dmg to work") ap.add_argument("-fancy", nargs=1, metavar="plist", default=[], help="make a fancy looking disk image using the given plist file with instructions; requires -dmg to work")
ap.add_argument("-add-qt-tr", nargs=1, metavar="languages", default=[], help="add Qt translation files to the bundle's ressources; the language list must be separated with commas, not with whitespace") ap.add_argument("-add-qt-tr", nargs=1, metavar="languages", default=[], help="add Qt translation files to the bundle's ressources; the language list must be separated with commas, not with whitespace")
@@ -626,6 +641,15 @@ for p in config.add_resources:
# ------------------------------------------------ # ------------------------------------------------
if config.sign and 'CODESIGNARGS' not in os.environ:
print "You must set the CODESIGNARGS environment variable. Skipping signing."
elif config.sign:
if verbose >= 1:
print "Code-signing app bundle %s"%(target,)
subprocess.check_call("codesign --force %s %s"%(os.environ['CODESIGNARGS'], target), shell=True)
# ------------------------------------------------
if config.dmg is not None: if config.dmg is not None:
def runHDIUtil(verb, image_basename, **kwargs): def runHDIUtil(verb, image_basename, **kwargs):
hdiutil_args = ["hdiutil", verb, image_basename + ".dmg"] hdiutil_args = ["hdiutil", verb, image_basename + ".dmg"]
@@ -704,31 +728,68 @@ if config.dmg is not None:
if fancy.get("applications_symlink", False): if fancy.get("applications_symlink", False):
os.symlink("/Applications", os.path.join(disk_root, "Applications")) os.symlink("/Applications", os.path.join(disk_root, "Applications"))
finder = appscript.app("Finder") # The Python appscript package broke with OSX 10.8 and isn't being fixed.
disk = finder.disks[disk_name] # So we now build up an AppleScript string and use the osascript command
disk.open() # to make the .dmg file pretty:
window = disk.container_window appscript = Template( """
window.current_view.set(appscript.k.icon_view) on run argv
window.toolbar_visible.set(False) tell application "Finder"
window.statusbar_visible.set(False) tell disk "$disk"
if fancy.has_key("window_bounds"): open
window.bounds.set(fancy["window_bounds"]) set current view of container window to icon view
view_options = window.icon_view_options set toolbar visible of container window to false
view_options.arrangement.set(appscript.k.not_arranged) set statusbar visible of container window to false
if fancy.has_key("icon_size"): set the bounds of container window to {$window_bounds}
view_options.icon_size.set(fancy["icon_size"]) set theViewOptions to the icon view options of container window
if bg_path is not None: set arrangement of theViewOptions to not arranged
view_options.background_picture.set(disk.files[os.path.basename(bg_path)]) set icon size of theViewOptions to $icon_size
$background_commands
$items_positions
close -- close/reopen works around a bug...
open
update without registering applications
delay 5
eject
end tell
end tell
end run
""")
itemscript = Template('set position of item "${item}" of container window to {${position}}')
items_positions = []
if fancy.has_key("items_position"): if fancy.has_key("items_position"):
for name, position in fancy["items_position"].iteritems(): for name, position in fancy["items_position"].iteritems():
window.items[name].position.set(position) params = { "item" : name, "position" : ",".join([str(p) for p in position]) }
disk.close() items_positions.append(itemscript.substitute(params))
params = {
"disk" : "CasinoCoin-Qt",
"window_bounds" : "300,300,800,620",
"icon_size" : "96",
"background_commands" : "",
"items_positions" : "\n ".join(items_positions)
}
if fancy.has_key("window_bounds"):
params["window.bounds"] = ",".join([str(p) for p in fancy["window_bounds"]])
if fancy.has_key("icon_size"):
params["icon_size"] = str(fancy["icon_size"])
if bg_path is not None: if bg_path is not None:
subprocess.call(["SetFile", "-a", "V", bg_path]) # Set background file, then call SetFile to make it invisible.
disk.update(registering_applications=False) # (note: making it invisible first makes set background picture fail)
sleep(2) bgscript = Template("""set background picture of theViewOptions to file "$bgpic"
disk.eject() do shell script "SetFile -a V /Volumes/$disk/$bgpic" """)
params["background_commands"] = bgscript.substitute({"bgpic" : os.path.basename(bg_path), "disk" : params["disk"]})
s = appscript.substitute(params)
if verbose >= 2:
print("Running AppleScript:")
print(s)
p = subprocess.Popen(['osascript', '-'], stdin=subprocess.PIPE)
p.communicate(input=s)
if p.returncode:
print("Error running osascript.")
if verbose >= 2: if verbose >= 2:
print "+ Finalizing .dmg disk image +" print "+ Finalizing .dmg disk image +"

View File

@@ -5,7 +5,7 @@ Python 2.7 and make it your default Python installation.
You will need the appscript package for the fancy disk image creation to work. You will need the appscript package for the fancy disk image creation to work.
Install it by invoking "sudo easy_install appscript". Install it by invoking "sudo easy_install appscript".
Ths script should be invoked in the target directory like this: This script should be invoked in the target directory like this:
$source_dir/contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy $source_dir/contrib/macdeploy/fancy.plist -verbose 2 $source_dir/contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy $source_dir/contrib/macdeploy/fancy.plist -verbose 2
During the process, the disk image window will pop up briefly where the fancy During the process, the disk image window will pop up briefly where the fancy

View File

@@ -3,7 +3,7 @@
# RPC login details # RPC login details
# #
host=127.0.0.1 host=127.0.0.1
port=8332 port=47970
rpcuser=myusername rpcuser=myusername
rpcpass=mypass rpcpass=mypass

View File

@@ -2,7 +2,7 @@
# #
# Copyright (c) 2011 The Bitcoin developers # Copyright (c) 2011 The Bitcoin developers
# Distributed under the MIT/X11 software license, see the accompanying # Distributed under the MIT/X11 software license, see the accompanying
# file license.txt or http://www.opensource.org/licenses/mit-license.php. # file COPYING or http://www.opensource.org/licenses/mit-license.php.
# #
import time import time
@@ -217,7 +217,7 @@ if __name__ == '__main__':
if 'host' not in settings: if 'host' not in settings:
settings['host'] = '127.0.0.1' settings['host'] = '127.0.0.1'
if 'port' not in settings: if 'port' not in settings:
settings['port'] = 8332 settings['port'] = 47970
if 'threads' not in settings: if 'threads' not in settings:
settings['threads'] = 1 settings['threads'] = 1
if 'hashmeter' not in settings: if 'hashmeter' not in settings:

9
contrib/seeds/README Normal file
View File

@@ -0,0 +1,9 @@
Utility to generate the pnSeed[] array that is compiled into the client
(see src/net.cpp).
The 600 seeds compiled into the 0.8 release were created from sipa's DNS seed data, like this:
curl -s http://bitcoin.sipa.be/seeds.txt | head -1000 | makeseeds.py
The input to makeseeds.py is assumed to be approximately sorted from most-reliable to least-reliable,
with IP:port first on each line (lines that don't match IPv4:port are ignored).

View File

@@ -0,0 +1,32 @@
#!/usr/bin/env python
#
# Generate pnSeed[] from Pieter's DNS seeder
#
NSEEDS=600
import re
import sys
from subprocess import check_output
def main():
lines = sys.stdin.readlines()
ips = []
pattern = re.compile(r"^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}):47950")
for line in lines:
m = pattern.match(line)
if m is None:
continue
ip = 0
for i in range(0,4):
ip = ip + (int(m.group(i+1)) << (8*(i)))
if ip == 0:
continue
ips.append(ip)
for row in range(0, min(NSEEDS,len(ips)), 8):
print " " + ", ".join([ "0x%08x"%i for i in ips[row:row+8] ]) + ","
if __name__ == '__main__':
main()

32
contrib/spendfrom/README Normal file
View File

@@ -0,0 +1,32 @@
Use the raw transactions API to send coins received on a particular
address (or addresses).
Depends on jsonrpc
Usage:
spendfrom.py --from=FROMADDRESS1[,FROMADDRESS2] --to=TOADDRESS --amount=amount \
--fee=fee --datadir=/path/to/.bitcoin --testnet --dry_run
With no arguments, outputs a list of amounts associated with addresses.
With arguments, sends coins received by the FROMADDRESS addresses to the TOADDRESS.
You may explictly specify how much fee to pay (a fee more than 1% of the amount
will fail, though, to prevent bitcoin-losing accidents). Spendfrom may fail if
it thinks the transaction would never be confirmed (if the amount being sent is
too small, or if the transaction is too many bytes for the fee).
If a change output needs to be created, the change will be sent to the last
FROMADDRESS (if you specify just one FROMADDRESS, change will go back to it).
If --datadir is not specified, the default datadir is used.
The --dry_run option will just create and sign the the transaction and print
the transaction data (as hexadecimal), instead of broadcasting it.
If the transaction is created and broadcast successfully, a transaction id
is printed.
If this was a tool for end-users and not programmers, it would have much friendlier
error-handling.

View File

@@ -0,0 +1,9 @@
from distutils.core import setup
setup(name='btcspendfrom',
version='1.0',
description='Command-line utility for bitcoin "coin control"',
author='Gavin Andresen',
author_email='gavin@bitcoinfoundation.org',
requires=['jsonrpc'],
scripts=['spendfrom.py'],
)

View File

@@ -0,0 +1,267 @@
#!/usr/bin/env python
#
# Use the raw transactions API to spend bitcoins received on particular addresses,
# and send any change back to that same address.
#
# Example usage:
# spendfrom.py # Lists available funds
# spendfrom.py --from=ADDRESS --to=ADDRESS --amount=11.00
#
# Assumes it will talk to a bitcoind or Bitcoin-Qt running
# on localhost.
#
# Depends on jsonrpc
#
from decimal import *
import getpass
import math
import os
import os.path
import platform
import sys
import time
from jsonrpc import ServiceProxy, json
BASE_FEE=Decimal("0.001")
def check_json_precision():
"""Make sure json library being used does not lose precision converting BTC values"""
n = Decimal("20000000.00000003")
satoshis = int(json.loads(json.dumps(float(n)))*1.0e8)
if satoshis != 2000000000000003:
raise RuntimeError("JSON encode/decode loses precision")
def determine_db_dir():
"""Return the default location of the bitcoin data directory"""
if platform.system() == "Darwin":
return os.path.expanduser("~/Library/Application Support/Bitcoin/")
elif platform.system() == "Windows":
return os.path.join(os.environ['APPDATA'], "Bitcoin")
return os.path.expanduser("~/.bitcoin")
def read_bitcoin_config(dbdir):
"""Read the bitcoin.conf file from dbdir, returns dictionary of settings"""
from ConfigParser import SafeConfigParser
class FakeSecHead(object):
def __init__(self, fp):
self.fp = fp
self.sechead = '[all]\n'
def readline(self):
if self.sechead:
try: return self.sechead
finally: self.sechead = None
else:
s = self.fp.readline()
if s.find('#') != -1:
s = s[0:s.find('#')].strip() +"\n"
return s
config_parser = SafeConfigParser()
config_parser.readfp(FakeSecHead(open(os.path.join(dbdir, "bitcoin.conf"))))
return dict(config_parser.items("all"))
def connect_JSON(config):
"""Connect to a bitcoin JSON-RPC server"""
testnet = config.get('testnet', '0')
testnet = (int(testnet) > 0) # 0/1 in config file, convert to True/False
if not 'rpcport' in config:
config['rpcport'] = 17970 if testnet else 47970
connect = "http://%s:%s@127.0.0.1:%s"%(config['rpcuser'], config['rpcpassword'], config['rpcport'])
try:
result = ServiceProxy(connect)
# ServiceProxy is lazy-connect, so send an RPC command mostly to catch connection errors,
# but also make sure the bitcoind we're talking to is/isn't testnet:
if result.getmininginfo()['testnet'] != testnet:
sys.stderr.write("RPC server at "+connect+" testnet setting mismatch\n")
sys.exit(1)
return result
except:
sys.stderr.write("Error connecting to RPC server at "+connect+"\n")
sys.exit(1)
def unlock_wallet(bitcoind):
info = bitcoind.getinfo()
if 'unlocked_until' not in info:
return True # wallet is not encrypted
t = int(info['unlocked_until'])
if t <= time.time():
try:
passphrase = getpass.getpass("Wallet is locked; enter passphrase: ")
bitcoind.walletpassphrase(passphrase, 5)
except:
sys.stderr.write("Wrong passphrase\n")
info = bitcoind.getinfo()
return int(info['unlocked_until']) > time.time()
def list_available(bitcoind):
address_summary = dict()
address_to_account = dict()
for info in bitcoind.listreceivedbyaddress(0):
address_to_account[info["address"]] = info["account"]
unspent = bitcoind.listunspent(0)
for output in unspent:
# listunspent doesn't give addresses, so:
rawtx = bitcoind.getrawtransaction(output['txid'], 1)
vout = rawtx["vout"][output['vout']]
pk = vout["scriptPubKey"]
# This code only deals with ordinary pay-to-bitcoin-address
# or pay-to-script-hash outputs right now; anything exotic is ignored.
if pk["type"] != "pubkeyhash" and pk["type"] != "scripthash":
continue
address = pk["addresses"][0]
if address in address_summary:
address_summary[address]["total"] += vout["value"]
address_summary[address]["outputs"].append(output)
else:
address_summary[address] = {
"total" : vout["value"],
"outputs" : [output],
"account" : address_to_account.get(address, "")
}
return address_summary
def select_coins(needed, inputs):
# Feel free to improve this, this is good enough for my simple needs:
outputs = []
have = Decimal("0.0")
n = 0
while have < needed and n < len(inputs):
outputs.append({ "txid":inputs[n]["txid"], "vout":inputs[n]["vout"]})
have += inputs[n]["amount"]
n += 1
return (outputs, have-needed)
def create_tx(bitcoind, fromaddresses, toaddress, amount, fee):
all_coins = list_available(bitcoind)
total_available = Decimal("0.0")
needed = amount+fee
potential_inputs = []
for addr in fromaddresses:
if addr not in all_coins:
continue
potential_inputs.extend(all_coins[addr]["outputs"])
total_available += all_coins[addr]["total"]
if total_available < needed:
sys.stderr.write("Error, only %f BTC available, need %f\n"%(total_available, needed));
sys.exit(1)
#
# Note:
# Python's json/jsonrpc modules have inconsistent support for Decimal numbers.
# Instead of wrestling with getting json.dumps() (used by jsonrpc) to encode
# Decimals, I'm casting amounts to float before sending them to bitcoind.
#
outputs = { toaddress : float(amount) }
(inputs, change_amount) = select_coins(needed, potential_inputs)
if change_amount > BASE_FEE: # don't bother with zero or tiny change
change_address = fromaddresses[-1]
if change_address in outputs:
outputs[change_address] += float(change_amount)
else:
outputs[change_address] = float(change_amount)
rawtx = bitcoind.createrawtransaction(inputs, outputs)
signed_rawtx = bitcoind.signrawtransaction(rawtx)
if not signed_rawtx["complete"]:
sys.stderr.write("signrawtransaction failed\n")
sys.exit(1)
txdata = signed_rawtx["hex"]
return txdata
def compute_amount_in(bitcoind, txinfo):
result = Decimal("0.0")
for vin in txinfo['vin']:
in_info = bitcoind.getrawtransaction(vin['txid'], 1)
vout = in_info['vout'][vin['vout']]
result = result + vout['value']
return result
def compute_amount_out(txinfo):
result = Decimal("0.0")
for vout in txinfo['vout']:
result = result + vout['value']
return result
def sanity_test_fee(bitcoind, txdata_hex, max_fee):
class FeeError(RuntimeError):
pass
try:
txinfo = bitcoind.decoderawtransaction(txdata_hex)
total_in = compute_amount_in(bitcoind, txinfo)
total_out = compute_amount_out(txinfo)
if total_in-total_out > max_fee:
raise FeeError("Rejecting transaction, unreasonable fee of "+str(total_in-total_out))
tx_size = len(txdata_hex)/2
kb = tx_size/1000 # integer division rounds down
if kb > 1 and fee < BASE_FEE:
raise FeeError("Rejecting no-fee transaction, larger than 1000 bytes")
if total_in < 0.01 and fee < BASE_FEE:
raise FeeError("Rejecting no-fee, tiny-amount transaction")
# Exercise for the reader: compute transaction priority, and
# warn if this is a very-low-priority transaction
except FeeError as err:
sys.stderr.write((str(err)+"\n"))
sys.exit(1)
def main():
import optparse
parser = optparse.OptionParser(usage="%prog [options]")
parser.add_option("--from", dest="fromaddresses", default=None,
help="addresses to get bitcoins from")
parser.add_option("--to", dest="to", default=None,
help="address to get send bitcoins to")
parser.add_option("--amount", dest="amount", default=None,
help="amount to send")
parser.add_option("--fee", dest="fee", default="0.0",
help="fee to include")
parser.add_option("--datadir", dest="datadir", default=determine_db_dir(),
help="location of bitcoin.conf file with RPC username/password (default: %default)")
parser.add_option("--testnet", dest="testnet", default=False, action="store_true",
help="Use the test network")
parser.add_option("--dry_run", dest="dry_run", default=False, action="store_true",
help="Don't broadcast the transaction, just create and print the transaction data")
(options, args) = parser.parse_args()
check_json_precision()
config = read_bitcoin_config(options.datadir)
if options.testnet: config['testnet'] = True
bitcoind = connect_JSON(config)
if options.amount is None:
address_summary = list_available(bitcoind)
for address,info in address_summary.iteritems():
n_transactions = len(info['outputs'])
if n_transactions > 1:
print("%s %.8f %s (%d transactions)"%(address, info['total'], info['account'], n_transactions))
else:
print("%s %.8f %s"%(address, info['total'], info['account']))
else:
fee = Decimal(options.fee)
amount = Decimal(options.amount)
while unlock_wallet(bitcoind) == False:
pass # Keep asking for passphrase until they get it right
txdata = create_tx(bitcoind, options.fromaddresses.split(","), options.to, amount, fee)
sanity_test_fee(bitcoind, txdata, amount*Decimal("0.01"))
if options.dry_run:
print(txdata)
else:
txid = bitcoind.sendrawtransaction(txdata)
print(txid)
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,4 @@
These patches are applied when the automated pull-tester
tests each pull and when master is tested using jenkins.
You can find more information about the tests run at
http://jenkins.bluematt.me/pull-tester/files/

1
contrib/testgen/README Normal file
View File

@@ -0,0 +1 @@
Utilities to generate test vectors for the data-driven Bitcoin tests

104
contrib/testgen/base58.py Normal file
View File

@@ -0,0 +1,104 @@
'''
Bitcoin base58 encoding and decoding.
Based on https://bitcointalk.org/index.php?topic=1026.0 (public domain)
'''
import hashlib
# for compatibility with following code...
class SHA256:
new = hashlib.sha256
if str != bytes:
# Python 3.x
def ord(c):
return c
def chr(n):
return bytes( (n,) )
__b58chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
__b58base = len(__b58chars)
b58chars = __b58chars
def b58encode(v):
""" encode v, which is a string of bytes, to base58.
"""
long_value = 0
for (i, c) in enumerate(v[::-1]):
long_value += (256**i) * ord(c)
result = ''
while long_value >= __b58base:
div, mod = divmod(long_value, __b58base)
result = __b58chars[mod] + result
long_value = div
result = __b58chars[long_value] + result
# Bitcoin does a little leading-zero-compression:
# leading 0-bytes in the input become leading-1s
nPad = 0
for c in v:
if c == '\0': nPad += 1
else: break
return (__b58chars[0]*nPad) + result
def b58decode(v, length = None):
""" decode v into a string of len bytes
"""
long_value = 0
for (i, c) in enumerate(v[::-1]):
long_value += __b58chars.find(c) * (__b58base**i)
result = bytes()
while long_value >= 256:
div, mod = divmod(long_value, 256)
result = chr(mod) + result
long_value = div
result = chr(long_value) + result
nPad = 0
for c in v:
if c == __b58chars[0]: nPad += 1
else: break
result = chr(0)*nPad + result
if length is not None and len(result) != length:
return None
return result
def checksum(v):
"""Return 32-bit checksum based on SHA256"""
return SHA256.new(SHA256.new(v).digest()).digest()[0:4]
def b58encode_chk(v):
"""b58encode a string, with 32-bit checksum"""
return b58encode(v + checksum(v))
def b58decode_chk(v):
"""decode a base58 string, check and remove checksum"""
result = b58decode(v)
if result is None:
return None
h3 = checksum(result[:-4])
if result[-4:] == checksum(result[:-4]):
return result[:-4]
else:
return None
def get_bcaddress_version(strAddress):
""" Returns None if strAddress is invalid. Otherwise returns integer version of address. """
addr = b58decode_chk(strAddress)
if addr is None or len(addr)!=21: return None
version = addr[0]
return ord(version)
if __name__ == '__main__':
# Test case (from http://gitorious.org/bitcoin/python-base58.git)
assert get_bcaddress_version('15VjRaDX9zpbA8LVnbrCAFzrVzN7ixHNsC') is 0
_ohai = 'o hai'.encode('ascii')
_tmp = b58encode(_ohai)
assert _tmp == 'DYB3oMS'
assert b58decode(_tmp, 5) == _ohai
print("Tests passed")

View File

@@ -0,0 +1,126 @@
#!/usr/bin/env python
'''
Generate valid and invalid base58 address and private key test vectors.
Usage:
gen_base58_test_vectors.py valid 50 > ../../src/test/data/base58_keys_valid.json
gen_base58_test_vectors.py invalid 50 > ../../src/test/data/base58_keys_invalid.json
'''
# 2012 Wladimir J. van der Laan
# Released under MIT License
import os
from itertools import islice
from base58 import b58encode, b58decode, b58encode_chk, b58decode_chk, b58chars
import random
from binascii import b2a_hex
# key types
PUBKEY_ADDRESS = 48
SCRIPT_ADDRESS = 5
PUBKEY_ADDRESS_TEST = 111
SCRIPT_ADDRESS_TEST = 196
PRIVKEY = 176
PRIVKEY_TEST = 239
metadata_keys = ['isPrivkey', 'isTestnet', 'addrType', 'isCompressed']
# templates for valid sequences
templates = [
# prefix, payload_size, suffix, metadata
# None = N/A
((PUBKEY_ADDRESS,), 20, (), (False, False, 'pubkey', None)),
((SCRIPT_ADDRESS,), 20, (), (False, False, 'script', None)),
((PUBKEY_ADDRESS_TEST,), 20, (), (False, True, 'pubkey', None)),
((SCRIPT_ADDRESS_TEST,), 20, (), (False, True, 'script', None)),
((PRIVKEY,), 32, (), (True, False, None, False)),
((PRIVKEY,), 32, (1,), (True, False, None, True)),
((PRIVKEY_TEST,), 32, (), (True, True, None, False)),
((PRIVKEY_TEST,), 32, (1,), (True, True, None, True))
]
def is_valid(v):
'''Check vector v for validity'''
result = b58decode_chk(v)
if result is None:
return False
valid = False
for template in templates:
prefix = str(bytearray(template[0]))
suffix = str(bytearray(template[2]))
if result.startswith(prefix) and result.endswith(suffix):
if (len(result) - len(prefix) - len(suffix)) == template[1]:
return True
return False
def gen_valid_vectors():
'''Generate valid test vectors'''
while True:
for template in templates:
prefix = str(bytearray(template[0]))
payload = os.urandom(template[1])
suffix = str(bytearray(template[2]))
rv = b58encode_chk(prefix + payload + suffix)
assert is_valid(rv)
metadata = dict([(x,y) for (x,y) in zip(metadata_keys,template[3]) if y is not None])
yield (rv, b2a_hex(payload), metadata)
def gen_invalid_vector(template, corrupt_prefix, randomize_payload_size, corrupt_suffix):
'''Generate possibly invalid vector'''
if corrupt_prefix:
prefix = os.urandom(1)
else:
prefix = str(bytearray(template[0]))
if randomize_payload_size:
payload = os.urandom(max(int(random.expovariate(0.5)), 50))
else:
payload = os.urandom(template[1])
if corrupt_suffix:
suffix = os.urandom(len(template[2]))
else:
suffix = str(bytearray(template[2]))
return b58encode_chk(prefix + payload + suffix)
def randbool(p = 0.5):
'''Return True with P(p)'''
return random.random() < p
def gen_invalid_vectors():
'''Generate invalid test vectors'''
# start with some manual edge-cases
yield "",
yield "x",
while True:
# kinds of invalid vectors:
# invalid prefix
# invalid payload length
# invalid (randomized) suffix (add random data)
# corrupt checksum
for template in templates:
val = gen_invalid_vector(template, randbool(0.2), randbool(0.2), randbool(0.2))
if random.randint(0,10)<1: # line corruption
if randbool(): # add random character to end
val += random.choice(b58chars)
else: # replace random character in the middle
n = random.randint(0, len(val))
val = val[0:n] + random.choice(b58chars) + val[n+1:]
if not is_valid(val):
yield val,
if __name__ == '__main__':
import sys, json
iters = {'valid':gen_valid_vectors, 'invalid':gen_invalid_vectors}
try:
uiter = iters[sys.argv[1]]
except IndexError:
uiter = gen_valid_vectors
try:
count = int(sys.argv[2])
except IndexError:
count = 0
data = list(islice(uiter(), count))
json.dump(data, sys.stdout, sort_keys=True, indent=4)
sys.stdout.write('\n')

59
contrib/tidy_datadir.sh Normal file
View File

@@ -0,0 +1,59 @@
#!/bin/bash
if [ -d "$1" ]; then
cd "$1"
else
echo "Usage: $0 <datadir>" >&2
echo "Removes obsolete Bitcoin database files" >&2
exit 1
fi
LEVEL=0
if [ -f wallet.dat -a -f addr.dat -a -f blkindex.dat -a -f blk0001.dat ]; then LEVEL=1; fi
if [ -f wallet.dat -a -f peers.dat -a -f blkindex.dat -a -f blk0001.dat ]; then LEVEL=2; fi
if [ -f wallet.dat -a -f peers.dat -a -f coins/CURRENT -a -f blktree/CURRENT -a -f blocks/blk00000.dat ]; then LEVEL=3; fi
if [ -f wallet.dat -a -f peers.dat -a -f chainstate/CURRENT -a -f blocks/index/CURRENT -a -f blocks/blk00000.dat ]; then LEVEL=4; fi
case $LEVEL in
0)
echo "Error: no Bitcoin datadir detected."
exit 1
;;
1)
echo "Detected old Bitcoin datadir (before 0.7)."
echo "Nothing to do."
exit 0
;;
2)
echo "Detected Bitcoin 0.7 datadir."
;;
3)
echo "Detected Bitcoin pre-0.8 datadir."
;;
4)
echo "Detected Bitcoin 0.8 datadir."
;;
esac
FILES=""
DIRS=""
if [ $LEVEL -ge 3 ]; then FILES=$(echo $FILES blk????.dat blkindex.dat); fi
if [ $LEVEL -ge 2 ]; then FILES=$(echo $FILES addr.dat); fi
if [ $LEVEL -ge 4 ]; then DIRS=$(echo $DIRS coins blktree); fi
for FILE in $FILES; do
if [ -f $FILE ]; then
echo "Deleting: $FILE"
rm -f $FILE
fi
done
for DIR in $DIRS; do
if [ -d $DIR ]; then
echo "Deleting: $DIR/"
rm -rf $DIR
fi
done
echo "Done."

View File

@@ -0,0 +1,96 @@
10
dir
114
svn://svn.greyhatapps.com/repos/projects/casinocoin/contrib/wallettools
svn://svn.greyhatapps.com/repos/projects
2013-07-03T07:48:00.318239Z
64
nam
svn:special svn:externals svn:needs-lock
1324ab70-8081-43f4-a012-72ad25adf38d
walletchangepass.py
file
2013-06-25T14:29:02.000000Z
55504fcb6f0cc00002491d0f84ab69a6
2013-07-03T07:48:00.318239Z
64
nam
219
walletunlock.py
file
2013-06-25T14:29:02.000000Z
fc0493c5e7b1aaf7554a8220b134f65b
2013-07-03T07:48:00.318239Z
64
nam
157

View File

@@ -0,0 +1,5 @@
from jsonrpc import ServiceProxy
access = ServiceProxy("http://127.0.0.1:8332")
pwd = raw_input("Enter old wallet passphrase: ")
pwd2 = raw_input("Enter new wallet passphrase: ")
access.walletpassphrasechange(pwd, pwd2)

View File

@@ -0,0 +1,4 @@
from jsonrpc import ServiceProxy
access = ServiceProxy("http://127.0.0.1:8332")
pwd = raw_input("Enter wallet passphrase: ")
access.walletpassphrase(pwd, 60)

View File

@@ -1,5 +1,5 @@
from jsonrpc import ServiceProxy from jsonrpc import ServiceProxy
access = ServiceProxy("http://127.0.0.1:8332") access = ServiceProxy("http://127.0.0.1:47970")
pwd = raw_input("Enter old wallet passphrase: ") pwd = raw_input("Enter old wallet passphrase: ")
pwd2 = raw_input("Enter new wallet passphrase: ") pwd2 = raw_input("Enter new wallet passphrase: ")
access.walletpassphrasechange(pwd, pwd2) access.walletpassphrasechange(pwd, pwd2)

View File

@@ -1,4 +1,4 @@
from jsonrpc import ServiceProxy from jsonrpc import ServiceProxy
access = ServiceProxy("http://127.0.0.1:8332") access = ServiceProxy("http://127.0.0.1:47970")
pwd = raw_input("Enter wallet passphrase: ") pwd = raw_input("Enter wallet passphrase: ")
access.walletpassphrase(pwd, 60) access.walletpassphrase(pwd, 60)

View File

@@ -28,7 +28,7 @@ DOXYFILE_ENCODING = UTF-8
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded # The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# by quotes) that should identify the project. # by quotes) that should identify the project.
PROJECT_NAME = Bitcoin PROJECT_NAME = CasinoCoin
# The PROJECT_NUMBER tag can be used to enter a project or revision number. # The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or # This could be handy for archiving the generated documentation or
@@ -203,7 +203,7 @@ TAB_SIZE = 8
# For example adding "sideeffect=\par Side Effects:\n" will allow you to # For example adding "sideeffect=\par Side Effects:\n" will allow you to
# put the command \sideeffect (or @sideeffect) in the documentation, which # put the command \sideeffect (or @sideeffect) in the documentation, which
# will result in a user-defined paragraph with heading "Side Effects:". # will result in a user-defined paragraph with heading "Side Effects:".
# You can put \n's in the value part of an alias to insert newlines. # You can put \n in the value part of an alias to insert newlines.
ALIASES = ALIASES =

47
doc/README.md Normal file
View File

@@ -0,0 +1,47 @@
CasinoCoin 0.8.x BETA
====================
Copyright (c) 2009-2013 Bitcoin Developers
Copyright (c) 2011-2013 CasinoCoin Developers
Distributed under the MIT/X11 software license, see the accompanying
file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](http://www.openssl.org/). This product includes
cryptographic software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard.
Intro
---------------------
CasinoCoin is a free open source peer-to-peer electronic cash system that is
completely decentralized, without the need for a central server or trusted
parties. Users hold the crypto keys to their own money and transact directly
with each other, with the help of a P2P network to check for double-spending.
Setup
---------------------
You need the Qt4 run-time libraries to run CasinoCoin-Qt. On Debian or Ubuntu:
`sudo apt-get install libqtgui4`
Unpack the files into a directory and run:
- bin/32/casinocoin-qt (GUI, 32-bit)
- bin/32/casinocoind (headless, 32-bit)
- bin/64/casinocoin-qt (GUI, 64-bit)
- bin/64/casinocoind (headless, 64-bit)
See the documentation at the [CasinoCoin Wiki](http://casinocoin.info)
for help and more information.
Other Pages
---------------------
- [Unix Build Notes](build-unix.md)
- [OSX Build Notes](build-osx.md)
- [Windows Build Notes](build-msw.md)
- [Coding Guidelines](coding.md)
- [Release Process](release-process.md)
- [Release Notes](release-notes.md)
- [Multiwallet Qt Development](multiwallet-qt.md)
- [Unit Tests](unit-tests.md)
- [Translation Process](translation_process.md)

View File

@@ -1,8 +1,7 @@
CasinoCoin 0.6 BETA CasinoCoin 0.8.x BETA
Copyright (c) 2009-2012 Bitcoin Developers Copyright (c) 2009-2013 Bitcoin Developers
Copyright (c) 2011-2012 Litecoin Developers Copyright (c) 2011-2013 CasinoCoin Developers
Copyright (c) 2013 CasinoCoin Developers
Distributed under the MIT/X11 software license, see the accompanying Distributed under the MIT/X11 software license, see the accompanying
file COPYING or http://www.opensource.org/licenses/mit-license.php. file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in This product includes software developed by the OpenSSL Project for use in
@@ -22,16 +21,8 @@ Setup
----- -----
Unpack the files into a directory and run casinocoin-qt.exe. Unpack the files into a directory and run casinocoin-qt.exe.
If you have Microsoft Security Essentials, you need to add casinocoin-qt.exe to its CasinoCoin-Qt is the original CasinoCoin client and it builds the backbone of the network.
"Excluded processes" list. Microsoft Security Essentials->Settings tab, However, it downloads and stores the entire history of CasinoCoin transactions;
select Excluded processes, press Add, select casinocoin-qt.exe, OK, Save changes. depending on the speed of your computer and network connection, the synchronization
process can take anywhere from a few hours to a day or more.
The software automatically finds other nodes to connect to. You can
enable Universal Plug and Play using a menu entry or set your firewall
to forward port 9333 (TCP) to your computer so you can receive
incoming connections. CasinoCoin works without incoming connections,
but allowing incoming connections helps the CasinoCoin network.
See the bitcoin wiki at:
https://en.bitcoin.it/wiki/Main_Page
for more help and information.

View File

@@ -1,19 +1,19 @@
TOR SUPPORT IN BITCOIN TOR SUPPORT IN BITCOIN
====================== ======================
It is possible to run Bitcoin as a Tor hidden service, and connect to such services. It is possible to run CasinoCoin as a Tor hidden service, and connect to such services.
The following assumes you have a Tor proxy running on port 9050. Many distributions The following directions assume you have a Tor proxy running on port 9050. Many distributions
default to having a SOCKS proxy listening on port 9050, but others may not. default to having a SOCKS proxy listening on port 9050, but others may not.
In particular, the Tor Browser Bundle defaults to listening on a random port. See In particular, the Tor Browser Bundle defaults to listening on a random port. See
https://www.torproject.org/docs/faq.html.en#TBBSocksPort for how to properly https://www.torproject.org/docs/faq.html.en#TBBSocksPort for how to properly
configure Tor. configure Tor.
1. Run bitcoin behind a Tor proxy 1. Run casinocoin behind a Tor proxy
--------------------------------- ---------------------------------
The first step is running Bitcoin behind a Tor proxy. This will already make all The first step is running CasinoCoin behind a Tor proxy. This will already make all
outgoing connections be anonimized, but more is possible. outgoing connections be anonimized, but more is possible.
-socks=5 SOCKS5 supports connecting-to-hostname, which can be used instead -socks=5 SOCKS5 supports connecting-to-hostname, which can be used instead
@@ -28,10 +28,6 @@ outgoing connections be anonimized, but more is possible.
need to set this if it's the same as -proxy. You can use -notor need to set this if it's the same as -proxy. You can use -notor
to explicitly disable access to hidden service. to explicitly disable access to hidden service.
-dnsseed DNS seeds are not resolved directly when a SOCKS5 proxy server is
set. Rather, a short-lived proxy connection to the dns seed
hostname is attempted, and peer addresses are requested.
-listen When using -proxy, listening is disabled by default. If you want -listen When using -proxy, listening is disabled by default. If you want
to run a hidden service (see next section), you'll need to enable to run a hidden service (see next section), you'll need to enable
it explicitly. it explicitly.
@@ -43,26 +39,26 @@ outgoing connections be anonimized, but more is possible.
In a typical situation, this suffices to run behind a Tor proxy: In a typical situation, this suffices to run behind a Tor proxy:
./bitcoin -proxy=127.0.0.1:9050 ./casinocoind -proxy=127.0.0.1:9050
2. Run a bitcoin hidden server 2. Run a casinocoin hidden server
------------------------------ ------------------------------
If you configure your Tor system accordingly, it is possible to make your node also If you configure your Tor system accordingly, it is possible to make your node also
reachable from the Tor network. Add these lines to your /etc/tor/torrc (or equivalent reachable from the Tor network. Add these lines to your /etc/tor/torrc (or equivalent
config file): config file):
HiddenServiceDir /var/lib/tor/bitcoin-service/ HiddenServiceDir /var/lib/tor/casinocoin-service/
HiddenServicePort 9333 127.0.0.1:9333 HiddenServicePort 47950 127.0.0.1:47950
The directory can be different of course, but (both) 9333's should be equal to your The directory can be different of course, but (both) port numbers should be equal to
bitcoind's P2P listen port (9333 by default). your casinocoind's P2P listen port (47950 by default).
-externalip=X You can tell bitcoin about its publicly reachable address using -externalip=X You can tell casinocoin about its publicly reachable address using
this option, and this can be a .onion address. Given the above this option, and this can be a .onion address. Given the above
configuration, you can find your onion address in configuration, you can find your onion address in
/var/lib/tor/bitcoin-service/hostname. Onion addresses are given /var/lib/tor/casinocoin-service/hostname. Onion addresses are given
preference for your node to advertize itself with, for connections preference for your node to advertize itself with, for connections
coming from unroutable addresses (such as 127.0.0.1, where the coming from unroutable addresses (such as 127.0.0.1, where the
Tor proxy typically runs). Tor proxy typically runs).
@@ -79,18 +75,18 @@ bitcoind's P2P listen port (9333 by default).
In a typical situation, where you're only reachable via Tor, this should suffice: In a typical situation, where you're only reachable via Tor, this should suffice:
./bitcoind -proxy=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -listen ./casinocoind -proxy=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -listen
(obviously replace the Onion address with your own). If you don't care too much (obviously, replace the Onion address with your own). If you don't care too much
about hiding your node, and want to be reachable on IPv4 as well, additionally about hiding your node, and want to be reachable on IPv4 as well, additionally
specify: specify:
./bitcoind ... -discover ./casinocoind ... -discover
and open port 9333 on your firewall (or use -upnp). and open port 47950 on your firewall (or use -upnp).
If you only want to use Tor to reach onion addresses, but not use it as a proxy If you only want to use Tor to reach onion addresses, but not use it as a proxy
for normal IPv4/IPv6 communication, use: for normal IPv4/IPv6 communication, use:
./bitcoin -tor=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -discover ./casinocoind -tor=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -discover

View File

@@ -1,9 +1,8 @@
Code: src/strlcpy.h
Author: Todd C. Miller <Todd.Miller@courtesan.com>
License: ISC
Icon: src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png, Icon: src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png,
src/qt/res/src/*.svg src/qt/res/src/clock_green.svg, src/qt/res/src/clock1.svg,
src/qt/res/src/clock2.svg, src/qt/res/src/clock3.svg,
src/qt/res/src/clock4.svg, src/qt/res/src/clock5.svg,
src/qt/res/src/inout.svg, src/qt/res/src/questionmark.svg
Designer: Wladimir van der Laan Designer: Wladimir van der Laan
License: MIT License: MIT
@@ -29,6 +28,7 @@ Designer: md2k7
Site: https://bitcointalk.org/index.php?topic=15276.0 Site: https://bitcointalk.org/index.php?topic=15276.0
License: You are free to do with these icons as you wish, including selling, License: You are free to do with these icons as you wish, including selling,
copying, modifying etc. copying, modifying etc.
License: MIT
Icon: src/qt/res/icons/configure.png, src/qt/res/icons/quit.png, Icon: src/qt/res/icons/configure.png, src/qt/res/icons/quit.png,
src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png, src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png,
@@ -38,23 +38,21 @@ Designer: http://www.everaldo.com
Icon Pack: Crystal SVG Icon Pack: Crystal SVG
License: LGPL License: LGPL
Icon: src/qt/res/icons/bitcoin.png, src/qt/res/icons/toolbar.png Icon: scripts/img/reload.xcf (modified), src/qt/res/movies/update_spinner.mng
Designer: BitcoinPorn (forum)
License: Public Domain
Site: https://bitcointalk.org/index.php?topic=47417.msg591988#msg591988
Icon: scripts/img/reload.xcf (modified),src/qt/res/movies/update_spinner.mng
Icon Pack: Kids Icon Pack: Kids
Designer: Everaldo (Everaldo Coelho) Designer: Everaldo (Everaldo Coelho)
License: GNU/GPL License: GNU/GPL
Site: http://findicons.com/icon/17102/reload?id=17102 Site: http://findicons.com/icon/17102/reload?id=17102
Image: src/qt/res/images/splash2.jpg (Wallet image)
Designer: Crobbo (forum), adapted to CasinoCoin by BitcoinPorn (forum)
Site: https://bitcointalk.org/index.php?topic=32273.0, https://bitcointalk.org/index.php?topic=47417.msg591988#msg591988
License: Public domain
Icon: src/qt/res/icons/debugwindow.png Icon: src/qt/res/icons/debugwindow.png
Designer: Vignoni David Designer: Vignoni David
Site: http://www.oxygen-icons.org/ Site: http://www.oxygen-icons.org/
License: Oxygen icon theme is dual licensed. You may copy it under the Creative Common Attribution-ShareAlike 3.0 License or the GNU Library General Public License. License: Oxygen icon theme is dual licensed. You may copy it under the Creative Common Attribution-ShareAlike 3.0 License or the GNU Library General Public License.
Icon: src/qt/res/icons/bitcoin.icns, src/qt/res/src/bitcoin.svg,
src/qt/res/src/bitcoin.ico, src/qt/res/src/bitcoin.png,
src/qt/res/src/bitcoin_testnet.png, docs/bitcoin_logo_doxygen.png,
src/qt/res/icons/toolbar.png, src/qt/res/icons/toolbar_testnet.png,
src/qt/res/images/splash.png, src/qt/res/images/splash_testnet.png
Designer: Jonas Schnelli (based on the original bitcoin logo from Bitboy)
License: MIT

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

89
doc/build-msw.md Normal file
View File

@@ -0,0 +1,89 @@
Copyright (c) 2009-2013 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying
file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](http://www.openssl.org/). This product includes
cryptographic software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard.
See readme-qt.rst for instructions on building CasinoCoin-Qt, the
graphical user interface.
WINDOWS BUILD NOTES
===================
Compilers Supported
-------------------
TODO: What works?
Note: releases are cross-compiled using mingw running on Linux.
Dependencies
------------
Libraries you need to download separately and build:
default path download
OpenSSL \openssl-1.0.1c-mgw http://www.openssl.org/source/
Berkeley DB \db-4.8.30.NC-mgw http://www.oracle.com/technology/software/products/berkeley-db/index.html
Boost \boost-1.50.0-mgw http://www.boost.org/users/download/
miniupnpc \miniupnpc-1.6-mgw http://miniupnp.tuxfamily.org/files/
Their licenses:
OpenSSL Old BSD license with the problematic advertising requirement
Berkeley DB New BSD license with additional requirement that linked software must be free open source
Boost MIT-like license
miniupnpc New (3-clause) BSD license
Versions used in this release:
OpenSSL 1.0.1c
Berkeley DB 4.8.30.NC
Boost 1.50.0
miniupnpc 1.6
OpenSSL
-------
MSYS shell:
un-tar sources with MSYS 'tar xfz' to avoid issue with symlinks (OpenSSL ticket 2377)
change 'MAKE' env. variable from 'C:\MinGW32\bin\mingw32-make.exe' to '/c/MinGW32/bin/mingw32-make.exe'
cd /c/openssl-1.0.1c-mgw
./config
make
Berkeley DB
-----------
MSYS shell:
cd /c/db-4.8.30.NC-mgw/build_unix
sh ../dist/configure --enable-mingw --enable-cxx
make
Boost
-----
DOS prompt:
downloaded boost jam 3.1.18
cd \boost-1.50.0-mgw
bjam toolset=gcc --build-type=complete stage
MiniUPnPc
---------
UPnP support is optional, make with `USE_UPNP=` to disable it.
MSYS shell:
cd /c/miniupnpc-1.6-mgw
make -f Makefile.mingw
mkdir miniupnpc
cp *.h miniupnpc/
CasinoCoin
-------
DOS prompt:
cd \casinocoin\src
mingw32-make -f makefile.mingw
strip casinocoind.exe

185
doc/build-osx.md Normal file
View File

@@ -0,0 +1,185 @@
Mac OS X casinocoind build instructions
====================================
Authors
-------
* Laszlo Hanyecz <solar@heliacal.net>
* Douglas Huff <dhuff@jrbobdobbs.org>
* Colin Dean <cad@cad.cx>
* Gavin Andresen <gavinandresen@gmail.com>
License
-------
Copyright (c) 2009-2012 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying
file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in
the OpenSSL Toolkit (http://www.openssl.org/).
This product includes cryptographic software written by
Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.
Notes
-----
See `doc/readme-qt.rst` for instructions on building CasinoCoin-Qt, the
graphical user interface.
Tested on OS X 10.5 through 10.8 on Intel processors only. PPC is not
supported because it is big-endian.
All of the commands should be executed in a Terminal application. The
built-in one is located in `/Applications/Utilities`.
Preparation
-----------
You need to install XCode with all the options checked so that the compiler
and everything is available in /usr not just /Developer. XCode should be
available on your OS X installation media, but if not, you can get the
current version from https://developer.apple.com/xcode/. If you install
Xcode 4.3 or later, you'll need to install its command line tools. This can
be done in `Xcode > Preferences > Downloads > Components` and generally must
be re-done or updated every time Xcode is updated.
There's an assumption that you already have `git` installed, as well. If
not, it's the path of least resistance to install [Github for Mac](https://mac.github.com/)
(OS X 10.7+) or
[Git for OS X](https://code.google.com/p/git-osx-installer/). It is also
available via Homebrew or MacPorts.
You will also need to install [Homebrew](http://mxcl.github.io/homebrew/)
or [MacPorts](https://www.macports.org/) in order to install library
dependencies. It's largely a religious decision which to choose, but, as of
December 2012, MacPorts is a little easier because you can just install the
dependencies immediately - no other work required. If you're unsure, read
the instructions through first in order to assess what you want to do.
Homebrew is a little more popular among those newer to OS X.
The installation of the actual dependencies is covered in the Instructions
sections below.
Instructions: MacPorts
----------------------
### Install dependencies
Installing the dependencies using MacPorts is very straightforward.
sudo port install boost db48@+no_java openssl miniupnpc
### Building `casinocoind`
1. Clone the github tree to get the source code and go into the directory.
git clone git@github.com:casinocoin-project/casinocoin.git casinocoin
cd casinocoin
2. Build casinocoind:
cd src
make -f makefile.osx
3. It is a good idea to build and run the unit tests, too:
make -f makefile.osx test
Instructions: HomeBrew
----------------------
#### Install dependencies using Homebrew
brew install boost miniupnpc openssl berkeley-db4
Note: After you have installed the dependencies, you should check that the Brew installed version of OpenSSL is the one available for compilation. You can check this by typing
openssl version
into Terminal. You should see OpenSSL 1.0.1e 11 Feb 2013.
If not, you can ensure that the Brew OpenSSL is correctly linked by running
brew link openssl --force
Rerunning "openssl version" should now return the correct version.
### Building `casinocoind`
1. Clone the github tree to get the source code and go into the directory.
git clone git@github.com:transcoder/CasinoCoin.git casinocoin
cd casinocoin
2. Modify source in order to pick up the `openssl` library.
Edit `makefile.osx` to account for library location differences. There's a
diff in `contrib/homebrew/makefile.osx.patch` that shows what you need to
change, or you can just patch by doing
patch -p1 < contrib/homebrew/makefile.osx.patch
3. Build casinocoind:
cd src
make -f makefile.osx
4. It is a good idea to build and run the unit tests, too:
make -f makefile.osx test
Creating a release build
------------------------
A casinocoind binary is not included in the CasinoCoin-Qt.app bundle. You can ignore
this section if you are building `casinocoind` for your own use.
If you are building `litecond` for others, your build machine should be set up
as follows for maximum compatibility:
All dependencies should be compiled with these flags:
-mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk
For MacPorts, that means editing your macports.conf and setting
`macosx_deployment_target` and `build_arch`:
macosx_deployment_target=10.5
build_arch=i386
... and then uninstalling and re-installing, or simply rebuilding, all ports.
As of December 2012, the `boost` port does not obey `macosx_deployment_target`.
Download `http://gavinandresen-bitcoin.s3.amazonaws.com/boost_macports_fix.zip`
for a fix. Some ports also seem to obey either `build_arch` or
`macosx_deployment_target`, but not both at the same time. For example, building
on an OS X 10.6 64-bit machine fails. Official release builds of CasinoCoin-Qt are
compiled on an OS X 10.6 32-bit machine to workaround that problem.
Once dependencies are compiled, creating `CasinoCoin-Qt.app` is easy:
make -f Makefile.osx RELEASE=1
Running
-------
It's now available at `./casinocoind`, provided that you are still in the `src`
directory. We have to first create the RPC configuration file, though.
Run `./casinocoind` to get the filename where it should be put, or just try these
commands:
echo -e "rpcuser=casinocoinrpc\nrpcpassword=$(xxd -l 16 -p /dev/urandom)" > "/Users/${USER}/Library/Application Support/CasinoCoin/casinocoin.conf"
chmod 600 "/Users/${USER}/Library/Application Support/CasinoCoin/casinocoin.conf"
When next you run it, it will start downloading the blockchain, but it won't
output anything while it's doing this. This process may take several hours.
Other commands:
./casinocoind --help # for a list of command-line options.
./casinocoind -daemon # to start the casinocoin daemon.
./casinocoind help # When the daemon is running, to get a list of RPC commands

154
doc/build-unix.md Normal file
View File

@@ -0,0 +1,154 @@
Copyright (c) 2009-2013 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying
file COPYING or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](http://www.openssl.org/). This product includes
cryptographic software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard.
UNIX BUILD NOTES
====================
To Build
---------------------
cd src/
make -f makefile.unix # Headless casinocoin
See readme-qt.rst for instructions on building CasinoCoin-Qt, the graphical user interface.
Dependencies
---------------------
Library Purpose Description
------- ------- -----------
libssl SSL Support Secure communications
libdb4.8 Berkeley DB Blockchain & wallet storage
libboost Boost C++ Library
miniupnpc UPnP Support Optional firewall-jumping support
[miniupnpc](http://miniupnp.free.fr/) may be used for UPnP port mapping. It can be downloaded from [here](
http://miniupnp.tuxfamily.org/files/). UPnP support is compiled in and
turned off by default. Set USE_UPNP to a different value to control this:
USE_UPNP= No UPnP support miniupnp not required
USE_UPNP=0 (the default) UPnP support turned off by default at runtime
USE_UPNP=1 UPnP support turned on by default at runtime
IPv6 support may be disabled by setting:
USE_IPV6=0 Disable IPv6 support
Licenses of statically linked libraries:
Berkeley DB New BSD license with additional requirement that linked
software must be free open source
Boost MIT-like license
miniupnpc New (3-clause) BSD license
- Versions used in this release:
- GCC 4.3.3
- OpenSSL 1.0.1c
- Berkeley DB 4.8.30.NC
- Boost 1.37
- miniupnpc 1.6
Dependency Build Instructions: Ubuntu & Debian
----------------------------------------------
Build requirements:
sudo apt-get install build-essential
sudo apt-get install libssl-dev
for Ubuntu 12.04:
sudo apt-get install libboost-all-dev
db4.8 packages are available [here](https://launchpad.net/~bitcoin/+archive/bitcoin).
Ubuntu precise has packages for libdb5.1-dev and libdb5.1++-dev,
but using these will break binary wallet compatibility, and is not recommended.
for other Ubuntu & Debian:
sudo apt-get install libdb4.8-dev
sudo apt-get install libdb4.8++-dev
sudo apt-get install libboost1.37-dev
(If using Boost 1.37, append -mt to the boost libraries in the makefile)
Optional:
sudo apt-get install libminiupnpc-dev (see USE_UPNP compile flag)
Notes
-----
The release is built with GCC and then "strip bitcoind" to strip the debug
symbols, which reduces the executable size by about 90%.
miniupnpc
---------
tar -xzvf miniupnpc-1.6.tar.gz
cd miniupnpc-1.6
make
sudo su
make install
Berkeley DB
-----------
You need Berkeley DB 4.8. If you have to build Berkeley DB yourself:
../dist/configure --enable-cxx
make
Boost
-----
If you need to build Boost yourself:
sudo su
./bootstrap.sh
./bjam install
Security
--------
To help make your casinocoin installation more secure by making certain attacks impossible to
exploit even if a vulnerability is found, you can take the following measures:
* Position Independent Executable
Build position independent code to take advantage of Address Space Layout Randomization
offered by some kernels. An attacker who is able to cause execution of code at an arbitrary
memory location is thwarted if he doesn't know where anything useful is located.
The stack and heap are randomly located by default but this allows the code section to be
randomly located as well.
On an Amd64 processor where a library was not compiled with -fPIC, this will cause an error
such as: "relocation R_X86_64_32 against `......' can not be used when making a shared object;"
To build with PIE, use:
make -f makefile.unix ... -e PIE=1
To test that you have built PIE executable, install scanelf, part of paxutils, and use:
scanelf -e ./casinocoin
The output should contain:
TYPE
ET_DYN
* Non-executable Stack
If the stack is executable then trivial stack based buffer overflow exploits are possible if
vulnerable buffers are found. By default, bitcoin should be built with a non-executable stack
but if one of the libraries it uses asks for an executable stack or someone makes a mistake
and uses a compiler extension which requires an executable stack, it will silently build an
executable without the non-executable stack protection.
To verify that the stack is non-executable after compiling use:
`scanelf -e ./casinocoin`
the output should contain:
STK/REL/PTL
RW- R-- RW-
The STK RW- means that the stack is readable and writeable but not executable.

94
doc/coding.md Normal file
View File

@@ -0,0 +1,94 @@
Coding
====================
Please be consistent with the existing coding style.
Block style:
bool Function(char* psz, int n)
{
// Comment summarising what this section of code does
for (int i = 0; i < n; i++)
{
// When something fails, return early
if (!Something())
return false;
...
}
// Success return is usually at the end
return true;
}
- ANSI/Allman block style
- 4 space indenting, no tabs
- No extra spaces inside parenthesis; please don't do ( this )
- No space after function names, one space after if, for and while
Variable names begin with the type in lowercase, like nSomeVariable.
Please don't put the first word of the variable name in lowercase like
someVariable.
Common types:
n integer number: short, unsigned short, int, unsigned int, int64, uint64, sometimes char if used as a number
d double, float
f flag
hash uint256
p pointer or array, one p for each level of indirection
psz pointer to null terminated string
str string object
v vector or similar list objects
map map or multimap
set set or multiset
bn CBigNum
-------------------------
Locking/mutex usage notes
The code is multi-threaded, and uses mutexes and the
LOCK/TRY_LOCK macros to protect data structures.
Deadlocks due to inconsistent lock ordering (thread 1 locks cs_main
and then cs_wallet, while thread 2 locks them in the opposite order:
result, deadlock as each waits for the other to release its lock) are
a problem. Compile with -DDEBUG_LOCKORDER to get lock order
inconsistencies reported in the debug.log file.
Re-architecting the core code so there are better-defined interfaces
between the various components is a goal, with any necessary locking
done by the components (e.g. see the self-contained CKeyStore class
and its cs_KeyStore lock for example).
-------
Threads
- StartNode : Starts other threads.
- ThreadGetMyExternalIP : Determines outside-the-firewall IP address, sends addr message to connected peers when it determines it.
- ThreadSocketHandler : Sends/Receives data from peers on port 8333.
- ThreadMessageHandler : Higher-level message handling (sending and receiving).
- ThreadOpenConnections : Initiates new connections to peers.
- ThreadTopUpKeyPool : replenishes the keystore's keypool.
- ThreadCleanWalletPassphrase : re-locks an encrypted wallet after user has unlocked it for a period of time.
- SendingDialogStartTransfer : used by pay-via-ip-address code (obsolete)
- ThreadDelayedRepaint : repaint the gui
- ThreadFlushWalletDB : Close the wallet.dat file if it hasn't been used in 500ms.
- ThreadRPCServer : Remote procedure call handler, listens on port 8332 for connections and services them.
- ThreadBitcoinMiner : Generates bitcoins
- ThreadMapPort : Universal plug-and-play startup/shutdown
- Shutdown : Does an orderly shutdown of everything
- ExitTimeout : Windows-only, sleeps 5 seconds then exits application

19
doc/files.txt Normal file
View File

@@ -0,0 +1,19 @@
Used in 0.8.0:
* wallet.dat: personal wallet (BDB) with keys and transactions
* peers.dat: peer IP address database (custom format); since 0.7.0
* blocks/blk000??.dat: block data (custom, 128 MiB per file); since 0.8.0
* blocks/rev000??.dat; block undo data (custom); since 0.8.0 (format changed since pre-0.8)
* blocks/index/*; block index (LevelDB); since 0.8.0
* chainstate/*; block chain state database (LevelDB); since 0.8.0
* database/*: BDB database environment; only used for wallet since 0.8.0
Only used in pre-0.8.0:
* blktree/*; block chain index (LevelDB); since pre-0.8, replaced by blocks/index/* in 0.8.0
* coins/*; unspent transaction output database (LevelDB); since pre-0.8, replaced by chainstate/* in 0.8.0
Only used before 0.8.0:
* blkindex.dat: block chain index database (BDB); replaced by {chainstate/*,blocks/index/*,blocks/rev000??.dat} in 0.8.0
* blk000?.dat: block data (custom, 2 GiB per file); replaced by blocks/blk000??.dat in 0.8.0
Only used before 0.7.0:
* addr.dat: peer IP address database (BDB); replaced by peers.dat in 0.7.0

52
doc/multiwallet-qt.md Normal file
View File

@@ -0,0 +1,52 @@
Multiwallet Qt Development and Integration Strategy
===================================================
In order to support loading of multiple wallets in bitcoin-qt, a few changes in the UI architecture will be needed.
Fortunately, only four of the files in the existing project are affected by this change.
Three new classes have been implemented in three new .h/.cpp file pairs, with much of the functionality that was previously
implemented in the BitcoinGUI class moved over to these new classes.
The two existing files most affected, by far, are bitcoingui.h and bitcoingui.cpp, as the BitcoinGUI class will require
some major retrofitting.
Only requiring some minor changes is bitcoin.cpp.
Finally, three new headers and source files will have to be added to bitcoin-qt.pro.
Changes to class BitcoinGUI
---------------------------
The principal change to the BitcoinGUI class concerns the QStackedWidget instance called centralWidget.
This widget owns five page views: overviewPage, transactionsPage, addressBookPage, receiveCoinsPage, and sendCoinsPage.
A new class called *WalletView* inheriting from QStackedWidget has been written to handle all renderings and updates of
these page views. In addition to owning these five page views, a WalletView also has a pointer to a WalletModel instance.
This allows the construction of multiple WalletView objects, each rendering a distinct wallet.
A second class called *WalletStack*, also inheriting from QStackedWidget, has been written to handle switching focus between
different loaded wallets. In its current implementation, as a QStackedWidget, only one wallet can be viewed at a time -
but this can be changed later.
A third class called *WalletFrame* inheriting from QFrame has been written as a container for embedding all wallet-related
controls into BitcoinGUI. At present it just contains a WalletStack instance and does little more than passing on messages
from BitcoinGUI to the WalletStack, which in turn passes them to the individual WalletViews. It is a WalletFrame instance
that takes the place of what used to be centralWidget in BitcoinGUI. The purpose of this class is to allow future
refinements of the wallet controls with minimal need for further modifications to BitcoinGUI, thus greatly simplifying
merges while reducing the risk of breaking top-level stuff.
Changes to bitcoin.cpp
----------------------
bitcoin.cpp is the entry point into bitcoin-qt, and as such, will require some minor modifications to provide hooks for
multiple wallet support. Most importantly will be the way it instantiates WalletModels and passes them to the
singleton BitcoinGUI instance called window. Formerly, BitcoinGUI kept a pointer to a single instance of a WalletModel.
The initial change required is very simple: rather than calling `window.setWalletModel(&walletModel);` we perform the
following two steps:
window.addWallet("~Default", &walletModel);
window.setCurrentWallet("~Default");
The string parameter is just an arbitrary name given to the default wallet. It's been prepended with a tilde to avoid name collisions in the future with additional wallets.
The shutdown call `window.setWalletModel(0)` has also been removed. In its place is now:
window.removeAllWallets();

View File

@@ -1,5 +1,5 @@
CasinoCoin-Qt: Qt4 GUI for CasinoCoin CasinoCoin-Qt: Qt4 GUI for CasinoCoin
================================ ===============================
Build instructions Build instructions
=================== ===================
@@ -8,13 +8,31 @@ Debian
------- -------
First, make sure that the required packages for Qt4 development of your First, make sure that the required packages for Qt4 development of your
distribution are installed, for Debian and Ubuntu these are: distribution are installed, these are
::
for Debian and Ubuntu <= 11.10 :
:: ::
apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev \ apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev \
libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev \ libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev \
libssl-dev libdb4.8++-dev libssl-dev libdb4.8++-dev libminiupnpc-dev
for Ubuntu >= 12.04 (please read the 'Berkely DB version warning' below):
::
apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev \
libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev \
libssl-dev libdb++-dev libminiupnpc-dev
For Qt 5 you need the following, otherwise you get an error with lrelease when running qmake:
::
apt-get install qt5-qmake libqt5gui5 libqt5core5 libqt5dbus5 qttools5-dev-tools
then execute the following: then execute the following:
@@ -27,45 +45,38 @@ Alternatively, install `Qt Creator`_ and open the `casinocoin-qt.pro` file.
An executable named `casinocoin-qt` will be built. An executable named `casinocoin-qt` will be built.
.. _`Qt Creator`: http://qt.nokia.com/downloads/ .. _`Qt Creator`: http://qt-project.org/downloads/
Windows
--------
Windows build instructions:
- Download the `Qt Windows SDK`_ and install it. You don't need the Symbian stuff, just the desktop Qt.
- Download and extract the `dependencies archive`_ [#]_, or compile openssl, boost and dbcxx yourself.
- Copy the contents of the folder "deps" to "X:\\QtSDK\\mingw", replace X:\\ with the location where you installed the Qt SDK. Make sure that the contents of "deps\\include" end up in the current "include" directory.
- Open the bitcoin-qt.pro file in Qt Creator and build as normal (ctrl-B)
.. _`Qt Windows SDK`: http://qt.nokia.com/downloads/sdk-windows-cpp
.. _`dependencies archive`: https://download.visucore.com/bitcoin/qtgui_deps_1.zip
.. [#] PGP signature: https://download.visucore.com/bitcoin/qtgui_deps_1.zip.sig (signed with RSA key ID `610945D0`_)
.. _`610945D0`: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x610945D0
Mac OS X Mac OS X
-------- --------
- Download and install the `Qt Mac OS X SDK`_. It is recommended to also install Apple's Xcode with UNIX tools. - Download and install the `Qt Mac OS X SDK`_. It is recommended to also install Apple's Xcode with UNIX tools.
- Download and install `MacPorts`_. - Download and install either `MacPorts`_ or `HomeBrew`_.
- Execute the following commands in a terminal to get the dependencies: - Execute the following commands in a terminal to get the dependencies using MacPorts:
:: ::
sudo port selfupdate sudo port selfupdate
sudo port install boost db48 miniupnpc sudo port install boost db48 miniupnpc
- Open the bitcoin-qt.pro file in Qt Creator and build as normal (cmd-B) - Execute the following commands in a terminal to get the dependencies using HomeBrew:
.. _`Qt Mac OS X SDK`: http://qt.nokia.com/downloads/sdk-mac-os-cpp ::
brew update
brew install boost miniupnpc openssl berkeley-db4
- If using HomeBrew, edit `casinocoin-qt.pro` to account for library location differences. There's a diff in `contrib/homebrew/bitcoin-qt-pro.patch` that shows what you need to change, or you can just patch by doing
patch -p1 < contrib/homebrew/bitcoin.qt.pro.patch
- Open the casinocoin-qt.pro file in Qt Creator and build as normal (cmd-B)
.. _`Qt Mac OS X SDK`: http://qt-project.org/downloads/
.. _`MacPorts`: http://www.macports.org/install.php .. _`MacPorts`: http://www.macports.org/install.php
.. _`HomeBrew`: http://mxcl.github.io/homebrew/
Build configuration options Build configuration options
@@ -108,8 +119,8 @@ FreeDesktop notification interface through DBUS using the following qmake option
Generation of QR codes Generation of QR codes
----------------------- -----------------------
libqrencode may be used to generate QRCode images for payment requests. libqrencode may be used to generate QRCode images for payment requests.
It can be downloaded from http://fukuchi.org/works/qrencode/index.html.en, or installed via your package manager. Pass the USE_QRCODE It can be downloaded from http://fukuchi.org/works/qrencode/index.html.en, or installed via your package manager. Pass the USE_QRCODE
flag to qmake to control this: flag to qmake to control this:
+--------------+--------------------------------------------------------------------------+ +--------------+--------------------------------------------------------------------------+

100
doc/release-notes.md Normal file
View File

@@ -0,0 +1,100 @@
1.1.0.0 changes
=============
Implemented the Kimoto Gravity Well algorithm (courtesy of @kimoto of Megacoin) for use in the difficulty adjustment in order to combat pool hopping.
Incorporated the following Litecoin changes below.
0.8.6.2 changes
=============
- Windows only: Fixes issue where network connectivity can fail.
- Cleanup of SSE2 scrypt detection.
- Minor fixes:
- s/Bitcoin/Litecoin/ in the Coin Control example
- Fix custom build on MacOS X 10.9
- Fix QT5 custom build
- Update Debian build instructions
- Update Homebrew build
0.8.6.1 changes
=============
- Coin Control - experts only GUI selection of inputs before you send a transaction
- Disable Wallet - reduces memory requirements, helpful for miner or relay nodes
- 20x reduction in default mintxfee.
- Up to 50% faster PoW validation, faster sync and reindexing.
- Peers older than protocol version 70002 are disconnected. 0.8.3.7 is the oldest compatible client.
- Internal miner added back to Litecoin. setgenerate now works, although it is generally a bad idea as it is significantly slower than external CPU miners.
- New RPC commands: getbestblockhash and verifychain
- Improve fairness of the high priority transaction space per block
- OSX block chain database corruption fixes
- Update leveldb to 1.13
- Use fcntl with `F_FULLSYNC` instead of fsync on OSX
- Use native Darwin memory barriers
- Replace use of mmap in leveldb for improved reliability (only on OSX)
- Fix nodes forwarding transactions with empty vins and getting banned
- Network code performance and robustness improvements
- Additional debug.log logging for diagnosis of network problems, log timestamps by default
- Fix rare GUI crash on send
0.8.5.1 changes
===============
Workaround negative version numbers serialization bug.
Fix out-of-bounds check (Litecoin currently does not use this codepath, but we apply this
patch just to match Bitcoin 0.8.5.)
0.8.4.1 changes
===============
CVE-2013-5700 Bloom: filter crash issue - Litecoin 0.8.3.7 disabled bloom by default so was
unaffected by this issue, but we include their patches anyway just in case folks want to
enable bloomfilter=1.
CVE-2013-4165: RPC password timing guess vulnerability
CVE-2013-4627: Better fix for the fill-memory-with-orphaned-tx attack
Fix multi-block reorg transaction resurrection.
Fix non-standard disconnected transactions causing mempool orphans. This bug could cause
nodes running with the -debug flag to crash, although it was lot less likely on Litecoin
as we disabled IsDust() in 0.8.3.x.
Mac OSX: use 'FD_FULLSYNC' with LevelDB, which will (hopefully!) prevent the database
corruption issues have experienced on OSX.
Add height parameter to getnetworkhashps.
Fix Norwegian and Swedish translations.
Minor efficiency improvement in block peer request handling.
0.8.3.7 changes
===============
Fix CVE-2013-4627 denial of service, a memory exhaustion attack that could crash low-memory nodes.
Fix a regression that caused excessive writing of the peers.dat file.
Add option for bloom filtering.
Fix Hebrew translation.

161
doc/release-process.md Normal file
View File

@@ -0,0 +1,161 @@
Release Process
====================
* * *
###update (commit) version in sources
casinocoin-qt.pro
contrib/verifysfbinaries/verify.sh
doc/README*
share/setup.nsi
src/clientversion.h (change CLIENT_VERSION_IS_RELEASE to true)
###tag version in git
git tag -a v0.8.0
###write release notes. git shortlog helps a lot, for example:
git shortlog --no-merges v0.7.2..v0.8.0
* * *
##perform gitian builds
From a directory containing the casinocoin source, gitian-builder and gitian.sigs
export SIGNER=(your gitian key, ie bluematt, sipa, etc)
export VERSION=0.8.0
cd ./gitian-builder
Fetch and build inputs: (first time, or when dependency versions change)
mkdir -p inputs; cd inputs/
wget 'http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.6.tar.gz' -O miniupnpc-1.6.tar.gz
wget 'http://www.openssl.org/source/openssl-1.0.1c.tar.gz'
wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
wget 'http://zlib.net/zlib-1.2.6.tar.gz'
wget 'ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.5.9.tar.gz'
wget 'http://fukuchi.org/works/qrencode/qrencode-3.2.0.tar.bz2'
wget 'http://downloads.sourceforge.net/project/boost/boost/1.50.0/boost_1_50_0.tar.bz2'
wget 'http://releases.qt-project.org/qt4/source/qt-everywhere-opensource-src-4.8.3.tar.gz'
cd ..
./bin/gbuild ../casinocoin/contrib/gitian-descriptors/boost-win32.yml
mv build/out/boost-win32-1.50.0-gitian2.zip inputs/
./bin/gbuild ../casinocoin/contrib/gitian-descriptors/qt-win32.yml
mv build/out/qt-win32-4.8.3-gitian-r1.zip inputs/
./bin/gbuild ../casinocoin/contrib/gitian-descriptors/deps-win32.yml
mv build/out/casinocoin-deps-0.0.5.zip inputs/
Build casinocoind and casinocoin-qt on Linux32, Linux64, and Win32:
./bin/gbuild --commit casinocoin=v${VERSION} ../casinocoin/contrib/gitian-descriptors/gitian.yml
./bin/gsign --signer $SIGNER --release ${VERSION} --destination ../gitian.sigs/ ../casinocoin/contrib/gitian-descriptors/gitian.yml
pushd build/out
zip -r casinocoin-${VERSION}-linux-gitian.zip *
mv casinocoin-${VERSION}-linux-gitian.zip ../../
popd
./bin/gbuild --commit casinocoin=v${VERSION} ../casinocoin/contrib/gitian-descriptors/gitian-win32.yml
./bin/gsign --signer $SIGNER --release ${VERSION}-win32 --destination ../gitian.sigs/ ../casinocoin/contrib/gitian-descriptors/gitian-win32.yml
pushd build/out
zip -r casinocoin-${VERSION}-win32-gitian.zip *
mv casinocoin-${VERSION}-win32-gitian.zip ../../
popd
Build output expected:
1. linux 32-bit and 64-bit binaries + source (casinocoin-${VERSION}-linux-gitian.zip)
2. windows 32-bit binary, installer + source (casinocoin-${VERSION}-win32-gitian.zip)
3. Gitian signatures (in gitian.sigs/${VERSION}[-win32]/(your gitian key)/
repackage gitian builds for release as stand-alone zip/tar/installer exe
**Linux .tar.gz:**
unzip casinocoin-${VERSION}-linux-gitian.zip -d casinocoin-${VERSION}-linux
tar czvf casinocoin-${VERSION}-linux.tar.gz casinocoin-${VERSION}-linux
rm -rf casinocoin-${VERSION}-linux
**Windows .zip and setup.exe:**
unzip casinocoin-${VERSION}-win32-gitian.zip -d casinocoin-${VERSION}-win32
mv casinocoin-${VERSION}-win32/casinocoin-*-setup.exe .
zip -r casinocoin-${VERSION}-win32.zip bitcoin-${VERSION}-win32
rm -rf casinocoin-${VERSION}-win32
**Perform Mac build:**
OSX binaries are created by Gavin Andresen on a 32-bit, OSX 10.6 machine.
qmake RELEASE=1 USE_UPNP=1 USE_QRCODE=1 casinocoin-qt.pro
make
export QTDIR=/opt/local/share/qt4 # needed to find translations/qt_*.qm files
T=$(contrib/qt_translations.py $QTDIR/translations src/qt/locale)
python2.7 share/qt/clean_mac_info_plist.py
python2.7 contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr $T -dmg -fancy contrib/macdeploy/fancy.plist
Build output expected: Bitcoin-Qt.dmg
###Next steps:
* Code-sign Windows -setup.exe (in a Windows virtual machine) and
OSX Bitcoin-Qt.app (Note: only Gavin has the code-signing keys currently)
* upload builds to SourceForge
* create SHA256SUMS for builds, and PGP-sign it
* update casinocoin.org version
make sure all OS download links go to the right versions
* update forum version
* update wiki download links
* update wiki changelog: [https://en.casinocoin.it/wiki/Changelog](https://en.bitcoin.it/wiki/Changelog)
Commit your signature to gitian.sigs:
pushd gitian.sigs
git add ${VERSION}/${SIGNER}
git add ${VERSION}-win32/${SIGNER}
git commit -a
git push # Assuming you can push to the gitian.sigs tree
popd
-------------------------------------------------------------------------
### After 3 or more people have gitian-built, repackage gitian-signed zips:
From a directory containing casinocoin source, gitian.sigs and gitian zips
export VERSION=0.5.1
mkdir casinocoin-${VERSION}-linux-gitian
pushd casinocoin-${VERSION}-linux-gitian
unzip ../casinocoin-${VERSION}-linux-gitian.zip
mkdir gitian
cp ../casinocoin/contrib/gitian-downloader/*.pgp ./gitian/
for signer in $(ls ../gitian.sigs/${VERSION}/); do
cp ../gitian.sigs/${VERSION}/${signer}/casinocoin-build.assert ./gitian/${signer}-build.assert
cp ../gitian.sigs/${VERSION}/${signer}/casinocoin-build.assert.sig ./gitian/${signer}-build.assert.sig
done
zip -r casinocoin-${VERSION}-linux-gitian.zip *
cp casinocoin-${VERSION}-linux-gitian.zip ../
popd
mkdir casinocoin-${VERSION}-win32-gitian
pushd casinocoin-${VERSION}-win32-gitian
unzip ../casinocoin-${VERSION}-win32-gitian.zip
mkdir gitian
cp ../casinocoin/contrib/gitian-downloader/*.pgp ./gitian/
for signer in $(ls ../gitian.sigs/${VERSION}-win32/); do
cp ../gitian.sigs/${VERSION}-win32/${signer}/casinocoin-build.assert ./gitian/${signer}-build.assert
cp ../gitian.sigs/${VERSION}-win32/${signer}/casinocoin-build.assert.sig ./gitian/${signer}-build.assert.sig
done
zip -r casinocoin-${VERSION}-win32-gitian.zip *
cp casinocoin-${VERSION}-win32-gitian.zip ../
popd
- Upload gitian zips to SourceForge
- Celebrate

View File

@@ -34,10 +34,12 @@ This directory contains all translations. Filenames must adhere to this format:
source for all other translations. Whenever a string in the code is changed source for all other translations. Whenever a string in the code is changed
this file must be updated to reflect those changes. This can be accomplished this file must be updated to reflect those changes. This can be accomplished
by running `lupdate` (included in the Qt SDK). Also, a custom script is used by running `lupdate` (included in the Qt SDK). Also, a custom script is used
to extract strings from the non-Qt parts: to extract strings from the non-Qt parts. This script makes use of `gettext`,
so make sure that utility is installed (ie, `apt-get install gettext` on
Ubuntu/Debian):
python share/qt/extract_strings_qt.py python share/qt/extract_strings_qt.py
lupdate bitcoin-qt.pro -no-obsolete -locations none -ts src/qt/locale/bitcoin_en.ts lupdate bitcoin-qt.pro -no-obsolete -locations relative -ts src/qt/locale/bitcoin_en.ts
##### Handling of plurals in the source file ##### Handling of plurals in the source file

35
doc/unit-tests.md Normal file
View File

@@ -0,0 +1,35 @@
Compiling/running casinocoind unit tests
------------------------------------
casinocoind unit tests are in the `src/test/` directory; they
use the Boost::Test unit-testing framework.
To compile and run the tests:
cd src
make -f makefile.unix test_casinocoin # Replace makefile.unix if you're not on unix
./test_casinocoin # Runs the unit tests
If all tests succeed the last line of output will be:
`*** No errors detected`
To add more tests, add `BOOST_AUTO_TEST_CASE` functions to the existing
.cpp files in the test/ directory or add new .cpp files that
implement new BOOST_AUTO_TEST_SUITE sections (the makefiles are
set up to add test/*.cpp to test_casinocoin automatically).
Compiling/running CasinoCoin-Qt unit tests
---------------------------------------
Bitcoin-Qt unit tests are in the src/qt/test/ directory; they
use the Qt unit-testing framework.
To compile and run the tests:
qmake bitcoin-qt.pro BITCOIN_QT_TEST=1
make
./casinocoin-qt_test
To add more tests, add them to the `src/qt/test/` directory,
the `src/qt/test/test_main.cpp` file, and bitcoin-qt.pro.

View File

@@ -0,0 +1,37 @@
Bag Attributes
friendlyName: Developer ID Application: BITCOIN FOUNDATION, INC., THE
localKeyID: 6B 9C 6C A8 A5 73 70 70 E2 57 A3 49 D8 62 FB 97 C7 A5 5D 5E
subject=/UID=PBV4GLS9J4/CN=Developer ID Application: BITCOIN FOUNDATION, INC., THE/OU=PBV4GLS9J4/O=BITCOIN FOUNDATION, INC., THE/C=US
issuer=/CN=Developer ID Certification Authority/OU=Apple Certification Authority/O=Apple Inc./C=US
-----BEGIN CERTIFICATE-----
MIIFhzCCBG+gAwIBAgIIJ0r1rumyfZAwDQYJKoZIhvcNAQELBQAweTEtMCsGA1UE
AwwkRGV2ZWxvcGVyIElEIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSYwJAYDVQQL
DB1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUg
SW5jLjELMAkGA1UEBhMCVVMwHhcNMTMwMTEwMjIzOTAxWhcNMTgwMTExMjIzOTAx
WjCBqDEaMBgGCgmSJomT8ixkAQEMClBCVjRHTFM5SjQxQDA+BgNVBAMMN0RldmVs
b3BlciBJRCBBcHBsaWNhdGlvbjogQklUQ09JTiBGT1VOREFUSU9OLCBJTkMuLCBU
SEUxEzARBgNVBAsMClBCVjRHTFM5SjQxJjAkBgNVBAoMHUJJVENPSU4gRk9VTkRB
VElPTiwgSU5DLiwgVEhFMQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBALTd5zURuZVoJviusr119aktXksenb9IN9vq6kBbq38vxEk7
9wkKMES2XfBRh0HxcEizGzhMNy5OCXuTLMaNMihYdfwYSoBoR2foEU+6kjPUnyJ4
dQBFLJZJr5/QeQmALmYHEgZ6lwXFD2lU8t92340zeJ4y5LZw5pcEHtH9IummYDut
OGCkCGXDcjL+5nHhNScJiXHhswM+62o6XXsQiP6EWbM1CsgrGTNLtaa0U/UvVDwE
79YKklSC5Bog2LD0jBcTuveI66mFzqu++L9X9u+ZArtebwCl7BPNQ+uboYy5uV2d
zf8lpNNZLfXCFjoLe9bLICKfZ7ub9V5aC8+GhckCAwEAAaOCAeEwggHdMD4GCCsG
AQUFBwEBBDIwMDAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AuYXBwbGUuY29tL29j
c3AtZGV2aWQwMTAdBgNVHQ4EFgQUa5xsqKVzcHDiV6NJ2GL7l8elXV4wDAYDVR0T
AQH/BAIwADAfBgNVHSMEGDAWgBRXF+2iz9x8mKEQ4Py+hy0s8uMXVDCCAQ4GA1Ud
IASCAQUwggEBMIH+BgkqhkiG92NkBQEwgfAwKAYIKwYBBQUHAgEWHGh0dHA6Ly93
d3cuYXBwbGUuY29tL2FwcGxlY2EwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ug
b24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRh
bmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNv
bmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmlj
YXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wDgYDVR0PAQH/BAQDAgeAMBYGA1Ud
JQEB/wQMMAoGCCsGAQUFBwMDMBMGCiqGSIb3Y2QGAQ0BAf8EAgUAMA0GCSqGSIb3
DQEBCwUAA4IBAQAfJ0BjID/1dS2aEeVyhAzPzCBjG8vm0gDf+/qfwRn3+yWeL9vS
nMdbilwM48IyQWTagjGGcojbsAd/vE4N7NhQyHInoCllNoeor1I5xx+blTaGRBK+
dDhJbbdlGCjsLnH/BczGZi5fyEJds9lUIrp1hJidRcUKO76qb/9gc6qNZpl1vH5k
lDUuJYt7YhAs+L6rTXDyqcK9maeQr0gaOPsRRAQLLwiQCorPeMTUNsbVMdMwZYJs
R+PxiAnk+nyi7rfiFvPoASAYUuI6OzYL/Fa6QU4/gYyPgic944QYVkaQBnc0vEP1
nXq6LGKwgVGcqJnkr/E2kui5gJoV5C3qll3e
-----END CERTIFICATE-----

View File

@@ -0,0 +1,37 @@
Bag Attributes
friendlyName: The Bitcoin Foundation, Inc.'s COMODO CA Limited ID
localKeyID: 8C 94 64 E3 B5 B0 41 89 5B 89 B0 57 CC 74 B9 44 E5 B2 92 66
subject=/C=US/postalCode=98104-1444/ST=WA/L=Seattle/street=Suite 300/street=71 Columbia St/O=The Bitcoin Foundation, Inc./CN=The Bitcoin Foundation, Inc.
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO Code Signing CA 2
-----BEGIN CERTIFICATE-----
MIIFeDCCBGCgAwIBAgIRAJVYMd+waOER7lUqtiz3M2IwDQYJKoZIhvcNAQEFBQAw
ezELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxITAfBgNV
BAMTGENPTU9ETyBDb2RlIFNpZ25pbmcgQ0EgMjAeFw0xMzAxMTYwMDAwMDBaFw0x
NDAxMTYyMzU5NTlaMIG8MQswCQYDVQQGEwJVUzETMBEGA1UEEQwKOTgxMDQtMTQ0
NDELMAkGA1UECAwCV0ExEDAOBgNVBAcMB1NlYXR0bGUxEjAQBgNVBAkMCVN1aXRl
IDMwMDEXMBUGA1UECQwONzEgQ29sdW1iaWEgU3QxJTAjBgNVBAoMHFRoZSBCaXRj
b2luIEZvdW5kYXRpb24sIEluYy4xJTAjBgNVBAMMHFRoZSBCaXRjb2luIEZvdW5k
YXRpb24sIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQChUwLD
u/hu5aFZ/n11B27awONaaDrmHm0pamiWHb01yL4JmTBtaLCrSftF8RhCscQ8jpI0
UG1Cchmay0e3zH5o5XRs0H9C3x+SM5ozms0TWDmAYiB8aQEghsGovDk0D2nyTQeK
Q0xqyCh0m8ZPOnMnYrakHEmF6WvhLdJvI6Od4KIwbKxgN17cPFIfLVsZ7GrzmmbU
Gdi4wSQCHy5rxzvBxho8Qq/SfBl93uOMUrqOHjOUAPhNuTJG3t/MdhU8Zp24s29M
abHtYkT9W86hMjIiI8RTAR+WHKVglx9SB0cjDabXN8SZ3gME0+H++LyzlySHT8sI
ykepojZ7UBRgp9w3AgMBAAGjggGzMIIBrzAfBgNVHSMEGDAWgBQexbEsfYfaAmh8
JbwMB4Q/ts/e8TAdBgNVHQ4EFgQUfPf+ZyDWl/4LH0Y5BuJTelkRd/EwDgYDVR0P
AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwEQYJ
YIZIAYb4QgEBBAQDAgQQMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQMCMCswKQYI
KwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5uZXQvQ1BTMEEGA1UdHwQ6
MDgwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0NPTU9ET0NvZGVTaWdu
aW5nQ0EyLmNybDByBggrBgEFBQcBAQRmMGQwPAYIKwYBBQUHMAKGMGh0dHA6Ly9j
cnQuY29tb2RvY2EuY29tL0NPTU9ET0NvZGVTaWduaW5nQ0EyLmNydDAkBggrBgEF
BQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMCgGA1UdEQQhMB+BHWxpbmRz
YXlAYml0Y29pbmZvdW5kYXRpb24ub3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAqibjo
D4HG5XSIIMCmYE5RgQBSEAJfI+EZERk1G9F83ZUWr0yNRZCw4O+RaM7xQhvJhEoD
G2kpk/q2bNOc71/VyZ6SrE1JRVUON41/Flhz4M6cP0BclTicXvh+efVwqZhIz+ws
UxF2hvC/1Xx6rqI7NYAlOYXk2MSUq3HREo+gWUPKM8em4MZZV/7XCH4QbsfxOl1J
xS6EOQmV8hfUN4KRXI5WfGUmedBxq7dM0RSJOSQl8fq2f+JjRLfjQwQucy7LDY+y
pRTsL2TdQV/DuDuI3s0NHRGznQNddoX5jqpXhSQFAAdgrhN1gGkWaaTPzr9IF2TG
qgr6PEp9tIYC+MbM
-----END CERTIFICATE-----

View File

@@ -0,0 +1,46 @@
Code-signing private key notes
==
The private keys for these certificates were generated on Gavin's main work machine,
following the certificate authoritys' recommendations for generating certificate
signing requests.
For OSX, the private key was generated by Keychain.app on Gavin's main work machine.
The key and certificate is in a separate, passphrase-protected keychain file that is
unlocked to sign the Bitcoin-Qt.app bundle.
For Windows, the private key was generated by Firefox running on Gavin's main work machine.
The key and certificate were exported into a separate, passphrase-protected PKCS#12 file, and
then deleted from Firefox's keystore. The exported file is used to sign the Windows setup.exe.
Threat analysis
--
Gavin is a single point of failure. He could be coerced to divulge the secret signing keys,
allowing somebody to distribute a Bitcoin-Qt.app or bitcoin-qt-setup.exe with a valid
signature but containing a malicious binary.
Or the machine Gavin uses to sign the binaries could be compromised, either remotely or
by breaking in to his office, allowing the attacker to get the private key files and then
install a keylogger to get the passphrase that protects them.
Threat Mitigation
--
"Air gapping" the machine used to do the signing will not work, because the signing
process needs to access a timestamp server over the network. And it would not
prevent the "rubber hose cryptography" threat (coercing Gavin to sign a bad binary
or divulge the private keys).
Windows binaries are reproducibly 'gitian-built', and the setup.exe file created
by the NSIS installer system is a 7zip archive, so you could check to make sure
that the bitcoin-qt.exe file inside the installer had not been tampered with.
However, an attacker could modify the installer's code, so when the setup.exe
was run it compromised users' systems. A volunteer to write an auditing tool
that checks the setup.exe for tampering, and checks the files in it against
the list of gitian signatures, is needed.
The long-term solution is something like the 'gitian downloader' system, which
uses signatures from multiple developers to determine whether or not a binary
should be trusted. However, that just pushes the problem to "how will
non-technical users securely get the gitian downloader code to start?"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

1084
share/pixmaps/bitcoin128.xpm Normal file

File diff suppressed because it is too large Load Diff

BIN
share/pixmaps/bitcoin16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 871 B

167
share/pixmaps/bitcoin16.xpm Normal file
View File

@@ -0,0 +1,167 @@
/* XPM */
static char *graphic[] = {
/* width height num_colors chars_per_pixel */
"16 16 144 2",
/* colors */
" c None",
". c #888888",
"X c #AAAAAA",
"o c #CCCCCC",
"O c #979797",
"+ c #B9B9B9",
"@ c #DBDBDB",
"# c None",
"$ c #848484",
"% c #A6A6A6",
"& c #C8C8C8",
"* c #8F8F8F",
"= c #747474",
"- c #939393",
"; c #B5B5B5",
": c None",
"> c #F9F9F9",
", c None",
"< c None",
"1 c #A2A2A2",
"2 c #C4C4C4",
"3 c #707070",
"4 c #707070",
"5 c #9E9E9E",
"6 c #8F8F8F",
"7 c #B1B1B1",
"8 c #D3D3D3",
"9 c #686868",
"0 c #686868",
"q c #6C6C6C",
"w c #C0C0C0",
"e c #9E9E9E",
"r c #C0C0C0",
"t c #9A9A9A",
"y c None",
"u c #5C5C5C",
"i c #8B8B8B",
"p c #ADADAD",
"a c #CFCFCF",
"s c #9A9A9A",
"d c #BCBCBC",
"f c None",
"g c #969696",
"h c #878787",
"j c #A9A9A9",
"k c #CBCBCB",
"l c #969696",
"z c #B8B8B8",
"x c #B8B8B8",
"c c #DADADA",
"v c #C7C7C7",
"b c #E9E9E9",
"n c #A1A1A1",
"m c #929292",
"M c None",
"N c #B4B4B4",
"B c None",
"V c None",
"C c #7F7F7F",
"Z c #A1A1A1",
"A c None",
"S c #8A8A8A",
"D c #C3C3C3",
"F c #8A8A8A",
"G c None",
"H c #9D9D9D",
"J c #8E8E8E",
"K c None",
"L c #B0B0B0",
"P c #5F5F5F",
"I c #5F5F5F",
"U c #BFBFBF",
"Y c #BFBFBF",
"T c None",
"R c #5B5B5B",
"E c #CECECE",
"W c #999999",
"Q c #DDDDDD",
"! c None",
"~ c #868686",
"^ c #A8A8A8",
"/ c #CACACA",
"( c #737373",
") c #959595",
"_ c #B7B7B7",
"` c #B7B7B7",
"' c None",
"] c #828282",
"[ c #A4A4A4",
"{ c #C6C6C6",
"} c #A0A0A0",
"| c #919191",
" . c None",
".. c #B3B3B3",
"X. c None",
"o. c #6A6A6A",
"O. c #A0A0A0",
"+. c #6E6E6E",
"@. c #C2C2C2",
"#. c #6E6E6E",
"$. c #898989",
"%. c None",
"&. c #8D8D8D",
"*. c #AFAFAF",
"=. c #D1D1D1",
"-. c #F3F3F3",
";. c #5E5E5E",
":. c #5E5E5E",
">. c #BEBEBE",
",. c #9C9C9C",
"<. c #858585",
"1. c #989898",
"2. c #898989",
"3. c #EFEFEF",
"4. c #989898",
"5. c #A7A7A7",
"6. c None",
"7. c #C9C9C9",
"8. c #EBEBEB",
"9. c #909090",
"0. c #949494",
"q. c #B6B6B6",
"w. c #B6B6B6",
"e. c #D8D8D8",
"r. c #818181",
"t. c #A3A3A3",
"y. c #C5C5C5",
"u. c #B2B2B2",
"i. c None",
"p. c #D4D4D4",
"a. c None",
"s. c None",
"d. c #7D7D7D",
"f. c #9F9F9F",
"g. c #C1C1C1",
"h. c #E3E3E3",
"j. c None",
"k. c #656565",
"l. c None",
"z. c #AEAEAE",
"x. c #656565",
"c. c #BDBDBD",
"v. c #9B9B9B",
"b. c #BDBDBD",
/* pixels */
" G y A I o.0 :.< # G ",
" 6.V = n w / 7.>.5 4 X.6. ",
" 6.s.9.o 7.j | 6 ..8 / F K 6. ",
"G V * p.d 1 ~ | l s u.^ o F X.G ",
"' = o r z.t.e 7.@.] C C ; & #.f ",
", } & f.t.s N e.x $ 5.@.v E t X.",
"P U N ^ 7 ,.a b b.0.w.5.. O.z u ",
"9 / v { X Z 8.-.g.2.. r.&.p 2 x.",
"9 / ` 1 ) @ > Q h J 4.*.2 2 2 k.",
";.c.L 1 4.7.3.y.~ - ,.W i % q.R ",
"V H =.{ X p.h.c o 7.v - d.r g a.",
"# 3 7.u.( 0.t.t.e W v.s g.2 q %.",
"G : S k j ..+ [ | m 1 Y E <. .! ",
" M l.$.& 8 x ) O z.7.2 <.j.i. ",
" i.a.+.1.z D D _ g q .i. ",
" G T B u x.x.R a.T G "
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

1969
share/pixmaps/bitcoin256.xpm Normal file

File diff suppressed because it is too large Load Diff

BIN
share/pixmaps/bitcoin32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -1,112 +1,348 @@
/* XPM */ /* XPM */
static char * bitcoin32_xpm[] = { static char *graphic[] = {
"32 32 77 1", /* width height num_colors chars_per_pixel */
" c None", "32 32 309 2",
". c #A2A1A1", /* colors */
"+ c #A1A1A1", " c None",
"@ c #A1A0A0", ". c #444444",
"# c #9F9F9F", "X c #474747",
"$ c #A7A7A7", "o c #666666",
"% c #A9A9A9", "O c #888888",
"& c #AEAEAE", "+ c None",
"* c #B0B0B0", "@ c #AAAAAA",
"= c #B1B1B1", "# c None",
"- c #A8A8A8", "$ c #CCCCCC",
"; c #A4A4A4", "% c #474747",
"> c #ACACAC", "& c #EEEEEE",
", c #B2B2B2", "* c #535353",
"' c #AAAAAA", "= c None",
") c #ABABAB", "- c #757575",
"! c #A6A6A6", "; c #979797",
"~ c #A3A3A3", ": c #B9B9B9",
"{ c #A8A7A7", "> c #DBDBDB",
"] c #A5A5A5", ", c #FDFDFD",
"^ c #ADADAD", "< c #626262",
"/ c #9E9E9E", "1 c #848484",
"( c #ADACAC", "2 c #A6A6A6",
"_ c #A2A2A2", "3 c #C8C8C8",
": c #A0A0A0", "4 c #EAEAEA",
"< c #9D9D9D", "5 c #686868",
"[ c #A5A4A4", "6 c #737373",
"} c #9C9C9C", "7 c #717171",
"| c #9B9B9B", "8 c #939393",
"1 c #979797", "9 c #B5B5B5",
"2 c #8C8C8C", "0 c #D7D7D7",
"3 c #848484", "q c #F9F9F9",
"4 c #838383", "w c #3C3C3C",
"5 c #878787", "e c #5E5E5E",
"6 c #929292", "r c #808080",
"7 c #9A9A9A", "t c #4E4E4E",
"8 c #AFAFAF", "y c None",
"9 c #8B8B8B", "u c #A2A2A2",
"0 c #7F7F7F", "i c None",
"a c #808080", "p c #C4C4C4",
"b c #7E7E7E", "a c #E6E6E6",
"c c #828282", "s c #4B4B4B",
"d c #969696", "d c None",
"e c #939292", "f c None",
"f c #999999", "g c #6D6D6D",
"g c #898989", "h c #8F8F8F",
"h c #8A8A8A", "j c #B1B1B1",
"i c #888888", "k c #D3D3D3",
"j c #959595", "l c #F5F5F5",
"k c #939393", "z c None",
"l c #909090", "x c None",
"m c #8D8D8D", "c c #434343",
"n c #9D9C9C", "v c None",
"o c #B4B4B4", "b c #5A5A5A",
"p c #B6B6B6", "n c None",
"q c #919090", "m c #7C7C7C",
"r c #A9A8A8", "M c None",
"s c #B8B8B8", "N c #9E9E9E",
"t c #BCBCBC", "B c #C0C0C0",
"u c #B5B5B5", "V c None",
"v c #C5C5C5", "C c #E2E2E2",
"w c #C1C1C1", "Z c None",
"x c #B3B3B3", "A c #5C5C5C",
"y c #C8C8C8", "S c #474747",
"z c #BFBFBF", "D c None",
"A c #B9B9B9", "F c #696969",
"B c #AAA9A9", "G c #8B8B8B",
"C c #9E9D9D", "H c None",
"D c #949494", "J c #ADADAD",
"E c #919191", "K c #CFCFCF",
"F c #8E8E8E", "L c #4A4A4A",
"G c #858585", "P c #F1F1F1",
"H c #B7B7B7", "I c None",
"I c #818181", "U c #565656",
"J c #989898", "Y c #787878",
"K c #949393", "T c #9A9A9A",
"L c #989797", "R c #BCBCBC",
" ", "E c #3F3F3F",
" .+@ ", "W c #DEDEDE",
" #$%&*==*&-; ", "Q c #6F6F6F",
" +>,')'!;~!%%)={ ", "! c None",
" -*)&'!;+##+~]%^%*/ ", "~ c #434343",
" ()&'$;_:/<</#+~!%>'[ ", "^ c #656565",
" ^%'!~+#/<}|||}/#+~!%-] ", "/ c None",
" '));_:/<}1234567<<#+~'%# ", "( c #878787",
" _&8$_/<}}790aabcd<}</+!>&e ", ") c #A9A9A9",
" *,);:/}</f2ghi3bj#<}<#~%>% ", "_ c #CBCBCB",
" ]88$_/}<#+fkllmi47_:<}<+!^8j ", "` c #EDEDED",
" ^,);:<}<+;}7djkmh;!_/}<#~%>~ ", "' c None",
" no8$_/<<#_]#:}|fk18';#<}/+!^= ", "] c #525252",
" %^);:<}<:]]_]~_:}$p^!+/}<#~%=q ", "[ c None",
" r%$_#<<#_-!!%''%]st,';:/}/+]$# ", "{ c None",
" ;-;:<}<:;)!'^8,u&vwp&$+/}<#~~+ ", "} c #747474",
" ]']+/}<:;-~-*=xuxyzu^]+/}<:~]+ ", "| c #6B6B6B",
" ;>-~#<</__<-*,=-xvA=%~#<}/_!$+ ", " . c #969696",
" B^>]+<}<:}f'=*)<^s8-~#<}<:;%)C ", ".. c #B8B8B8",
" !=*%~#<}/dD8=8+jEF2i9d}}/_$&u ", "X. c None",
" ou>]+<}|kD,**#|1DlmG57<:;'x* ", "o. c #DADADA",
" BH*%~#<7k<=*8&>%;+/gI7/+$^8+ ", "O. c #515151",
" :xu>]+<}1-=*8&^%]_:a4|#;',x9 ", "+. c None",
" (p*-~#/<~~_+_+#<fjIF/+$^8[ ", "@. c #FCFCFC",
" f=p>]~+:/}fJJfJ1dk6}_;'== ", "#. c None",
" +&=>-]_+#/<<<<<#:_;$)8&K ", "$. c #3F3F3F",
" [&u*^-]~+#<</+_]-)8x&| ", "%. c #464646",
" _*su8>%]~+:_;$)8oo=L ", "&. c #616161",
" L*,Au*>-]]$)&oH,>2 ", "*. c #838383",
" #*p,o=^)8,8p)f ", "=. c #A5A5A5",
" D:]^=*>_#m ", "-. c #C7C7C7",
" "}; ";. c #3B3B3B",
":. c None",
">. c #E9E9E9",
",. c #464646",
"<. c None",
"1. c #3B3B3B",
"2. c None",
"3. c #4E4E4E",
"4. c #707070",
"5. c #929292",
"6. c #676767",
"7. c #B4B4B4",
"8. c #424242",
"9. c #D6D6D6",
"0. c #F8F8F8",
"q. c #3B3B3B",
"w. c None",
"e. c None",
"r. c #5D5D5D",
"t. c None",
"y. c #7F7F7F",
"u. c None",
"i. c #A1A1A1",
"p. c #C3C3C3",
"a. c #E5E5E5",
"s. c None",
"d. c None",
"f. c None",
"g. c #373737",
"h. c None",
"j. c #4D4D4D",
"k. c #4A4A4A",
"l. c #6C6C6C",
"z. c #8E8E8E",
"x. c #424242",
"c. c None",
"v. c #B0B0B0",
"b. c #4D4D4D",
"n. c #D2D2D2",
"m. c None",
"M. c #F4F4F4",
"N. c #424242",
"B. c None",
"V. c #4D4D4D",
"C. c None",
"Z. c #7B7B7B",
"A. c #9D9D9D",
"S. c None",
"D. c #BFBFBF",
"F. c #E1E1E1",
"G. c None",
"H. c #636363",
"J. c None",
"K. c #424242",
"L. c #464646",
"P. c None",
"I. c None",
"U. c #686868",
"Y. c #8A8A8A",
"T. c #424242",
"R. c None",
"E. c #ACACAC",
"W. c #CECECE",
"Q. c None",
"!. c #424242",
"~. c #F0F0F0",
"^. c #555555",
"/. c #777777",
"(. c None",
"). c #999999",
"_. c None",
"`. c #BBBBBB",
"'. c #DDDDDD",
"]. c None",
"[. c #FFFFFF",
"{. c #424242",
"}. c None",
"|. c #868686",
" X c #A8A8A8",
".X c #CACACA",
"XX c #3E3E3E",
"oX c #ECECEC",
"OX c #454545",
"+X c #515151",
"@X c #737373",
"#X c #959595",
"$X c #B7B7B7",
"%X c #D9D9D9",
"&X c #454545",
"*X c #FBFBFB",
"=X c None",
"-X c None",
";X c #454545",
":X c #606060",
">X c #A4A4A4",
",X c #3A3A3A",
"<X c #C6C6C6",
"1X c #717171",
"2X c #E8E8E8",
"3X c #3A3A3A",
"4X c None",
"5X c None",
"6X c #4D4D4D",
"7X c #6F6F6F",
"8X c #919191",
"9X c #B3B3B3",
"0X c #4C4C4C",
"qX c None",
"wX c #D5D5D5",
"eX c #F7F7F7",
"rX c #4C4C4C",
"tX c #5C5C5C",
"yX c #A0A0A0",
"uX c #5E5E5E",
"iX c #C2C2C2",
"pX c #E4E4E4",
"aX c None",
"sX c #6D6D6D",
"dX c #494949",
"fX c None",
"gX c #6B6B6B",
"hX c #6D6D6D",
"jX c #8D8D8D",
"kX c #AFAFAF",
"lX c #D1D1D1",
"zX c None",
"xX c #F3F3F3",
"cX c None",
"vX c #454545",
"bX c #6D6D6D",
"nX c #585858",
"mX c #7A7A7A",
"MX c #414141",
"NX c #9C9C9C",
"BX c None",
"VX c #BEBEBE",
"CX c #E0E0E0",
"ZX c #414141",
"AX c #414141",
"SX c #676767",
"DX c #414141",
"FX c #898989",
"GX c #ABABAB",
"HX c #CDCDCD",
"JX c #EFEFEF",
"KX c None",
"LX c #545454",
"PX c #767676",
"IX c None",
"UX c #989898",
"YX c #BABABA",
"TX c #DCDCDC",
"RX c #FEFEFE",
"EX c #636363",
"WX c #858585",
"QX c #A7A7A7",
"!X c #C9C9C9",
"~X c #EBEBEB",
"^X c #3D3D3D",
"/X c #505050",
"(X c #727272",
")X c #696969",
"_X c #949494",
"`X c #B6B6B6",
"'X c None",
"]X c #D8D8D8",
"[X c #FAFAFA",
"{X c None",
"}X c #5F5F5F",
"|X c #818181",
" o c None",
".o c #A3A3A3",
"Xo c #C5C5C5",
"oo c #E7E7E7",
"Oo c #6E6E6E",
"+o c #909090",
"@o c #B2B2B2",
"#o c #D4D4D4",
"$o c #F6F6F6",
"%o c #5B5B5B",
"&o c #7D7D7D",
"*o c #9F9F9F",
"=o c #C1C1C1",
"-o c #E3E3E3",
";o c #656565",
":o c None",
">o c #484848",
",o c #6A6A6A",
"<o c #8C8C8C",
"1o c None",
"2o c #AEAEAE",
"3o c #353535",
"4o c #D0D0D0",
"5o c None",
"6o c #F2F2F2",
"7o c #444444",
"8o c #444444",
"9o c #575757",
"0o c #797979",
"qo c #707070",
"wo c #9B9B9B",
"eo c #BDBDBD",
"ro c #DFDFDF",
/* pixels */
" h.:o5ohXH.;osXc.:.]. ",
" V fX% vX6XU e r.^.s 8oX 4XB. ",
" P.A AXU |XQXB $ lXlX_ VX>X&o+XE uX+. ",
" m.;X* _X3 C P 0.*X[X[X@.0.& roXoh 6X8.v ",
" { ^XPX=oa.eXM.%X..u 8 8XwokX0 6oxXC VXg XX/ ",
" d ~ G 9.~.eX<X5.|Xy.mXPXOo4.<oE.v.$ l ` lX|Xq.D ",
" H 1.Y.o.$oooA.h A. .r.+X+XnXF - YXTXiX@ >.6owX|Xg.s. ",
" I.,.- wXl ro; @ 2o=.mXm _ Xo-.K r =.XoyXg g a.P 4o,o%.KX ",
" bX+XB ~.oo*oeo9 2 GX@XkX$ p -.W (Xy.Y g 7Xr.F 4 4 YXS 1X ",
" <.DX8 pX$oGX..2o.o XJ gX_ !X$ k W.] Z.0o7 g r N j xXW O MXu. ",
" 'XLX<X$o-.jXyXN >X@ ).} W W.#opXGXU y.&o_X..9.a D.n.JXB >ow. ",
"h.b.y.rol 8X8XwoN yXQXZ.8 a ]XTX~.*.7 ) =ok 9.]XCX0 2 P o.(Xt d.",
"IX7o=.& o.&o#XUX.oE.7.7XYXooC oo>.L.F =.HXlX#o-.=.m :XW 2X).T._.",
"M s eoeX: O v.eoB eo@ogX'.>.~X6opX=.: /.3 @o5.PX,o,o9o..6o9X. Z ",
"Q.9o!X$o..3 k .XXop .} $oJXM.0.[.[.).l.z.Z./.PX7XF gXGXl B dX+ ",
"Q tXW.M...wXwX.X7.Y +Xv.[.q , [.kX< tX|XWXr 0oPX( kXW.: ~.-.* 6.",
"qo%oHXM.: $ 7..o} &ooX[.RX, RXJX* &o_X<o*.1 .7.K o.wX..~.<X] 5 ",
"R.U 3 0.2oG 5.T U.-.W *X*XeX@.3 :XA.8X+oA.7.p.3 W.0 Xo..P D.>oJ.",
"! >o`.$o`.r _X_XFXEX,oRXxX~.*X_X&.8X8 yX) J @oeo$XUXEX: P j {.# ",
"e.!.i.oXTXy.i.`X.X( QX*XoX>.$o|X%o4.(X@X} /.PX%oF F }Xrooo .AXy ",
"= j.mX'.6oGX0 0 #oy.HXJXa -oa.oo-oroW TXo.]XF.tXo ^ O $o0 l.O.}.",
" 2.3.iX6o4oeoC iXY & 4 oopXCXW TX]X9.k 4olX$ dXy.Z.K & `.. f ",
" X.K.<oCXM.2o; ^ SX4op =oB =o=oB D.VXVXR iXY.mX_ YXxX> r c z ",
" 6 dX`.~X4 F U dX$.k.}Xg g F SX^ :Xb e F mXB @o>.a 7.{.#. ",
" =X&XgXK 6oa 7 (XJ 3 4o!XiXVX@ou UXN J eo$X2 pX4 _ e V.n ",
" o3Xy.wX~.~X@op 0 wXW.YXwo( |.5.A.*o .@ 4 ~X4o@X;.I ",
" G.w y.4o~Xl K @o Xr < EXOo/.&o*.NX4oxXa _ @X3of. ",
" aX,XU.: CX~.6oo.7.*o .T XD.W xX& TX7.e DXcX ",
" i OX>o( D.> 4 xX0.0.eX$oP 2X%X`.r . L 5X ",
" S.[ N.dX4.UX9X=o-.-.B j #Xl.L.x.' C. ",
" (.BXrXK.~ >o/X/X>o~ ZX0X{Xx ",
" zXqXt.)X| w.-X1o "
};

BIN
share/pixmaps/bitcoin64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

612
share/pixmaps/bitcoin64.xpm Normal file
View File

@@ -0,0 +1,612 @@
/* XPM */
static char *graphic[] = {
/* width height num_colors chars_per_pixel */
"64 64 541 2",
/* colors */
" c None",
". c None",
"X c #444444",
"o c None",
"O c #404040",
"+ c #666666",
"@ c #565656",
"# c #474747",
"$ c #888888",
"% c #4A4A4A",
"& c None",
"* c #404040",
"= c #AAAAAA",
"- c #CCCCCC",
"; c None",
": c #EEEEEE",
"> c #474747",
", c #4A4A4A",
"< c None",
"1 c #404040",
"2 c #434343",
"3 c #404040",
"4 c None",
"5 c None",
"6 c None",
"7 c #535353",
"8 c #404040",
"9 c #404040",
"0 c #757575",
"q c #404040",
"w c #979797",
"e c #B9B9B9",
"r c #404040",
"t c None",
"y c #DBDBDB",
"u c #404040",
"i c None",
"p c #404040",
"a c #FDFDFD",
"s c #404040",
"d c #474747",
"f c #4A4A4A",
"g c #404040",
"h c #626262",
"j c #848484",
"k c None",
"l c #515151",
"z c None",
"x c #A6A6A6",
"c c #C8C8C8",
"v c None",
"b c None",
"n c #EAEAEA",
"m c #515151",
"M c None",
"N c #4F4F4F",
"B c #434343",
"V c None",
"C c None",
"Z c #717171",
"A c None",
"S c #939393",
"D c None",
"F c #B5B5B5",
"G c #4A4A4A",
"H c #474747",
"J c #D7D7D7",
"K c #434343",
"L c #525252",
"P c #474747",
"I c #F9F9F9",
"U c None",
"Y c #3C3C3C",
"T c #5E5E5E",
"R c #808080",
"E c #4D4D4D",
"W c #555555",
"Q c None",
"! c #A2A2A2",
"~ c None",
"^ c #525252",
"/ c #C4C4C4",
"( c None",
") c #E6E6E6",
"_ c None",
"` c None",
"' c None",
"] c None",
"[ c #4B4B4B",
"{ c #4D4D4D",
"} c #6D6D6D",
"| c #8F8F8F",
" . c #464646",
".. c None",
"X. c None",
"o. c #B1B1B1",
"O. c None",
"+. c #D3D3D3",
"@. c #F5F5F5",
"#. c None",
"$. c None",
"%. c None",
"&. c None",
"*. c #383838",
"=. c #434343",
"-. c #5A5A5A",
";. c #434343",
":. c #7C7C7C",
">. c None",
",. c None",
"<. c #9E9E9E",
"1. c #464646",
"2. c #515151",
"3. c #4E4E4E",
"4. c #C0C0C0",
"5. c None",
"6. c #E2E2E2",
"7. c #474747",
"8. c #3F3F3F",
"9. c #474747",
"0. c #464646",
"q. c #474747",
"w. c #696969",
"e. c None",
"r. c #4A4A4A",
"t. c None",
"y. c None",
"u. c #464646",
"i. c #8B8B8B",
"p. c None",
"a. c #ADADAD",
"s. c None",
"d. c #CFCFCF",
"f. c #494949",
"g. c #464646",
"h. c #515151",
"j. c #F1F1F1",
"k. c None",
"l. c #434343",
"z. c None",
"x. c #515151",
"c. c None",
"v. c #343434",
"b. c #565656",
"n. c #787878",
"m. c None",
"M. c None",
"N. c #9A9A9A",
"B. c #4A4A4A",
"V. c #434343",
"C. c #BCBCBC",
"Z. c #3F3F3F",
"A. c #DEDEDE",
"S. c #3F3F3F",
"D. c #434343",
"F. c #3F3F3F",
"G. c None",
"H. c #4D4D4D",
"J. c #434343",
"K. c None",
"L. c #3F3F3F",
"P. c None",
"I. c #434343",
"U. c #3F3F3F",
"Y. c #656565",
"T. c None",
"R. c #3F3F3F",
"E. c #878787",
"W. c #424242",
"Q. c None",
"!. c #A9A9A9",
"~. c #464646",
"^. c #CBCBCB",
"/. c #3F3F3F",
"(. c #4D4D4D",
"). c #EDEDED",
"_. c None",
"`. c #464646",
"'. c None",
"]. c #3F3F3F",
"[. c #525252",
"{. c #464646",
"}. c None",
"|. c #747474",
" X c #3F3F3F",
".X c #969696",
"XX c #3F3F3F",
"oX c #4D4D4D",
"OX c #B8B8B8",
"+X c #555555",
"@X c #DADADA",
"#X c #545454",
"$X c #3F3F3F",
"%X c #3F3F3F",
"&X c #FCFCFC",
"*X c None",
"=X c None",
"-X c #464646",
";X c #3F3F3F",
":X c #616161",
">X c #545454",
",X c None",
"<X c #838383",
"1X c #494949",
"2X c #464646",
"3X c #A5A5A5",
"4X c None",
"5X c #C7C7C7",
"6X c #E9E9E9",
"7X c None",
"8X c None",
"9X c None",
"0X c #4E4E4E",
"qX c #707070",
"wX c #494949",
"eX c #494949",
"rX c #929292",
"tX c #424242",
"yX c #B4B4B4",
"uX c #D6D6D6",
"iX c None",
"pX c #F8F8F8",
"aX c #3B3B3B",
"sX c #424242",
"dX c #5D5D5D",
"fX c #545454",
"gX c #424242",
"hX c #7F7F7F",
"jX c #A1A1A1",
"kX c #545454",
"lX c None",
"zX c #C3C3C3",
"xX c #E5E5E5",
"cX c None",
"vX c #4D4D4D",
"bX c #545454",
"nX c None",
"mX c #4A4A4A",
"MX c None",
"NX c None",
"BX c None",
"VX c #6C6C6C",
"CX c None",
"ZX c #4D4D4D",
"AX c None",
"SX c #4C4C4C",
"DX c #8E8E8E",
"FX c #B0B0B0",
"GX c #D2D2D2",
"HX c None",
"JX c None",
"KX c #F4F4F4",
"LX c #454545",
"PX c None",
"IX c None",
"UX c #595959",
"YX c #424242",
"TX c #454545",
"RX c #7B7B7B",
"EX c #9D9D9D",
"WX c None",
"QX c #BFBFBF",
"!X c #E1E1E1",
"~X c #464646",
"^X c #505050",
"/X c None",
"(X c #464646",
")X c #464646",
"_X c None",
"`X c #464646",
"'X c #686868",
"]X c #424242",
"[X c #8A8A8A",
"{X c #ACACAC",
"}X c #505050",
"|X c #424242",
" o c #484848",
".o c #CECECE",
"Xo c #F0F0F0",
"oo c #494949",
"Oo c #424242",
"+o c #424242",
"@o c #555555",
"#o c #777777",
"$o c None",
"%o c #454545",
"&o c #999999",
"*o c #3E3E3E",
"=o c #4C4C4C",
"-o c #BBBBBB",
";o c None",
":o c #424242",
">o c #DDDDDD",
",o c #424242",
"<o c None",
"1o c #424242",
"2o c None",
"3o c #3E3E3E",
"4o c #4C4C4C",
"5o c #424242",
"6o c #494949",
"7o c #3E3E3E",
"8o c #424242",
"9o c None",
"0o c #646464",
"qo c None",
"wo c #868686",
"eo c None",
"ro c #A8A8A8",
"to c #CACACA",
"yo c #414141",
"uo c #ECECEC",
"io c #4C4C4C",
"po c #454545",
"ao c None",
"so c #3E3E3E",
"do c #454545",
"fo c #515151",
"go c #3E3E3E",
"ho c #737373",
"jo c #3E3E3E",
"ko c #959595",
"lo c None",
"zo c #B7B7B7",
"xo c #3E3E3E",
"co c #505050",
"vo c #454545",
"bo c #D9D9D9",
"no c #3E3E3E",
"mo c #FBFBFB",
"Mo c None",
"No c #3E3E3E",
"Bo c None",
"Vo c None",
"Co c None",
"Zo c #414141",
"Ao c #606060",
"So c #828282",
"Do c #575757",
"Fo c #A4A4A4",
"Go c #454545",
"Ho c #C6C6C6",
"Jo c #E8E8E8",
"Ko c None",
"Lo c #484848",
"Po c #4F4F4F",
"Io c None",
"Uo c None",
"Yo c None",
"To c #4D4D4D",
"Ro c #6F6F6F",
"Eo c None",
"Wo c #919191",
"Qo c None",
"!o c #B3B3B3",
"~o c #D5D5D5",
"^o c #484848",
"/o c None",
"(o c #F7F7F7",
")o c #454545",
"_o c #535353",
"`o c #5C5C5C",
"'o c None",
"]o c #7E7E7E",
"[o c None",
"{o c #414141",
"}o c #535353",
"|o c #A0A0A0",
" O c None",
".O c #484848",
"XO c #C2C2C2",
"oO c #454545",
"OO c #414141",
"+O c #E4E4E4",
"@O c None",
"#O c #414141",
"$O c #4C4C4C",
"%O c #494949",
"&O c #494949",
"*O c #414141",
"=O c #6B6B6B",
"-O c #8D8D8D",
";O c None",
":O c #4C4C4C",
">O c #AFAFAF",
",O c #535353",
"<O c #D1D1D1",
"1O c None",
"2O c #F3F3F3",
"3O c #444444",
"4O c None",
"5O c None",
"6O c None",
"7O c #585858",
"8O c #7A7A7A",
"9O c #414141",
"0O c None",
"qO c #9C9C9C",
"wO c #4C4C4C",
"eO c #BEBEBE",
"rO c #E0E0E0",
"tO c #454545",
"yO c #575757",
"uO c #454545",
"iO c #454545",
"pO c #676767",
"aO c None",
"sO c #898989",
"dO c #4F4F4F",
"fO c None",
"gO c #ABABAB",
"hO c #5A5A5A",
"jO c #CDCDCD",
"kO c #444444",
"lO c #EFEFEF",
"zO c #414141",
"xO c None",
"cO c #414141",
"vO c #545454",
"bO c #767676",
"nO c #414141",
"mO c #414141",
"MO c #989898",
"NO c None",
"BO c #414141",
"VO c #BABABA",
"CO c #575757",
"ZO c #DCDCDC",
"AO c #414141",
"SO c #414141",
"DO c #FEFEFE",
"FO c #535353",
"GO c #4B4B4B",
"HO c None",
"JO c #484848",
"KO c #414141",
"LO c None",
"PO c None",
"IO c #565656",
"UO c None",
"YO c #636363",
"TO c #535353",
"RO c None",
"EO c #858585",
"WO c #A7A7A7",
"QO c None",
"!O c #C9C9C9",
"~O c #4B4B4B",
"^O c None",
"/O c #EBEBEB",
"(O c #505050",
")O c #444444",
"_O c #727272",
"`O c #949494",
"'O c #B6B6B6",
"]O c None",
"[O c #535353",
"{O c #484848",
"}O c #D8D8D8",
"|O c #484848",
" + c #FAFAFA",
".+ c None",
"X+ c #484848",
"o+ c None",
"O+ c #404040",
"++ c #3D3D3D",
"@+ c #5F5F5F",
"#+ c None",
"$+ c #818181",
"%+ c #444444",
"&+ c #535353",
"*+ c #A3A3A3",
"=+ c None",
"-+ c None",
";+ c #C5C5C5",
":+ c #E7E7E7",
">+ c None",
",+ c #4E4E4E",
"<+ c None",
"1+ c #4C4C4C",
"2+ c None",
"3+ c #6E6E6E",
"4+ c None",
"5+ c #909090",
"6+ c None",
"7+ c #B2B2B2",
"8+ c None",
"9+ c #D4D4D4",
"0+ c #F6F6F6",
"q+ c None",
"w+ c #404040",
"e+ c None",
"r+ c #474747",
"t+ c #404040",
"y+ c #444444",
"u+ c #5B5B5B",
"i+ c #444444",
"p+ c #7D7D7D",
"a+ c #4F4F4F",
"s+ c #474747",
"d+ c None",
"f+ c #9F9F9F",
"g+ c #4F4F4F",
"h+ c None",
"j+ c #C1C1C1",
"k+ c #444444",
"l+ c None",
"z+ c #E3E3E3",
"x+ c #474747",
"c+ c #404040",
"v+ c None",
"b+ c #484848",
"n+ c None",
"m+ c #484848",
"M+ c #404040",
"N+ c #6A6A6A",
"B+ c None",
"V+ c #444444",
"C+ c #8C8C8C",
"Z+ c None",
"A+ c #AEAEAE",
"S+ c #525252",
"D+ c None",
"F+ c #D0D0D0",
"G+ c #F2F2F2",
"H+ c #474747",
"J+ c #525252",
"K+ c #353535",
"L+ c #434343",
"P+ c #575757",
"I+ c #797979",
"U+ c #9B9B9B",
"Y+ c #4B4B4B",
"T+ c #BDBDBD",
"R+ c #444444",
"E+ c #DFDFDF",
"W+ c None",
"Q+ c #404040",
"!+ c #444444",
"~+ c None",
"^+ c #404040",
/* pixels */
" o <o>.loD+4+l+T.t.lXC D+y.>.cX ",
" cXi ,XEoO.{ GO0.~.d Go2XJO# x+=o,+9X_ o+( 9o ",
" AXc.K.SXu.OOO mOD.q.mX1+ToTo1+&OiO1oq L.gX.Ol h+t 4 ",
" >.s.HOr+M+9 )XN 7O:X'XqX|.n.]op+n.hoRo+ @+@o[ J.so*OeXq+UOAX ",
" MXP.RO2 U.uOfo@+} p+| jXa.zoT+QXzXXOQXT+zogOf+-ORXw.-.1+SOF.0.,.@O5 ",
" o >+D L+7o)XP+w.]ow o.XO- +.uX}O@Xy ZOZOy boJ ~o<O^.j+A+`OI+YO(O1oF.^oQ.z o ",
" MX; o8.R+b.N+<XFo4.d.uXy E+6.xX:+6Xn /O/O6XJo) +O!X>obo9+- T+jXhX0o0XBOgXPoP.<o ",
" 6+$o3O/.0XY.hX3X/ GXboE+xX6X: G+KX0+(o(o(o(o(o0+@.KXXo/O:+z+>oJ F+j+jXI+`o`XR.wXBXAX ",
" Uo1OO+V.7OqX.XT+<O@X!X:+).2O0+@.: z+~o5XeOzozoeO5XuX+OlO@.0+j./OxXA.J .oe Wow.0Xjo%o'.( ",
" y.z.t+~X@+p+!.^.J E+JolO@.@.6X.oa.rXR bOZ } N+'XpOpO=ObOC+A++.uo@.2OuoxX>o~o5XFobOvOp B Q . ",
" Uoz.c+%O0oEOzo<Oy +O).@.0+6.OX5+:.RXR <X<XSohX:.I+0 Z } } n.DX&o! j+) 0+G+n !X}OjOo.hXUXp K -+( ",
" 6+#.t+%OY.-OT+9+E+Joj.0+:+e -O<Xi.rXWo-O$ j $+p+8O#o0 n.sO*+VO5Xc -o3X|oXOn KX: xXy F+zoj -.SO)O6 AX ",
" <o$oZo7.YOC+j+uX!X/OKXKXd..XwokoEXqOMO| RXw.YOAoT dXT w.I+E.DXMO!o- +.<Oj+*+FouXKXj.:+ZO<OVOj 7O%X%o;O<o ",
" o v LXV.AoEOT+~o!Xuo0+lO-oi.koFo3X! <.&owoP+X `X`XiOq.1+(Ofo[.fovO| ;++.~oJ <OA+i.C.XoG+:+ZO<Ozo]ovOjoioP.o ",
" _.f.* UXp+zo9+rO/O0+uo>O-O*+A+gOroFo|oMOI+1+<.5XHoHo5X5X5X5X!O7+-.DXHo<O<OHoA+DXVX+ gO).2O:+ZOd.FX|.1+U.m y. ",
" MXQo8.N qX!.F+A./O@.uoa.rXA+F o.a.!.3X|o`O=Ou++.+.jO.od.<OGX+.+OQXdX<.XOOXf+wobORo} Y.YOro: j.xXbo- ! + X %+v+cX ",
" _X3OtO0o`Otoy JoKXlOFXkoF VOzo!oA+WO! jX&oY.n.>oXOQXj+zX/ Ho!O!X&ou+DXWo$+n.0 hoqXRo=O0oYO>Oj.lOz+uX/ -O7Oxo~O'o ",
" AXHO3oP+p+-oJ +Oj.@.eOkoe j+T+'Oa.x Fo!.{X.XUXU+>ozXzX;+5X!OtoF+!XZ fo0 RX8On.bO|.Z Ro} N+YO'XXOKXuoE+GXF 0 mX9OIoMX ",
" B+kO9.N+*+d.E+).0++.w OX;+T+FXWOFoWO= {X!.E.@oT+J Ho5X!O^.jO.obo<O[.u+8Op+RXI+#o|._OqX3+3+n.wokoZO2O:+@XtoqOT %XG 'o ",
" 4 p.S.UXSoXObo:+@.6X|o{XeOFX3X! Fox ro!.gOFo|.h J <Oto- jOd.<O+.z+!o`X'Xp+]o:.8On.0 |.bOEO! 4.GXF = ).lO6.9+-o8OmXYXQO5 ",
" iX .(Xw.! <OrO: @.C.-Ox |o<.|o! Fox WO!.!.U+h ]o6.d..oF+GX+.~oboJoC+&O_OR hXp+8OI+R S >O5X9+boy +.*+!OKX6X@X^.U+`o%XdOV ",
" 9om.#O7 p+eO}O) KX+Oi.C+N.qO<.f+! *+3XWOroWO| @o*+z+<OGX9+uXJ boE+6.pOvO8O$+hXR [X|oe toGX~oJ bo@Xy zXFo6XlO!X+.zo_O`X-XYoo ",
" HXE 3 AokojOA.uo@.VOp+ko&oqO<.f+jX! Fox x f+n.[.HorO~ouX}O@XZOA.:+.o(Oh hXE.`OgOQX^.d.F+GX9+uX}O@XZOJ 3Xc 2O:+}OHoi.fo/.Z+eo ",
" iXTXb+} a.9+z+G+/OWowow &oU+EX<.|ojXjX|o|o&o=OpOE+>oboy >oA.rO6.).a.q._O.XA+4.c ^.jOd.F+<O+.~oJ }OJ toN.w : uoA..o3XAo%X(.xO ",
" ~ w+fo:.4.boJo@.GX:.| w MON.qOEXEX|ox gOa.U+T E.6X>o>oE+!Xz+xXJo: <X&ORXWo3XC.5Xto- .od.<OGX+..oC.f+$+=O} }OXo6.+.OXqXI.> M. ",
"cX[oQ+-.C+to>ouo0+7+RXrX.Xw &oEX3Xa.yX'OyXA+5+b.{X/OrO6.+OxX:+6X).6.P+v.fo} |.*+zX!O^.jO.o- XO{X5+8ORo=O'X@+zo2O) J zXSomX;.4O9o",
"AX#+nOYOEXF+rOXoXo.X$+rXMO! A+OXeOT+-oOXF gO$+UXjOn +O) Jon /O).2OF+u+n.'O!o@+w j+c !O/ yXqOEOn.hoqX3+VXN+@+.Xj.n @XtoS [.1 e.MX",
". , !+w.!.9+6.2O) E.Wo= -o;+5X;+XOQXC.e 'OWOqX} xXn 6X/O).lOXoG+pX).ZO2O +WOu+|oQXe x Wo$+8O#o0 |.Z Ro} =OYOp+6X).>o.of+-.r >X( ",
"fO1.m+qX!ouXxXKX@X`O4.d.F+jO!OHozX4.T+VO'O<.@+DXlOuo).lOj.2O@.(omoa a DOKX$+YOMOMOsO$+]o:.8On.bO|._OqX3+VXpOqXA.XorOF+gO:Xs x.%.",
"<+yo1+|.-o}O) 0+F+*+<O+.F+.o^.5X/ j+eOzo= <X(OyX2OXoG+KX@.(oI mo&XDOmo).QXUXAoR j <XSohXp+RXI+#o0 hoZ Z I+i.E.~oj.!XGXFX+ KOTO2o",
"/o{.0XbOT+boJo(o!Ox 9+~o<Od.- c / -o!.Wo#o@ovO~o@.KX0+pX +&Xa DO@.9+*+qX(O[.hoEOwoEO<X$+]o:.8On.bO#oj f+eO.of+d.G+6.+.yX=O8oL n+",
"l+d N 8OeOboJo0+/ WO~ouX+.F+^.4.>O`ORo@o[.VX= G+(opX +&Xa DOa moa.(OmXUXVX:.wo$ E.EO<X$+hX:.RXhX5+= / +.bo9+jXtoG+6.+.zoqX8og+` ",
"lXd N I+eOboJo0+;+WOuXJ d.4.A+|ow bO[.$ zX6XpXmo&Xa a DOa &XmoXo|.[ 0 woC+-OC+[X$ woj So$+E.&oo./ .o<O~o}OGXjXtoG+6.+.zoRo8oa+Ko",
"]O`.To0 C.bo:+0+to3XjOT+roU+MON.rX0o3+:+momo&Xa DODO&X&X +I I ZOUXY.DXS rX5+-Oi.$ wowo| jXyXj+5Xto.oF++.J +.|oF+G+!X+.!oN+8o[O7X",
"< W.mXhoVOJ ) 0+F+-OEX.X.Xw MO&o[X7OrX(o&XmoDOa &XmoI pX0+0+(oC.1+bO`OkoS 5+DXi.i.ko3XyXC.4.XOHo!O- d.GX~oGX|ouXj.rO<O>OY.KOFO;o",
"fOs+q.3+7+~o+OKXy p+C+S ko.XMOMOE.dXzo) T+4.I +I pX0+@.2OG+KX`ON j w .XrXDX| MOx FXF e -oeOj+/ 5X^..oF+- 'O| rOlOA.d.= @+s }X_.",
"Uo% ,o+ ro+.6.j.:+woE.S `O.Xw w i.Z -O0o*.&o(o(o0+@.2OG+XoXon Ro`o-O`OWorXN.Fo= A+o.yXzoe C.QXXO;+HoQX= -O3+$+6XuoZOjOEXP+q #XHX",
"AXBo8 AoU+d.A.: j.&oR rXS kow MOko$ 0 P+I.4.pXKXG+j.Xo: ).Xo9+foAo<XsO| .XN.EXf+! 3XWO= a.>O7+yXa.N.So_ON+T &oXoJoboc 5+N zO] 5 ",
"cX.+Z.b.[Xc y n @.F 8O5+S .XEX!.zoT+FXRX+ E+KXj.lO: )./On XoFXK+`Xu+:X0oY.+ pOw.=OVX3+RoZ qXVX=OZ _OqX} w.Ao-oG++O~o4.]oq.)o..9o",
" VotXToI+T+J ) KXuXp+5+*+F / - jO!OF _Oj : Xo: uo/On JoJo2OOXqX|.n.I+I+8O8ORX8ORXRXRX:.RXn.UXKOYOZ Z 3++ Roy lOrO<OF VXKOr.$. ",
" 8+^oJ.w.= GX!XlO).qOgO<O~o+.<O.o!O= 0oroG+uo/O6XJo:+xXxXXo).:+:+) ) xXxXxX+O+Oz+6.6.6.6.:+E.8opOhoZ 3+:XkolOn y - jX-.$X^X_. ",
" >.*X].u+5+toy n @.Hox 9+}O~oGXd.5XU+h tolOJo:+) xXz+6.!XrOrOA.>oZOy @X}OJ uX~o+.GX<OF++.!X'XmX3+|._OVXpO5XG++OuXzXwo[ ]X=+4 ",
" 9oJX{oTo#oVOuXz+G+Jo*+XO}OuX+.F+zX$ qXz+n xX+Oz+6.rOE+A.ZOy @X}OJ uX9++.GXF+d..ojO^.to~ojOToP+hobO0 =ODX/OuoA.F+7+=O8oB.T.o ",
" CX1XAOYOEX.oZO/O@.5X! <OJ 9+^.{X0oE.).+O6.!XrOA.>oZO@Xbo}OuX~o9++.<OF+d.jO- ^.toc 5Xy {X8oYO:.C+qO[X- G+xXJ c kovOBOW _. ",
" MXnXZ.fop+T+uXz+j.uoWO!o^.F `OVXiO!.2Ouo/On 6XJo:+:+) xX+O+O6.6.!XrOE+E+A.>oZOy @Xy xXwomX$ 'O^.>OA+: uoA.F+zo_OiOH d+<o ",
" @Ox+1oYOEX- y JoKXbo| p+_ON+P+;XsOgOgOgOgO= = gOgOgO{X{X{X{X{XgOgOgOgOgOgO= = = gOFodXbOj+@XXOjXE+Xoz+uX5X.Xb.$X}XiX ",
" eo5O*o0Xn.'O+.rO).@.4.+ YOpOUX;XaXY Y ++++;X8om+To(O(ON 0XTo1+[ mX&Om+q.`XiOiO&ON 7 Y.f+- c jXd.G+:+y .oFX} I.P G.MX ",
" 0OLor `oDX;+J z+Xoj.>O0oYOY.dXu+`o@+YO3+R 5+MOMOkoS 5+DXi.sOwoj $+]o8On.:.EODX`O&oWOeO4.f+zXXo/OA.GX4.woN 9 }oD+ ",
" <o~+sX`X'XjX^.@X) j.lOgOY.YO=ORoI+DXroC.Ho;+j+eOVOzoyXFXa.= x jXN.`O`OqOFo= FXF -oQXzoN.T+lO).!X~oHoN.`os Y+MocX ",
" A Bo3o0X|.>OF+ZO:+G+lO7+N+Z U+T+F+9+<O.o^.5XXOQXC.e F FXroqOS 5+koU+jXx gOo.F OX!..Xj+lO).6.J torow.X k+e+Uo ",
" o W+f XvO:.F <OZO) j.G+Ho`OFX+.@XJ +.F+- c / j+T+'O!.w [XE.i.5+koN.f+Fo!.a.gOw w jOXo).6.}O- A+hom+cO_oo+ ",
" cX_ g.u 7OSoe <Oy xXlO@.>ogO! 4.GX+.<OjOto/ e 3XDXhXp+R EOsODXrXw qOjXjX.Xi.roE+G+/O!XJ - 7+n.1+$XcoLOcX ",
" 4 k pop UXSoF d.boz+uo2O: !O*+! zoHo5XOXqO$+ho_O0 8O]oSoE.i.5+S Wo[Xj N.- : j.6XE+uX^.>On.To$X$O O4 ",
" 6+=Xvop b.:.>O^.uXE+:+lOKXn !Ox w j } 0oY.w.} Z bOI+p+hXhXp+8OSof+^./O2Ouo+OZOGX5Xro_O[ $X:Ok.>. ",
" 6OCodo$Xfo_O|o/ GXy 6.6XXoKXlOy e w p+Ro+ Y.Y.'X=O_ORXsOf+T+ZOlOG+).) A.J d.4.N.w.m+$XvXk.^O ",
" 6+& H+gomX0oC+F - 9+y !X:+).G+KXG+n E++.^.;+Ho- 9+rO/OG+2OXo/OxXE+bo<Oc o.wou+I.+oco OAX ",
" qoM 4o^+5ob.hoU+C.- 9+boA.z+Jo/O: Xo2O2O2O2OG+j.Xo).n ) !X>oJ <O!OOX.XVX0Xs oOfXLOMX ",
" cX5.NOvoXXq.u+#oN.zo5Xd.9+}Oy A.!X6.z++Oz+z+6.rO>o@XJ +.jO/ !o`OZ 7 I.nOwOe+o+cX ",
" o . WXH.=.Nom+7ORo[X3XOX/ ^.d.GX+.9+~o9+9++.<O.otoXO'OjXEOw.[.I.no|OkXU Uo ",
" <o&.b oXy+$XX 0XdX3+R S f+gOFXyXOXzo!oFX= EXWop+w.P+&OKOBO{Oh.G.t cX ",
" MX'oPO2.6o|X%X8oq.N b.T h 'X} VXpO:X`ovO1+iOg $XV+3.Dod+iX8X ",
" <o>+M X.S+ooi+Oor s g KOKOKOg g s :ol.X+ZXbX4XaO_.<o ",
" o 4 xO}.PXNXIOJ+@ +X^ &+COyO,OhO2+..$._.4 ",
" 9oMX( %./XaoKoKo' ;o_.IXMX9o "
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 151 KiB

37
share/qt/Info.plist Normal file
View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
<dict>
<key>CFBundleIconFile</key>
<string>casinocoin.icns</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleGetInfoString</key>
<string>$VERSION, Copyright © 2009-$YEAR The Bitcoin developers</string>
<key>CFBundleShortVersionString</key>
<string>$VERSION</string>
<key>CFBundleVersion</key>
<string>$VERSION</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleExecutable</key>
<string>CasinoCoin-Qt</string>
<key>CFBundleIdentifier</key>
<string>org.casinocoin.CasinoCoin-Qt</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>org.casinocoin.CasinoCoinPayment</string>
<key>CFBundleURLSchemes</key>
<array>
<string>casinocoin</string>
</array>
</dict>
</array>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>

View File

@@ -0,0 +1,29 @@
#!/usr/bin/env python
# Jonas Schnelli, 2013
# make sure the CasinoCoin-Qt.app contains the right plist (including the right version)
# fix made because of serval bugs in Qt mac deployment (https://bugreports.qt-project.org/browse/QTBUG-21267)
from string import Template
from datetime import date
bitcoinDir = "./";
inFile = bitcoinDir+"/share/qt/Info.plist"
outFile = "CasinoCoin-Qt.app/Contents/Info.plist"
version = "unknown";
fileForGrabbingVersion = bitcoinDir+"bitcoin-qt.pro"
for line in open(fileForGrabbingVersion):
lineArr = line.replace(" ", "").split("=");
if lineArr[0].startswith("VERSION"):
version = lineArr[1].replace("\n", "");
fIn = open(inFile, "r")
fileContent = fIn.read()
s = Template(fileContent)
newFileContent = s.substitute(VERSION=version,YEAR=date.today().year)
fOut = open(outFile, "w");
fOut.write(newFileContent);
print "Info.plist fresh created"

View File

@@ -5,7 +5,7 @@ SetCompressor /SOLID lzma
# General Symbol Definitions # General Symbol Definitions
!define REGKEY "SOFTWARE\$(^Name)" !define REGKEY "SOFTWARE\$(^Name)"
!define VERSION 1.0.0.4 !define VERSION 1.1.0.0
!define COMPANY "CasinoCoin project" !define COMPANY "CasinoCoin project"
!define URL http://www.casinocoin.org/ !define URL http://www.casinocoin.org/
@@ -45,13 +45,13 @@ Var StartMenuGroup
!insertmacro MUI_LANGUAGE English !insertmacro MUI_LANGUAGE English
# Installer attributes # Installer attributes
OutFile casinocoin-1.0.0.4-win32-setup.exe OutFile casinocoin-1.1.0.0-win32-setup.exe
InstallDir $PROGRAMFILES\CasinoCoin InstallDir $PROGRAMFILES\CasinoCoin
CRCCheck on CRCCheck on
XPStyle on XPStyle on
BrandingText " " BrandingText " "
ShowInstDetails show ShowInstDetails show
VIProductVersion 1.0.0.4 VIProductVersion 1.1.0.0
VIAddVersionKey ProductName CasinoCoin VIAddVersionKey ProductName CasinoCoin
VIAddVersionKey ProductVersion "${VERSION}" VIAddVersionKey ProductVersion "${VERSION}"
VIAddVersionKey CompanyName "${COMPANY}" VIAddVersionKey CompanyName "${COMPANY}"
@@ -67,7 +67,7 @@ Section -Main SEC0000
SetOutPath $INSTDIR SetOutPath $INSTDIR
SetOverwrite on SetOverwrite on
File ../release/casinocoin-qt.exe File ../release/casinocoin-qt.exe
File /oname=license.txt ../COPYING File /oname=COPYING.txt ../COPYING
File /oname=readme.txt ../doc/README_windows.txt File /oname=readme.txt ../doc/README_windows.txt
SetOutPath $INSTDIR\daemon SetOutPath $INSTDIR\daemon
File ../src/casinocoind.exe File ../src/casinocoind.exe
@@ -99,9 +99,9 @@ Section -post SEC0001
WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1 WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1
WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1 WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1
WriteRegStr HKCR "casinocoin" "URL Protocol" "" WriteRegStr HKCR "casinocoin" "URL Protocol" ""
WriteRegStr HKCR "casinocoin" "" "URL:Bitcoin" WriteRegStr HKCR "casinocoin" "" "URL:CasinoCoin"
WriteRegStr HKCR "casinocoin\DefaultIcon" "" $INSTDIR\casinocoin-qt.exe WriteRegStr HKCR "casinocoin\DefaultIcon" "" $INSTDIR\casinocoin-qt.exe
WriteRegStr HKCR "casinocoin\shell\open\command" "" '"$INSTDIR\casinocoin-qt.exe" "$$1"' WriteRegStr HKCR "casinocoin\shell\open\command" "" '"$INSTDIR\casinocoin-qt.exe" "%1"'
SectionEnd SectionEnd
# Macro for selecting uninstaller sections # Macro for selecting uninstaller sections
@@ -120,7 +120,7 @@ done${UNSECTION_ID}:
# Uninstaller sections # Uninstaller sections
Section /o -un.Main UNSEC0000 Section /o -un.Main UNSEC0000
Delete /REBOOTOK $INSTDIR\casinocoin-qt.exe Delete /REBOOTOK $INSTDIR\casinocoin-qt.exe
Delete /REBOOTOK $INSTDIR\license.txt Delete /REBOOTOK $INSTDIR\COPYING.txt
Delete /REBOOTOK $INSTDIR\readme.txt Delete /REBOOTOK $INSTDIR\readme.txt
RMDir /r /REBOOTOK $INSTDIR\daemon RMDir /r /REBOOTOK $INSTDIR\daemon
RMDir /r /REBOOTOK $INSTDIR\src RMDir /r /REBOOTOK $INSTDIR\src

View File

@@ -3,6 +3,7 @@
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include "addrman.h" #include "addrman.h"
#include "hash.h"
using namespace std; using namespace std;
@@ -187,7 +188,7 @@ int CAddrMan::ShrinkNew(int nUBucket)
} }
assert(mapInfo.count(nOldest) == 1); assert(mapInfo.count(nOldest) == 1);
CAddrInfo &info = mapInfo[nOldest]; CAddrInfo &info = mapInfo[nOldest];
if (--info.nRefCount == 0) if (--info.nRefCount == 0)
{ {
SwapRandom(info.nRandomPos, vRandom.size()-1); SwapRandom(info.nRandomPos, vRandom.size()-1);
vRandom.pop_back(); vRandom.pop_back();
@@ -241,7 +242,7 @@ void CAddrMan::MakeTried(CAddrInfo& info, int nId, int nOrigin)
infoOld.nRefCount = 1; infoOld.nRefCount = 1;
// do not update nTried, as we are going to move something else there immediately // do not update nTried, as we are going to move something else there immediately
// check whether there is place in that one, // check whether there is place in that one,
if (vNew.size() < ADDRMAN_NEW_BUCKET_SIZE) if (vNew.size() < ADDRMAN_NEW_BUCKET_SIZE)
{ {
// if so, move it back there // if so, move it back there
@@ -410,7 +411,7 @@ CAddress CAddrMan::Select_(int nUnkBias)
fChanceFactor *= 1.2; fChanceFactor *= 1.2;
} }
} else { } else {
// use an new node // use a new node
double fChanceFactor = 1.0; double fChanceFactor = 1.0;
while(1) while(1)
{ {

View File

@@ -117,7 +117,7 @@ public:
// * Bucket selection is based on cryptographic hashing, using a randomly-generated 256-bit key, which should not // * Bucket selection is based on cryptographic hashing, using a randomly-generated 256-bit key, which should not
// be observable by adversaries. // be observable by adversaries.
// * Several indexes are kept for high performance. Defining DEBUG_ADDRMAN will introduce frequent (and expensive) // * Several indexes are kept for high performance. Defining DEBUG_ADDRMAN will introduce frequent (and expensive)
// consistency checks for the entire datastructure. // consistency checks for the entire data structure.
// total number of buckets for tried addresses // total number of buckets for tried addresses
#define ADDRMAN_TRIED_BUCKET_COUNT 64 #define ADDRMAN_TRIED_BUCKET_COUNT 64
@@ -174,13 +174,13 @@ private:
// last used nId // last used nId
int nIdCount; int nIdCount;
// table with information about all nId's // table with information about all nIds
std::map<int, CAddrInfo> mapInfo; std::map<int, CAddrInfo> mapInfo;
// find an nId based on its network address // find an nId based on its network address
std::map<CNetAddr, int> mapAddr; std::map<CNetAddr, int> mapAddr;
// randomly-ordered vector of all nId's // randomly-ordered vector of all nIds
std::vector<int> vRandom; std::vector<int> vRandom;
// number of "tried" entries // number of "tried" entries
@@ -214,7 +214,7 @@ protected:
// This is the only place where actual deletes occur. // This is the only place where actual deletes occur.
// They are never deleted while in the "tried" table, only possibly evicted back to the "new" table. // They are never deleted while in the "tried" table, only possibly evicted back to the "new" table.
int ShrinkNew(int nUBucket); int ShrinkNew(int nUBucket);
// Move an entry from the "new" table(s) to the "tried" table // Move an entry from the "new" table(s) to the "tried" table
// @pre vvUnkown[nOrigin].count(nId) != 0 // @pre vvUnkown[nOrigin].count(nId) != 0
void MakeTried(CAddrInfo& info, int nId, int nOrigin); void MakeTried(CAddrInfo& info, int nId, int nOrigin);
@@ -253,8 +253,8 @@ public:
// * nNew // * nNew
// * nTried // * nTried
// * number of "new" buckets // * number of "new" buckets
// * all nNew addrinfo's in vvNew // * all nNew addrinfos in vvNew
// * all nTried addrinfo's in vvTried // * all nTried addrinfos in vvTried
// * for each bucket: // * for each bucket:
// * number of elements // * number of elements
// * for each element: index // * for each element: index

258
src/alert.cpp Normal file
View File

@@ -0,0 +1,258 @@
//
// Alert system
//
#include <algorithm>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/replace.hpp>
#include <boost/foreach.hpp>
#include <map>
#include "alert.h"
#include "key.h"
#include "net.h"
#include "sync.h"
#include "ui_interface.h"
using namespace std;
map<uint256, CAlert> mapAlerts;
CCriticalSection cs_mapAlerts;
static const char* pszMainKey = "040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9";
static const char* pszTestKey = "04302390343f91cc401d56d68b123028bf52e5fca1939df127f63c6467cdf9c8e2c14b61104cf817d0b780da337893ecc4aaff1309e536162dabbdb45200ca2b0a";
void CUnsignedAlert::SetNull()
{
nVersion = 1;
nRelayUntil = 0;
nExpiration = 0;
nID = 0;
nCancel = 0;
setCancel.clear();
nMinVer = 0;
nMaxVer = 0;
setSubVer.clear();
nPriority = 0;
strComment.clear();
strStatusBar.clear();
strReserved.clear();
}
std::string CUnsignedAlert::ToString() const
{
std::string strSetCancel;
BOOST_FOREACH(int n, setCancel)
strSetCancel += strprintf("%d ", n);
std::string strSetSubVer;
BOOST_FOREACH(std::string str, setSubVer)
strSetSubVer += "\"" + str + "\" ";
return strprintf(
"CAlert(\n"
" nVersion = %d\n"
" nRelayUntil = %"PRI64d"\n"
" nExpiration = %"PRI64d"\n"
" nID = %d\n"
" nCancel = %d\n"
" setCancel = %s\n"
" nMinVer = %d\n"
" nMaxVer = %d\n"
" setSubVer = %s\n"
" nPriority = %d\n"
" strComment = \"%s\"\n"
" strStatusBar = \"%s\"\n"
")\n",
nVersion,
nRelayUntil,
nExpiration,
nID,
nCancel,
strSetCancel.c_str(),
nMinVer,
nMaxVer,
strSetSubVer.c_str(),
nPriority,
strComment.c_str(),
strStatusBar.c_str());
}
void CUnsignedAlert::print() const
{
printf("%s", ToString().c_str());
}
void CAlert::SetNull()
{
CUnsignedAlert::SetNull();
vchMsg.clear();
vchSig.clear();
}
bool CAlert::IsNull() const
{
return (nExpiration == 0);
}
uint256 CAlert::GetHash() const
{
return Hash(this->vchMsg.begin(), this->vchMsg.end());
}
bool CAlert::IsInEffect() const
{
return (GetAdjustedTime() < nExpiration);
}
bool CAlert::Cancels(const CAlert& alert) const
{
if (!IsInEffect())
return false; // this was a no-op before 31403
return (alert.nID <= nCancel || setCancel.count(alert.nID));
}
bool CAlert::AppliesTo(int nVersion, std::string strSubVerIn) const
{
// TODO: rework for client-version-embedded-in-strSubVer ?
return (IsInEffect() &&
nMinVer <= nVersion && nVersion <= nMaxVer &&
(setSubVer.empty() || setSubVer.count(strSubVerIn)));
}
bool CAlert::AppliesToMe() const
{
return AppliesTo(PROTOCOL_VERSION, FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, std::vector<std::string>()));
}
bool CAlert::RelayTo(CNode* pnode) const
{
if (!IsInEffect())
return false;
// returns true if wasn't already contained in the set
if (pnode->setKnown.insert(GetHash()).second)
{
if (AppliesTo(pnode->nVersion, pnode->strSubVer) ||
AppliesToMe() ||
GetAdjustedTime() < nRelayUntil)
{
pnode->PushMessage("alert", *this);
return true;
}
}
return false;
}
bool CAlert::CheckSignature() const
{
CPubKey key(ParseHex(fTestNet ? pszTestKey : pszMainKey));
if (!key.Verify(Hash(vchMsg.begin(), vchMsg.end()), vchSig))
return error("CAlert::CheckSignature() : verify signature failed");
// Now unserialize the data
CDataStream sMsg(vchMsg, SER_NETWORK, PROTOCOL_VERSION);
sMsg >> *(CUnsignedAlert*)this;
return true;
}
CAlert CAlert::getAlertByHash(const uint256 &hash)
{
CAlert retval;
{
LOCK(cs_mapAlerts);
map<uint256, CAlert>::iterator mi = mapAlerts.find(hash);
if(mi != mapAlerts.end())
retval = mi->second;
}
return retval;
}
bool CAlert::ProcessAlert(bool fThread)
{
if (!CheckSignature())
return false;
if (!IsInEffect())
return false;
// alert.nID=max is reserved for if the alert key is
// compromised. It must have a pre-defined message,
// must never expire, must apply to all versions,
// and must cancel all previous
// alerts or it will be ignored (so an attacker can't
// send an "everything is OK, don't panic" version that
// cannot be overridden):
int maxInt = std::numeric_limits<int>::max();
if (nID == maxInt)
{
if (!(
nExpiration == maxInt &&
nCancel == (maxInt-1) &&
nMinVer == 0 &&
nMaxVer == maxInt &&
setSubVer.empty() &&
nPriority == maxInt &&
strStatusBar == "URGENT: Alert key compromised, upgrade required"
))
return false;
}
{
LOCK(cs_mapAlerts);
// Cancel previous alerts
for (map<uint256, CAlert>::iterator mi = mapAlerts.begin(); mi != mapAlerts.end();)
{
const CAlert& alert = (*mi).second;
if (Cancels(alert))
{
printf("cancelling alert %d\n", alert.nID);
uiInterface.NotifyAlertChanged((*mi).first, CT_DELETED);
mapAlerts.erase(mi++);
}
else if (!alert.IsInEffect())
{
printf("expiring alert %d\n", alert.nID);
uiInterface.NotifyAlertChanged((*mi).first, CT_DELETED);
mapAlerts.erase(mi++);
}
else
mi++;
}
// Check if this alert has been cancelled
BOOST_FOREACH(PAIRTYPE(const uint256, CAlert)& item, mapAlerts)
{
const CAlert& alert = item.second;
if (alert.Cancels(*this))
{
printf("alert already cancelled by %d\n", alert.nID);
return false;
}
}
// Add to mapAlerts
mapAlerts.insert(make_pair(GetHash(), *this));
// Notify UI and -alertnotify if it applies to me
if(AppliesToMe())
{
uiInterface.NotifyAlertChanged(GetHash(), CT_NEW);
std::string strCmd = GetArg("-alertnotify", "");
if (!strCmd.empty())
{
// Alert text should be plain ascii coming from a trusted source, but to
// be safe we first strip anything not in safeChars, then add single quotes around
// the whole string before passing it to the shell:
std::string singleQuote("'");
std::string safeStatus = SanitizeString(strStatusBar);
safeStatus = singleQuote+safeStatus+singleQuote;
boost::replace_all(strCmd, "%s", safeStatus);
if (fThread)
boost::thread t(runCommand, strCmd); // thread runs free
else
runCommand(strCmd);
}
}
}
printf("accepted alert %d, AppliesToMe()=%d\n", nID, AppliesToMe());
return true;
}

102
src/alert.h Normal file
View File

@@ -0,0 +1,102 @@
// Copyright (c) 2010 Satoshi Nakamoto
// Copyright (c) 2009-2012 The Bitcoin developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef _BITCOINALERT_H_
#define _BITCOINALERT_H_ 1
#include <set>
#include <string>
#include "uint256.h"
#include "util.h"
class CNode;
/** Alerts are for notifying old versions if they become too obsolete and
* need to upgrade. The message is displayed in the status bar.
* Alert messages are broadcast as a vector of signed data. Unserializing may
* not read the entire buffer if the alert is for a newer version, but older
* versions can still relay the original data.
*/
class CUnsignedAlert
{
public:
int nVersion;
int64 nRelayUntil; // when newer nodes stop relaying to newer nodes
int64 nExpiration;
int nID;
int nCancel;
std::set<int> setCancel;
int nMinVer; // lowest version inclusive
int nMaxVer; // highest version inclusive
std::set<std::string> setSubVer; // empty matches all
int nPriority;
// Actions
std::string strComment;
std::string strStatusBar;
std::string strReserved;
IMPLEMENT_SERIALIZE
(
READWRITE(this->nVersion);
nVersion = this->nVersion;
READWRITE(nRelayUntil);
READWRITE(nExpiration);
READWRITE(nID);
READWRITE(nCancel);
READWRITE(setCancel);
READWRITE(nMinVer);
READWRITE(nMaxVer);
READWRITE(setSubVer);
READWRITE(nPriority);
READWRITE(strComment);
READWRITE(strStatusBar);
READWRITE(strReserved);
)
void SetNull();
std::string ToString() const;
void print() const;
};
/** An alert is a combination of a serialized CUnsignedAlert and a signature. */
class CAlert : public CUnsignedAlert
{
public:
std::vector<unsigned char> vchMsg;
std::vector<unsigned char> vchSig;
CAlert()
{
SetNull();
}
IMPLEMENT_SERIALIZE
(
READWRITE(vchMsg);
READWRITE(vchSig);
)
void SetNull();
bool IsNull() const;
uint256 GetHash() const;
bool IsInEffect() const;
bool Cancels(const CAlert& alert) const;
bool AppliesTo(int nVersion, std::string strSubVerIn) const;
bool AppliesToMe() const;
bool RelayTo(CNode* pnode) const;
bool CheckSignature() const;
bool ProcessAlert(bool fThread = true);
/*
* Get copy of (active) alert object by hash. Returns a null alert if it is not found.
*/
static CAlert getAlertByHash(const uint256 &hash);
};
#endif

View File

@@ -1,7 +1,5 @@
// Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2010 Satoshi Nakamoto
// Copyright (c) 2009-2012 The Bitcoin developers // Copyright (c) 2009-2012 The Bitcoin developers
// Copyright (c) 2011-2012 Litecoin Developers
// Copyright (c) 2013 CasinoCoin Developers
// Distributed under the MIT/X11 software license, see the accompanying // Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_ALLOCATORS_H #ifndef BITCOIN_ALLOCATORS_H
@@ -9,6 +7,9 @@
#include <string.h> #include <string.h>
#include <string> #include <string>
#include <boost/thread/mutex.hpp>
#include <map>
#include <openssl/crypto.h> // for OPENSSL_cleanse()
#ifdef WIN32 #ifdef WIN32
#ifdef _WIN32_WINNT #ifdef _WIN32_WINNT
@@ -24,23 +25,169 @@
// Note that VirtualLock does not provide this as a guarantee on Windows, // Note that VirtualLock does not provide this as a guarantee on Windows,
// but, in practice, memory that has been VirtualLock'd almost never gets written to // but, in practice, memory that has been VirtualLock'd almost never gets written to
// the pagefile except in rare circumstances where memory is extremely low. // the pagefile except in rare circumstances where memory is extremely low.
#define mlock(p, n) VirtualLock((p), (n));
#define munlock(p, n) VirtualUnlock((p), (n));
#else #else
#include <sys/mman.h> #include <sys/mman.h>
#include <limits.h> #include <limits.h> // for PAGESIZE
/* This comes from limits.h if it's not defined there set a sane default */ #include <unistd.h> // for sysconf
#ifndef PAGESIZE
#include <unistd.h>
#define PAGESIZE sysconf(_SC_PAGESIZE)
#endif #endif
#define mlock(a,b) \
mlock(((void *)(((size_t)(a)) & (~((PAGESIZE)-1)))),\ /**
(((((size_t)(a)) + (b) - 1) | ((PAGESIZE) - 1)) + 1) - (((size_t)(a)) & (~((PAGESIZE) - 1)))) * Thread-safe class to keep track of locked (ie, non-swappable) memory pages.
#define munlock(a,b) \ *
munlock(((void *)(((size_t)(a)) & (~((PAGESIZE)-1)))),\ * Memory locks do not stack, that is, pages which have been locked several times by calls to mlock()
(((((size_t)(a)) + (b) - 1) | ((PAGESIZE) - 1)) + 1) - (((size_t)(a)) & (~((PAGESIZE) - 1)))) * will be unlocked by a single call to munlock(). This can result in keying material ending up in swap when
* those functions are used naively. This class simulates stacking memory locks by keeping a counter per page.
*
* @note By using a map from each page base address to lock count, this class is optimized for
* small objects that span up to a few pages, mostly smaller than a page. To support large allocations,
* something like an interval tree would be the preferred data structure.
*/
template <class Locker> class LockedPageManagerBase
{
public:
LockedPageManagerBase(size_t page_size):
page_size(page_size)
{
// Determine bitmask for extracting page from address
assert(!(page_size & (page_size-1))); // size must be power of two
page_mask = ~(page_size - 1);
}
// For all pages in affected range, increase lock count
void LockRange(void *p, size_t size)
{
boost::mutex::scoped_lock lock(mutex);
if(!size) return;
const size_t base_addr = reinterpret_cast<size_t>(p);
const size_t start_page = base_addr & page_mask;
const size_t end_page = (base_addr + size - 1) & page_mask;
for(size_t page = start_page; page <= end_page; page += page_size)
{
Histogram::iterator it = histogram.find(page);
if(it == histogram.end()) // Newly locked page
{
locker.Lock(reinterpret_cast<void*>(page), page_size);
histogram.insert(std::make_pair(page, 1));
}
else // Page was already locked; increase counter
{
it->second += 1;
}
}
}
// For all pages in affected range, decrease lock count
void UnlockRange(void *p, size_t size)
{
boost::mutex::scoped_lock lock(mutex);
if(!size) return;
const size_t base_addr = reinterpret_cast<size_t>(p);
const size_t start_page = base_addr & page_mask;
const size_t end_page = (base_addr + size - 1) & page_mask;
for(size_t page = start_page; page <= end_page; page += page_size)
{
Histogram::iterator it = histogram.find(page);
assert(it != histogram.end()); // Cannot unlock an area that was not locked
// Decrease counter for page, when it is zero, the page will be unlocked
it->second -= 1;
if(it->second == 0) // Nothing on the page anymore that keeps it locked
{
// Unlock page and remove the count from histogram
locker.Unlock(reinterpret_cast<void*>(page), page_size);
histogram.erase(it);
}
}
}
// Get number of locked pages for diagnostics
int GetLockedPageCount()
{
boost::mutex::scoped_lock lock(mutex);
return histogram.size();
}
private:
Locker locker;
boost::mutex mutex;
size_t page_size, page_mask;
// map of page base address to lock count
typedef std::map<size_t,int> Histogram;
Histogram histogram;
};
/** Determine system page size in bytes */
static inline size_t GetSystemPageSize()
{
size_t page_size;
#if defined(WIN32)
SYSTEM_INFO sSysInfo;
GetSystemInfo(&sSysInfo);
page_size = sSysInfo.dwPageSize;
#elif defined(PAGESIZE) // defined in limits.h
page_size = PAGESIZE;
#else // assume some POSIX OS
page_size = sysconf(_SC_PAGESIZE);
#endif #endif
return page_size;
}
/**
* OS-dependent memory page locking/unlocking.
* Defined as policy class to make stubbing for test possible.
*/
class MemoryPageLocker
{
public:
/** Lock memory pages.
* addr and len must be a multiple of the system page size
*/
bool Lock(const void *addr, size_t len)
{
#ifdef WIN32
return VirtualLock(const_cast<void*>(addr), len);
#else
return mlock(addr, len) == 0;
#endif
}
/** Unlock memory pages.
* addr and len must be a multiple of the system page size
*/
bool Unlock(const void *addr, size_t len)
{
#ifdef WIN32
return VirtualUnlock(const_cast<void*>(addr), len);
#else
return munlock(addr, len) == 0;
#endif
}
};
/**
* Singleton class to keep track of locked (ie, non-swappable) memory pages, for use in
* std::allocator templates.
*/
class LockedPageManager: public LockedPageManagerBase<MemoryPageLocker>
{
public:
static LockedPageManager instance; // instantiated in util.cpp
private:
LockedPageManager():
LockedPageManagerBase<MemoryPageLocker>(GetSystemPageSize())
{}
};
//
// Functions for directly locking/unlocking memory objects.
// Intended for non-dynamically allocated structures.
//
template<typename T> void LockObject(const T &t) {
LockedPageManager::instance.LockRange((void*)(&t), sizeof(T));
}
template<typename T> void UnlockObject(const T &t) {
OPENSSL_cleanse((void*)(&t), sizeof(T));
LockedPageManager::instance.UnlockRange((void*)(&t), sizeof(T));
}
// //
// Allocator that locks its contents from being paged // Allocator that locks its contents from being paged
@@ -71,7 +218,7 @@ struct secure_allocator : public std::allocator<T>
T *p; T *p;
p = std::allocator<T>::allocate(n, hint); p = std::allocator<T>::allocate(n, hint);
if (p != NULL) if (p != NULL)
mlock(p, sizeof(T) * n); LockedPageManager::instance.LockRange(p, sizeof(T) * n);
return p; return p;
} }
@@ -79,8 +226,8 @@ struct secure_allocator : public std::allocator<T>
{ {
if (p != NULL) if (p != NULL)
{ {
memset(p, 0, sizeof(T) * n); OPENSSL_cleanse(p, sizeof(T) * n);
munlock(p, sizeof(T) * n); LockedPageManager::instance.UnlockRange(p, sizeof(T) * n);
} }
std::allocator<T>::deallocate(p, n); std::allocator<T>::deallocate(p, n);
} }
@@ -113,7 +260,7 @@ struct zero_after_free_allocator : public std::allocator<T>
void deallocate(T* p, std::size_t n) void deallocate(T* p, std::size_t n)
{ {
if (p != NULL) if (p != NULL)
memset(p, 0, sizeof(T) * n); OPENSSL_cleanse(p, sizeof(T) * n);
std::allocator<T>::deallocate(p, n); std::allocator<T>::deallocate(p, n);
} }
}; };

View File

@@ -1,7 +1,5 @@
// Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2010 Satoshi Nakamoto
// Copyright (c) 2009-2012 The Bitcoin Developers // Copyright (c) 2009-2012 The Bitcoin Developers
// Copyright (c) 2011-2012 Litecoin Developers
// Copyright (c) 2013 CasinoCoin Developers
// Distributed under the MIT/X11 software license, see the accompanying // Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
@@ -12,16 +10,18 @@
// could be used to create visually identical looking account numbers. // could be used to create visually identical looking account numbers.
// - A string with non-alphanumeric characters is not as easily accepted as an account number. // - A string with non-alphanumeric characters is not as easily accepted as an account number.
// - E-mail usually won't line-break if there's no punctuation to break at. // - E-mail usually won't line-break if there's no punctuation to break at.
// - Doubleclicking selects the whole number as one word if it's all alphanumeric. // - Double-clicking selects the whole number as one word if it's all alphanumeric.
// //
#ifndef BITCOIN_BASE58_H #ifndef BITCOIN_BASE58_H
#define BITCOIN_BASE58_H #define BITCOIN_BASE58_H
#include <string> #include <string>
#include <vector> #include <vector>
#include "bignum.h" #include "bignum.h"
#include "key.h" #include "key.h"
#include "script.h" #include "script.h"
#include "allocators.h"
static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
@@ -180,7 +180,8 @@ protected:
unsigned char nVersion; unsigned char nVersion;
// the actually encoded data // the actually encoded data
std::vector<unsigned char> vchData; typedef std::vector<unsigned char, zero_after_free_allocator<unsigned char> > vector_uchar;
vector_uchar vchData;
CBase58Data() CBase58Data()
{ {
@@ -188,13 +189,6 @@ protected:
vchData.clear(); vchData.clear();
} }
~CBase58Data()
{
// zero the memory, as it may contain sensitive data
if (!vchData.empty())
memset(&vchData[0], 0, vchData.size());
}
void SetData(int nVersionIn, const void* pdata, size_t nSize) void SetData(int nVersionIn, const void* pdata, size_t nSize)
{ {
nVersion = nVersionIn; nVersion = nVersionIn;
@@ -223,7 +217,7 @@ public:
vchData.resize(vchTemp.size() - 1); vchData.resize(vchTemp.size() - 1);
if (!vchData.empty()) if (!vchData.empty())
memcpy(&vchData[0], &vchTemp[1], vchData.size()); memcpy(&vchData[0], &vchTemp[1], vchData.size());
memset(&vchTemp[0], 0, vchTemp.size()); OPENSSL_cleanse(&vchTemp[0], vchData.size());
return true; return true;
} }
@@ -410,21 +404,19 @@ public:
PRIVKEY_ADDRESS_TEST = CBitcoinAddress::PUBKEY_ADDRESS_TEST + 128, PRIVKEY_ADDRESS_TEST = CBitcoinAddress::PUBKEY_ADDRESS_TEST + 128,
}; };
void SetSecret(const CSecret& vchSecret, bool fCompressed) void SetKey(const CKey& vchSecret)
{ {
assert(vchSecret.size() == 32); assert(vchSecret.IsValid());
SetData(fTestNet ? PRIVKEY_ADDRESS_TEST : PRIVKEY_ADDRESS, &vchSecret[0], vchSecret.size()); SetData(fTestNet ? PRIVKEY_ADDRESS_TEST : PRIVKEY_ADDRESS, vchSecret.begin(), vchSecret.size());
if (fCompressed) if (vchSecret.IsCompressed())
vchData.push_back(1); vchData.push_back(1);
} }
CSecret GetSecret(bool &fCompressedOut) CKey GetKey()
{ {
CSecret vchSecret; CKey ret;
vchSecret.resize(32); ret.Set(&vchData[0], &vchData[32], vchData.size() > 32 && vchData[32] == 1);
memcpy(&vchSecret[0], &vchData[0], 32); return ret;
fCompressedOut = vchData.size() == 33;
return vchSecret;
} }
bool IsValid() const bool IsValid() const
@@ -455,9 +447,9 @@ public:
return SetString(strSecret.c_str()); return SetString(strSecret.c_str());
} }
CBitcoinSecret(const CSecret& vchSecret, bool fCompressed) CBitcoinSecret(const CKey& vchSecret)
{ {
SetSecret(vchSecret, fCompressed); SetKey(vchSecret);
} }
CBitcoinSecret() CBitcoinSecret()
@@ -465,4 +457,4 @@ public:
} }
}; };
#endif #endif // BITCOIN_BASE58_H

View File

@@ -1,7 +1,5 @@
// Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2010 Satoshi Nakamoto
// Copyright (c) 2009-2012 The Bitcoin developers // Copyright (c) 2009-2012 The Bitcoin developers
// Copyright (c) 2011-2012 Litecoin Developers
// Copyright (c) 2013 CasinoCoin Developers
// Distributed under the MIT/X11 software license, see the accompanying // Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_BIGNUM_H #ifndef BITCOIN_BIGNUM_H
@@ -133,7 +131,9 @@ public:
if (sn < (int64)0) if (sn < (int64)0)
{ {
// Since the minimum signed integer cannot be represented as positive so long as its type is signed, and it's not well-defined what happens if you make it unsigned before negating it, we instead increment the negative integer by 1, convert it, then increment the (now positive) unsigned integer by 1 to compensate // Since the minimum signed integer cannot be represented as positive so long as its type is signed,
// and it's not well-defined what happens if you make it unsigned before negating it,
// we instead increment the negative integer by 1, convert it, then increment the (now positive) unsigned integer by 1 to compensate
n = -(sn + 1); n = -(sn + 1);
++n; ++n;
fNegative = true; fNegative = true;
@@ -222,7 +222,7 @@ public:
BN_mpi2bn(pch, p - pch, this); BN_mpi2bn(pch, p - pch, this);
} }
uint256 getuint256() uint256 getuint256() const
{ {
unsigned int nSize = BN_bn2mpi(this, NULL); unsigned int nSize = BN_bn2mpi(this, NULL);
if (nSize < 4) if (nSize < 4)
@@ -264,28 +264,68 @@ public:
return vch; return vch;
} }
// The "compact" format is a representation of a whole
// number N using an unsigned 32bit number similar to a
// floating point format.
// The most significant 8 bits are the unsigned exponent of base 256.
// This exponent can be thought of as "number of bytes of N".
// The lower 23 bits are the mantissa.
// Bit number 24 (0x800000) represents the sign of N.
// N = (-1^sign) * mantissa * 256^(exponent-3)
//
// Satoshi's original implementation used BN_bn2mpi() and BN_mpi2bn().
// MPI uses the most significant bit of the first byte as sign.
// Thus 0x1234560000 is compact (0x05123456)
// and 0xc0de000000 is compact (0x0600c0de)
// (0x05c0de00) would be -0x40de000000
//
// Bitcoin only uses this "compact" format for encoding difficulty
// targets, which are unsigned 256bit quantities. Thus, all the
// complexities of the sign bit and using base 256 are probably an
// implementation accident.
//
// This implementation directly uses shifts instead of going
// through an intermediate MPI representation.
CBigNum& SetCompact(unsigned int nCompact) CBigNum& SetCompact(unsigned int nCompact)
{ {
unsigned int nSize = nCompact >> 24; unsigned int nSize = nCompact >> 24;
std::vector<unsigned char> vch(4 + nSize); bool fNegative =(nCompact & 0x00800000) != 0;
vch[3] = nSize; unsigned int nWord = nCompact & 0x007fffff;
if (nSize >= 1) vch[4] = (nCompact >> 16) & 0xff; if (nSize <= 3)
if (nSize >= 2) vch[5] = (nCompact >> 8) & 0xff; {
if (nSize >= 3) vch[6] = (nCompact >> 0) & 0xff; nWord >>= 8*(3-nSize);
BN_mpi2bn(&vch[0], vch.size(), this); BN_set_word(this, nWord);
}
else
{
BN_set_word(this, nWord);
BN_lshift(this, this, 8*(nSize-3));
}
BN_set_negative(this, fNegative);
return *this; return *this;
} }
unsigned int GetCompact() const unsigned int GetCompact() const
{ {
unsigned int nSize = BN_bn2mpi(this, NULL); unsigned int nSize = BN_num_bytes(this);
std::vector<unsigned char> vch(nSize); unsigned int nCompact = 0;
nSize -= 4; if (nSize <= 3)
BN_bn2mpi(this, &vch[0]); nCompact = BN_get_word(this) << 8*(3-nSize);
unsigned int nCompact = nSize << 24; else
if (nSize >= 1) nCompact |= (vch[4] << 16); {
if (nSize >= 2) nCompact |= (vch[5] << 8); CBigNum bn;
if (nSize >= 3) nCompact |= (vch[6] << 0); BN_rshift(&bn, this, 8*(nSize-3));
nCompact = BN_get_word(&bn);
}
// The 0x00800000 bit denotes the sign.
// Thus, if it is already set, divide the mantissa by 256 and increase the exponent.
if (nCompact & 0x00800000)
{
nCompact >>= 8;
nSize++;
}
nCompact |= nSize << 24;
nCompact |= (BN_is_negative(this) ? 0x00800000 : 0);
return nCompact; return nCompact;
} }
@@ -307,7 +347,7 @@ public:
psz++; psz++;
// hex string to bignum // hex string to bignum
static signed char phexdigit[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0 }; static const signed char phexdigit[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0 };
*this = 0; *this = 0;
while (isxdigit(*psz)) while (isxdigit(*psz))
{ {
@@ -418,7 +458,7 @@ public:
CBigNum& operator>>=(unsigned int shift) CBigNum& operator>>=(unsigned int shift)
{ {
// Note: BN_rshift segfaults on 64-bit if 2^shift is greater than the number // 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 // if built on ubuntu 9.04 or 9.10, probably depends on version of OpenSSL
CBigNum a = 1; CBigNum a = 1;
a <<= shift; a <<= shift;
if (BN_cmp(&a, this) > 0) if (BN_cmp(&a, this) > 0)

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,5 @@
// Copyright (c) 2010 Satoshi Nakamoto // Copyright (c) 2010 Satoshi Nakamoto
// Copyright (c) 2009-2012 The Bitcoin developers // Copyright (c) 2009-2012 The Bitcoin developers
// Copyright (c) 2011-2012 Litecoin Developers
// Copyright (c) 2013 CasinoCoin Developers
// Distributed under the MIT/X11 software license, see the accompanying // Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
@@ -12,13 +10,66 @@
#include <list> #include <list>
#include <map> #include <map>
class CBlockIndex;
class CReserveKey;
#include "json/json_spirit_reader_template.h" #include "json/json_spirit_reader_template.h"
#include "json/json_spirit_writer_template.h" #include "json/json_spirit_writer_template.h"
#include "json/json_spirit_utils.h" #include "json/json_spirit_utils.h"
#include "util.h"
// HTTP status codes
enum HTTPStatusCode
{
HTTP_OK = 200,
HTTP_BAD_REQUEST = 400,
HTTP_UNAUTHORIZED = 401,
HTTP_FORBIDDEN = 403,
HTTP_NOT_FOUND = 404,
HTTP_INTERNAL_SERVER_ERROR = 500,
};
// Bitcoin RPC error codes
enum RPCErrorCode
{
// Standard JSON-RPC 2.0 errors
RPC_INVALID_REQUEST = -32600,
RPC_METHOD_NOT_FOUND = -32601,
RPC_INVALID_PARAMS = -32602,
RPC_INTERNAL_ERROR = -32603,
RPC_PARSE_ERROR = -32700,
// General application defined errors
RPC_MISC_ERROR = -1, // std::exception thrown in command handling
RPC_FORBIDDEN_BY_SAFE_MODE = -2, // Server is in safe mode, and command is not allowed in safe mode
RPC_TYPE_ERROR = -3, // Unexpected type was passed as parameter
RPC_INVALID_ADDRESS_OR_KEY = -5, // Invalid address or key
RPC_OUT_OF_MEMORY = -7, // Ran out of memory during operation
RPC_INVALID_PARAMETER = -8, // Invalid, missing or duplicate parameter
RPC_DATABASE_ERROR = -20, // Database error
RPC_DESERIALIZATION_ERROR = -22, // Error parsing or validating structure in raw format
// P2P client errors
RPC_CLIENT_NOT_CONNECTED = -9, // Bitcoin is not connected
RPC_CLIENT_IN_INITIAL_DOWNLOAD = -10, // Still downloading initial blocks
// Wallet errors
RPC_WALLET_ERROR = -4, // Unspecified problem with wallet (key not found etc.)
RPC_WALLET_INSUFFICIENT_FUNDS = -6, // Not enough funds in wallet or account
RPC_WALLET_INVALID_ACCOUNT_NAME = -11, // Invalid account name
RPC_WALLET_KEYPOOL_RAN_OUT = -12, // Keypool ran out, call keypoolrefill first
RPC_WALLET_UNLOCK_NEEDED = -13, // Enter the wallet passphrase with walletpassphrase first
RPC_WALLET_PASSPHRASE_INCORRECT = -14, // The wallet passphrase entered was incorrect
RPC_WALLET_WRONG_ENC_STATE = -15, // Command given in wrong wallet encryption state (encrypting an encrypted wallet etc.)
RPC_WALLET_ENCRYPTION_FAILED = -16, // Failed to encrypt the wallet
RPC_WALLET_ALREADY_UNLOCKED = -17, // Wallet is already unlocked
};
json_spirit::Object JSONRPCError(int code, const std::string& message); json_spirit::Object JSONRPCError(int code, const std::string& message);
void ThreadRPCServer(void* parg); void StartRPCThreads();
void StopRPCThreads();
int CommandLineRPC(int argc, char *argv[]); int CommandLineRPC(int argc, char *argv[]);
/** Convert parameter values for RPC call from strings to command-specific JSON objects. */ /** Convert parameter values for RPC call from strings to command-specific JSON objects. */
@@ -30,13 +81,13 @@ json_spirit::Array RPCConvertValues(const std::string &strMethod, const std::vec
Use like: RPCTypeCheck(params, boost::assign::list_of(str_type)(int_type)(obj_type)); Use like: RPCTypeCheck(params, boost::assign::list_of(str_type)(int_type)(obj_type));
*/ */
void RPCTypeCheck(const json_spirit::Array& params, void RPCTypeCheck(const json_spirit::Array& params,
const std::list<json_spirit::Value_type>& typesExpected); const std::list<json_spirit::Value_type>& typesExpected, bool fAllowNull=false);
/* /*
Check for expected keys/value types in an Object. Check for expected keys/value types in an Object.
Use like: RPCTypeCheck(object, boost::assign::map_list_of("name", str_type)("value", int_type)); Use like: RPCTypeCheck(object, boost::assign::map_list_of("name", str_type)("value", int_type));
*/ */
void RPCTypeCheck(const json_spirit::Object& o, void RPCTypeCheck(const json_spirit::Object& o,
const std::map<std::string, json_spirit::Value_type>& typesExpected); const std::map<std::string, json_spirit::Value_type>& typesExpected, bool fAllowNull=false);
typedef json_spirit::Value(*rpcfn_type)(const json_spirit::Array& params, bool fHelp); typedef json_spirit::Value(*rpcfn_type)(const json_spirit::Array& params, bool fHelp);
@@ -46,6 +97,8 @@ public:
std::string name; std::string name;
rpcfn_type actor; rpcfn_type actor;
bool okSafeMode; bool okSafeMode;
bool threadSafe;
bool reqWallet;
}; };
/** /**
@@ -72,4 +125,85 @@ public:
extern const CRPCTable tableRPC; extern const CRPCTable tableRPC;
extern void InitRPCMining();
extern void ShutdownRPCMining();
extern int64 nWalletUnlockTime;
extern int64 AmountFromValue(const json_spirit::Value& value);
extern json_spirit::Value ValueFromAmount(int64 amount);
extern double GetDifficulty(const CBlockIndex* blockindex = NULL);
extern std::string HexBits(unsigned int nBits);
extern std::string HelpRequiringPassphrase();
extern void EnsureWalletIsUnlocked();
extern json_spirit::Value getconnectioncount(const json_spirit::Array& params, bool fHelp); // in rpcnet.cpp
extern json_spirit::Value getpeerinfo(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value addnode(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getaddednodeinfo(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value dumpprivkey(const json_spirit::Array& params, bool fHelp); // in rpcdump.cpp
extern json_spirit::Value importprivkey(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getgenerate(const json_spirit::Array& params, bool fHelp); // in rpcmining.cpp
extern json_spirit::Value setgenerate(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getnetworkhashps(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value gethashespersec(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getmininginfo(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getworkex(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getwork(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getblocktemplate(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value submitblock(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getnewaddress(const json_spirit::Array& params, bool fHelp); // in rpcwallet.cpp
extern json_spirit::Value getaccountaddress(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value setaccount(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getaccount(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getaddressesbyaccount(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value sendtoaddress(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value signmessage(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value verifymessage(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getreceivedbyaddress(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getreceivedbyaccount(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getbalance(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value movecmd(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value sendfrom(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value sendmany(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value addmultisigaddress(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value createmultisig(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value listreceivedbyaddress(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value listreceivedbyaccount(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value listtransactions(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value listaddressgroupings(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value listaccounts(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value listsinceblock(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value gettransaction(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value backupwallet(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value keypoolrefill(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value walletpassphrase(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value walletpassphrasechange(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value walletlock(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value encryptwallet(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value validateaddress(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getinfo(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getrawtransaction(const json_spirit::Array& params, bool fHelp); // in rcprawtransaction.cpp
extern json_spirit::Value listunspent(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value lockunspent(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value listlockunspent(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value createrawtransaction(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value decoderawtransaction(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value signrawtransaction(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value sendrawtransaction(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getblockcount(const json_spirit::Array& params, bool fHelp); // in rpcblockchain.cpp
extern json_spirit::Value getbestblockhash(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getdifficulty(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value settxfee(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value setmininput(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getrawmempool(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getblockhash(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getblock(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value gettxoutsetinfo(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value gettxout(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value verifychain(const json_spirit::Array& params, bool fHelp);
#endif #endif

Some files were not shown because too many files have changed in this diff Show More