Version 1.1.0.0 update
140
.cproject
Normal 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
@@ -2,7 +2,6 @@ src/*.exe
|
||||
src/casinocoin
|
||||
src/casinocoind
|
||||
src/test_casinocoin
|
||||
src/build.h
|
||||
.*.swp
|
||||
*.*~*
|
||||
*.bak
|
||||
@@ -10,24 +9,26 @@ src/build.h
|
||||
*.orig
|
||||
*.o
|
||||
*.patch
|
||||
.bitcoin
|
||||
#compilation and Qt preprocessor part
|
||||
.casinocoin
|
||||
|
||||
# Compilation and Qt preprocessor part
|
||||
*.qm
|
||||
Makefile
|
||||
casinocoin-qt
|
||||
#resources cpp
|
||||
CasinoCoin-Qt.app
|
||||
|
||||
# Unit-tests
|
||||
Makefile.test
|
||||
casinocoin-qt_test
|
||||
|
||||
# Resources cpp
|
||||
qrc_*.cpp
|
||||
#qt creator
|
||||
|
||||
# Qt creator
|
||||
*.pro.user
|
||||
#mac specific
|
||||
|
||||
# Mac specific
|
||||
.DS_Store
|
||||
build
|
||||
.cproject
|
||||
.project
|
||||
debug
|
||||
release
|
||||
.svn
|
||||
object_script.casinocoin-qt.Debug
|
||||
object_script.casinocoin-qt.Release
|
||||
object_script.litecoin-qt.Debug
|
||||
object_script.litecoin-qt.Release
|
||||
|
||||
!src/leveldb-*/Makefile
|
||||
|
||||
27
.project
Normal 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>
|
||||
5
COPYING
@@ -1,6 +1,5 @@
|
||||
Copyright (c) 2009-2012 Bitcoin Developers
|
||||
Copyright (c) 2011-2012 Litecoin Developers
|
||||
Copyright (c) 2013 CasinoCoin Developers
|
||||
Copyright (c) 2009-2013 Bitcoin Developers
|
||||
Copyright (c) 2011-2013 CasinoCoin Developers
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
2
INSTALL
@@ -1,6 +1,6 @@
|
||||
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
|
||||
implementation of CasinoCoin.
|
||||
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
TEMPLATE = app
|
||||
TARGET =
|
||||
VERSION = 1.0.0.4
|
||||
TARGET = casinocoin-qt
|
||||
macx:TARGET = "CasinoCoin-Qt"
|
||||
VERSION = 1.1.0.0
|
||||
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
|
||||
CONFIG += no_include_pwd
|
||||
CONFIG += thread
|
||||
|
||||
# for boost 1.37, add -mt to the boost libraries
|
||||
# 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
|
||||
OPENSSL_INCLUDE_PATH=E:/crypto/deps/openssl-1.0.1b/include
|
||||
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
|
||||
MOC_DIR = build
|
||||
@@ -31,20 +37,37 @@ contains(RELEASE, 1) {
|
||||
# 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_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 {
|
||||
# Linux: static link
|
||||
LIBS += -Wl,-Bstatic
|
||||
!win32:!macx {
|
||||
# Linux: static link and extra security (see: https://wiki.debian.org/Hardening)
|
||||
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"
|
||||
# libqrencode (http://fukuchi.org/works/qrencode/index.en.html) must be installed for support
|
||||
contains(USE_QRCODE, 1) {
|
||||
message(Building with QRCode support)
|
||||
DEFINES += USE_QRCODE
|
||||
LIBS += -lqrencode
|
||||
#LIBS += -lqrencode
|
||||
LIBS += -lqrencode $$join(QRENCODE_LIB_PATH,,-L,)
|
||||
}
|
||||
|
||||
# use: qmake "USE_UPNP=1" ( enabled by default; default)
|
||||
@@ -71,10 +94,16 @@ contains(USE_DBUS, 1) {
|
||||
QT += dbus
|
||||
}
|
||||
|
||||
# use: qmake "FIRST_CLASS_MESSAGING=1"
|
||||
contains(FIRST_CLASS_MESSAGING, 1) {
|
||||
message(Building with first-class messaging)
|
||||
DEFINES += FIRST_CLASS_MESSAGING
|
||||
# use: qmake "USE_IPV6=1" ( enabled by default; default)
|
||||
# or: qmake "USE_IPV6=0" (disabled by default)
|
||||
# or: qmake "USE_IPV6=-" (not supported)
|
||||
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) {
|
||||
@@ -82,15 +111,28 @@ contains(BITCOIN_NEED_QT_PLUGINS, 1) {
|
||||
QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets
|
||||
}
|
||||
|
||||
!windows {
|
||||
# for extra security against potential buffer overflows
|
||||
QMAKE_CXXFLAGS += -fstack-protector
|
||||
QMAKE_LFLAGS += -fstack-protector
|
||||
# do not enable this on windows, as it will result in a non-working executable!
|
||||
INCLUDEPATH += src/leveldb/include src/leveldb/helpers
|
||||
LIBS += $$PWD/src/leveldb/libleveldb.a $$PWD/src/leveldb/libmemenv.a
|
||||
!win32 {
|
||||
# we use QMAKE_CXXFLAGS_RELEASE even without RELEASE=1 because we use RELEASE to indicate linking preferences not -O preferences
|
||||
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
|
||||
!windows|contains(USE_BUILD_INFO, 1) {
|
||||
!win32|contains(USE_BUILD_INFO, 1) {
|
||||
genbuild.depends = FORCE
|
||||
genbuild.commands = cd $$PWD; /bin/sh share/genbuild.sh $$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
|
||||
}
|
||||
|
||||
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
|
||||
DEPENDPATH += src src/json src/qt
|
||||
@@ -108,21 +150,25 @@ HEADERS += src/qt/bitcoingui.h \
|
||||
src/qt/addresstablemodel.h \
|
||||
src/qt/optionsdialog.h \
|
||||
src/qt/sendcoinsdialog.h \
|
||||
src/qt/coincontroldialog.h \
|
||||
src/qt/coincontroltreewidget.h \
|
||||
src/qt/addressbookpage.h \
|
||||
src/qt/signverifymessagedialog.h \
|
||||
src/qt/aboutdialog.h \
|
||||
src/qt/editaddressdialog.h \
|
||||
src/qt/bitcoinaddressvalidator.h \
|
||||
src/alert.h \
|
||||
src/addrman.h \
|
||||
src/base58.h \
|
||||
src/bignum.h \
|
||||
src/checkpoints.h \
|
||||
src/coincontrol.h \
|
||||
src/compat.h \
|
||||
src/sync.h \
|
||||
src/util.h \
|
||||
src/hash.h \
|
||||
src/uint256.h \
|
||||
src/serialize.h \
|
||||
src/strlcpy.h \
|
||||
src/main.h \
|
||||
src/net.h \
|
||||
src/key.h \
|
||||
@@ -130,8 +176,9 @@ HEADERS += src/qt/bitcoingui.h \
|
||||
src/walletdb.h \
|
||||
src/script.h \
|
||||
src/init.h \
|
||||
src/irc.h \
|
||||
src/bloom.h \
|
||||
src/mruset.h \
|
||||
src/checkqueue.h \
|
||||
src/json/json_spirit_writer_template.h \
|
||||
src/json/json_spirit_writer.h \
|
||||
src/json/json_spirit_value.h \
|
||||
@@ -155,6 +202,9 @@ HEADERS += src/qt/bitcoingui.h \
|
||||
src/qt/transactionfilterproxy.h \
|
||||
src/qt/transactionview.h \
|
||||
src/qt/walletmodel.h \
|
||||
src/qt/walletview.h \
|
||||
src/qt/walletstack.h \
|
||||
src/qt/walletframe.h \
|
||||
src/bitcoinrpc.h \
|
||||
src/qt/overviewpage.h \
|
||||
src/qt/csvmodelwriter.h \
|
||||
@@ -166,40 +216,50 @@ HEADERS += src/qt/bitcoingui.h \
|
||||
src/qt/askpassphrasedialog.h \
|
||||
src/protocol.h \
|
||||
src/qt/notificator.h \
|
||||
src/qt/qtipcserver.h \
|
||||
src/qt/paymentserver.h \
|
||||
src/allocators.h \
|
||||
src/ui_interface.h \
|
||||
src/qt/rpcconsole.h \
|
||||
src/scrypt.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/addresstablemodel.cpp \
|
||||
src/qt/optionsdialog.cpp \
|
||||
src/qt/sendcoinsdialog.cpp \
|
||||
src/qt/coincontroldialog.cpp \
|
||||
src/qt/coincontroltreewidget.cpp \
|
||||
src/qt/addressbookpage.cpp \
|
||||
src/qt/signverifymessagedialog.cpp \
|
||||
src/qt/aboutdialog.cpp \
|
||||
src/qt/editaddressdialog.cpp \
|
||||
src/qt/bitcoinaddressvalidator.cpp \
|
||||
src/alert.cpp \
|
||||
src/version.cpp \
|
||||
src/sync.cpp \
|
||||
src/util.cpp \
|
||||
src/hash.cpp \
|
||||
src/netbase.cpp \
|
||||
src/key.cpp \
|
||||
src/script.cpp \
|
||||
src/main.cpp \
|
||||
src/init.cpp \
|
||||
src/net.cpp \
|
||||
src/irc.cpp \
|
||||
src/bloom.cpp \
|
||||
src/checkpoints.cpp \
|
||||
src/addrman.cpp \
|
||||
src/db.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/guiutil.cpp \
|
||||
src/qt/transactionrecord.cpp \
|
||||
@@ -214,9 +274,15 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \
|
||||
src/qt/transactionfilterproxy.cpp \
|
||||
src/qt/transactionview.cpp \
|
||||
src/qt/walletmodel.cpp \
|
||||
src/qt/walletview.cpp \
|
||||
src/qt/walletstack.cpp \
|
||||
src/qt/walletframe.cpp \
|
||||
src/bitcoinrpc.cpp \
|
||||
src/rpcdump.cpp \
|
||||
src/rpcnet.cpp \
|
||||
src/rpcmining.cpp \
|
||||
src/rpcwallet.cpp \
|
||||
src/rpcblockchain.cpp \
|
||||
src/rpcrawtransaction.cpp \
|
||||
src/qt/overviewpage.cpp \
|
||||
src/qt/csvmodelwriter.cpp \
|
||||
@@ -228,16 +294,18 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \
|
||||
src/qt/askpassphrasedialog.cpp \
|
||||
src/protocol.cpp \
|
||||
src/qt/notificator.cpp \
|
||||
src/qt/qtipcserver.cpp \
|
||||
src/qt/paymentserver.cpp \
|
||||
src/qt/rpcconsole.cpp \
|
||||
src/scrypt.c \
|
||||
src/noui.cpp
|
||||
src/scrypt.cpp \
|
||||
src/noui.cpp \
|
||||
src/leveldb.cpp \
|
||||
src/txdb.cpp \
|
||||
src/qt/splashscreen.cpp
|
||||
|
||||
RESOURCES += \
|
||||
src/qt/bitcoin.qrc
|
||||
RESOURCES += src/qt/bitcoin.qrc
|
||||
|
||||
FORMS += \
|
||||
src/qt/forms/sendcoinsdialog.ui \
|
||||
FORMS += src/qt/forms/sendcoinsdialog.ui \
|
||||
src/qt/forms/coincontroldialog.ui \
|
||||
src/qt/forms/addressbookpage.ui \
|
||||
src/qt/forms/signverifymessagedialog.ui \
|
||||
src/qt/forms/aboutdialog.ui \
|
||||
@@ -261,10 +329,21 @@ SOURCES += src/qt/test/test_main.cpp \
|
||||
HEADERS += src/qt/test/uritests.h
|
||||
DEPENDPATH += src/qt/test
|
||||
QT += testlib
|
||||
TARGET = bitcoin-qt_test
|
||||
TARGET = casinocoin-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
|
||||
|
||||
# for lrelease/lupdate
|
||||
@@ -285,14 +364,20 @@ TSQM.CONFIG = no_link
|
||||
QMAKE_EXTRA_COMPILERS += TSQM
|
||||
|
||||
# "Other files" to show in Qt Creator
|
||||
OTHER_FILES += \
|
||||
contrib/gitian-descriptors/* doc/*.rst doc/*.txt doc/README README.md res/bitcoin-qt.rc \
|
||||
share/setup.nsi
|
||||
OTHER_FILES += README.md \
|
||||
doc/*.rst \
|
||||
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
|
||||
isEmpty(BOOST_LIB_SUFFIX) {
|
||||
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) {
|
||||
@@ -319,11 +404,10 @@ isEmpty(BOOST_INCLUDE_PATH) {
|
||||
macx:BOOST_INCLUDE_PATH = /opt/local/include
|
||||
}
|
||||
|
||||
windows:LIBS += -lshlwapi
|
||||
windows:DEFINES += WIN32
|
||||
windows:RC_FILE = src/qt/res/bitcoin-qt.rc
|
||||
win32:DEFINES += WIN32
|
||||
win32: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
|
||||
# thread-safety flag. GCC has -mthreads to enable this, but it doesn't
|
||||
# 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
|
||||
}
|
||||
|
||||
!windows:!mac {
|
||||
!win32:!macx {
|
||||
DEFINES += LINUX
|
||||
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:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm
|
||||
macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit
|
||||
macx:HEADERS += src/qt/macdockiconhandler.h src/qt/macnotificationhandler.h
|
||||
macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm src/qt/macnotificationhandler.mm
|
||||
macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -framework CoreServices
|
||||
macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0
|
||||
macx:ICON = src/qt/res/icons/bitcoin.icns
|
||||
macx:TARGET = "CasinoCoin-Qt"
|
||||
macx:ICON = src/qt/res/icons/casinocoin.icns
|
||||
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
|
||||
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 += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX
|
||||
LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX -lpthread
|
||||
# -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
|
||||
win32:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX
|
||||
macx:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX
|
||||
|
||||
contains(RELEASE, 1) {
|
||||
!windows:!macx {
|
||||
!win32:!macx {
|
||||
# Linux: turn dynamic linking back on for c/c++ runtime libraries
|
||||
LIBS += -Wl,-Bdynamic
|
||||
}
|
||||
}
|
||||
|
||||
system($$QMAKE_LRELEASE -silent $$_PRO_FILE_)
|
||||
|
||||
|
||||
system($$QMAKE_LRELEASE -silent $$TRANSLATIONS)
|
||||
|
||||
@@ -10,9 +10,9 @@ rpcpass = ""
|
||||
|
||||
|
||||
if rpcpass == "":
|
||||
access = ServiceProxy("http://127.0.0.1:8332")
|
||||
access = ServiceProxy("http://127.0.0.1:47970")
|
||||
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()
|
||||
|
||||
if cmd == "backupwallet":
|
||||
@@ -24,7 +24,7 @@ if cmd == "backupwallet":
|
||||
|
||||
elif cmd == "getaccount":
|
||||
try:
|
||||
addr = raw_input("Enter a Bitcoin address: ")
|
||||
addr = raw_input("Enter a CasinoCoin address: ")
|
||||
print access.getaccount(addr)
|
||||
except:
|
||||
print "\n---An error occurred---\n"
|
||||
@@ -126,7 +126,7 @@ elif cmd == "getreceivedbyaccount":
|
||||
|
||||
elif cmd == "getreceivedbyaddress":
|
||||
try:
|
||||
addr = raw_input("Enter a Bitcoin address (optional): ")
|
||||
addr = raw_input("Enter a CasinoCoin address (optional): ")
|
||||
mc = raw_input("Minimum confirmations (optional): ")
|
||||
try:
|
||||
print access.getreceivedbyaddress(addr, mc)
|
||||
|
||||
20
contrib/debian/README
Normal 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)
|
||||
|
||||
62
contrib/debian/bin/.svn/entries
Normal 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
|
||||
|
||||
14
contrib/debian/bin/.svn/text-base/bitcoind.svn-base
Normal 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 "$@"
|
||||
@@ -4,9 +4,9 @@ Name=Bitcoin
|
||||
Comment=Bitcoin P2P Cryptocurrency
|
||||
Comment[fr]=Bitcoin, monnaie virtuelle cryptographique pair à pair
|
||||
Comment[tr]=Bitcoin, eşten eşe kriptografik sanal para birimi
|
||||
Exec=/usr/bin/bitcoin-qt
|
||||
Exec=/usr/bin/bitcoin-qt %u
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=/usr/share/pixmaps/bitcoin80.xpm
|
||||
Icon=/usr/share/pixmaps/bitcoin128.png
|
||||
MimeType=x-scheme-handler/bitcoin;
|
||||
Categories=Office;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
bitcoin-qt usr/bin
|
||||
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.protocol usr/share/kde4/services/
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
debian/bin/bitcoind usr/bin
|
||||
src/bitcoind usr/lib/bitcoin
|
||||
src/bitcoind usr/bin
|
||||
|
||||
@@ -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
|
||||
|
||||
* New upstream release.
|
||||
|
||||
@@ -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
|
||||
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
|
||||
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
|
||||
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
|
||||
requires 2+ GB of space, slowly growing.
|
||||
.
|
||||
|
||||
@@ -55,8 +55,7 @@ Comment: Icon Pack: Human-O2
|
||||
|
||||
Files: src/qt/res/icons/transaction*.png
|
||||
Copyright: md2k7
|
||||
License: You are free to do with these icons as you wish, including selling,
|
||||
copying, modifying etc.
|
||||
License: Expat
|
||||
Comment: Site: https://bitcointalk.org/index.php?topic=15276.0
|
||||
|
||||
Files: src/qt/res/icons/configure.png, src/qt/res/icons/quit.png,
|
||||
@@ -78,7 +77,7 @@ License: GPL-3+
|
||||
Comment: Icon Pack: Kids
|
||||
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
|
||||
Copyright: Crobbo (forum)
|
||||
Comment: Site: https://bitcointalk.org/index.php?topic=32273.0
|
||||
|
||||
@@ -11,16 +11,12 @@
|
||||
|
||||
# Use as many addnode= settings as you like to connect to specific peers
|
||||
#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
|
||||
# to specific peers:
|
||||
#connect=69.164.218.197
|
||||
#connect=10.0.0.1:8333
|
||||
|
||||
# Do not use Internet Relay Chat (irc.lfnet.org #bitcoin channel) to
|
||||
# find other peers.
|
||||
#noirc=1
|
||||
#connect=10.0.0.1:47950
|
||||
|
||||
# Maximum number of inbound+outbound connections.
|
||||
#maxconnections=
|
||||
@@ -42,7 +38,7 @@
|
||||
#rpcallowip=192.168.1.*
|
||||
|
||||
# Listen for RPC connections on this TCP port:
|
||||
rpcport=8332
|
||||
rpcport=47970
|
||||
|
||||
# You can use Bitcoin or bitcoind to send commands to Bitcoin/bitcoind
|
||||
# running on another host using this option:
|
||||
|
||||
206
contrib/debian/manpages/bitcoin-qt.1
Normal 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)
|
||||
@@ -2,11 +2,11 @@
|
||||
.SH NAME
|
||||
bitcoin.conf \- bitcoin configuration file
|
||||
.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
|
||||
The configuration file is a list of 'setting=value' pairs, one per line, with optional comments starting with the '#' character.
|
||||
.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
|
||||
bitcoin.conf should be located in $HOME/.bitcoin
|
||||
.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
|
||||
Connect via a socks4 proxy.
|
||||
.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.
|
||||
.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.
|
||||
.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
|
||||
Maximum number of inbound+outbound connections.
|
||||
.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
|
||||
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
|
||||
\fBrpcport=\fR\fI'8332'\fR
|
||||
\fBrpcport=\fR\fI'47970'\fR
|
||||
Listen for RPC connections on this TCP port.
|
||||
.TP
|
||||
\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.
|
||||
.TP
|
||||
\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
|
||||
\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
|
||||
\fBrpcsslcertificatechainfile=\fR\fI'server.cert'\fR
|
||||
.TP
|
||||
|
||||
@@ -4,7 +4,7 @@ bitcoind \- peer-to-peer network based digital currency
|
||||
.SH SYNOPSIS
|
||||
bitcoin [options] <command> [params]
|
||||
.TP
|
||||
bitcoin [options] help <command> - Get help for a command
|
||||
bitcoin [options] help <command> \- Get help for a command
|
||||
.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:
|
||||
|
||||
@@ -75,7 +75,7 @@ Server certificate file (default: server.cert)
|
||||
Server private key (default: server.pem)
|
||||
.TP
|
||||
\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
|
||||
\-?
|
||||
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.
|
||||
.TP
|
||||
\fBsetgenerate 'generate' ['genproclimit']\fR
|
||||
Generation is limited to ['genproclimit'] processors, -1 is unlimited.
|
||||
Generation is limited to ['genproclimit'] processors, \-1 is unlimited.
|
||||
.TP
|
||||
\fBgethashespersec\fR
|
||||
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.
|
||||
.TP
|
||||
\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.
|
||||
"amount" : amount of transaction.
|
||||
|
||||
@@ -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 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:
|
||||
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:
|
||||
sudo service apt-cacher-ng status # Should return apt-cacher-ng is running
|
||||
ls -l /dev/kvm # Should show a /dev/kvm device
|
||||
|
||||
|
||||
Once you've got the right hardware and software:
|
||||
|
||||
git clone git://github.com/bitcoin/bitcoin.git
|
||||
git clone git://github.com/devrandom/gitian-builder.git
|
||||
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
|
||||
bin/make-base-vm --arch i386
|
||||
bin/make-base-vm --arch amd64
|
||||
cd ..
|
||||
|
||||
# To build
|
||||
# Build Linux release:
|
||||
cd bitcoin
|
||||
git pull
|
||||
cd ../gitian-builder
|
||||
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
|
||||
|
||||
@@ -1,38 +1,66 @@
|
||||
---
|
||||
name: "boost"
|
||||
suites:
|
||||
- "lucid"
|
||||
- "precise"
|
||||
architectures:
|
||||
- "i386"
|
||||
- "amd64"
|
||||
packages:
|
||||
- "mingw32"
|
||||
- "mingw-w64"
|
||||
- "g++-mingw-w64"
|
||||
- "faketime"
|
||||
- "zip"
|
||||
reference_datetime: "2011-01-30 00:00:00"
|
||||
remotes: []
|
||||
files:
|
||||
- "boost_1_49_0.tar.bz2"
|
||||
- "boost_1_55_0.tar.bz2"
|
||||
- "boost-mingw-gas-cross-compile-2013-03-03.patch"
|
||||
script: |
|
||||
TMPDIR="$HOME/tmpdir"
|
||||
mkdir -p $TMPDIR/bin/$GBUILD_BITS $TMPDIR/include
|
||||
tar xjf boost_1_49_0.tar.bz2
|
||||
cd boost_1_49_0
|
||||
echo "using gcc : 4.4 : i586-mingw32msvc-g++
|
||||
# Defines
|
||||
INSTALLPREFIX="$OUTDIR/staging/boost"
|
||||
HOST=i686-w64-mingw32
|
||||
# Input Integrity Check
|
||||
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
|
||||
<archiver>i586-mingw32msvc-ar
|
||||
<rc>$HOST-windres
|
||||
<archiver>$HOST-ar
|
||||
<cxxflags>-frandom-seed=boost1
|
||||
<ranlib>$HOST-ranlib
|
||||
;" > user-config.jam
|
||||
./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
|
||||
mkdir $lib
|
||||
(cd $lib ; ar xf ../stage/lib/libboost_${lib}-mt-s.a)
|
||||
mv $lib $TMPDIR/bin/$GBUILD_BITS
|
||||
done
|
||||
cp -a boost $TMPDIR/include
|
||||
cd $TMPDIR
|
||||
|
||||
# Workaround: Upstream boost dev refuses to include patch that would allow Free Software cross-compile toolchain to work
|
||||
# This patch was authored by the Fedora package developer and ships in Fedora's mingw32-boost.
|
||||
# Please obtain the exact patch that matches the above sha256sum from one of the following mirrors.
|
||||
#
|
||||
# Read History: https://svn.boost.org/trac/boost/ticket/7262
|
||||
# History Mirror: http://rose.makesad.us/~paulproteus/mirrors/7262%20Boost.Context%20fails%20to%20build%20using%20MinGW.html
|
||||
#
|
||||
# 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 FAKETIME=$REFERENCE_DATETIME
|
||||
zip -r boost-win32-1.49.0-gitian2.zip *
|
||||
cp boost-win32-1.49.0-gitian2.zip $OUTDIR
|
||||
zip -r boost-win32-1.55.0-gitian-r6.zip *
|
||||
cp boost-win32-1.55.0-gitian-r6.zip $OUTDIR
|
||||
|
||||
@@ -1,72 +1,93 @@
|
||||
---
|
||||
name: "casinocoin-deps"
|
||||
name: "bitcoin-deps"
|
||||
suites:
|
||||
- "lucid"
|
||||
- "precise"
|
||||
architectures:
|
||||
- "i386"
|
||||
- "amd64"
|
||||
packages:
|
||||
- "mingw32"
|
||||
- "mingw-w64"
|
||||
- "g++-mingw-w64"
|
||||
- "git-core"
|
||||
- "zip"
|
||||
- "faketime"
|
||||
- "wine"
|
||||
- "psmisc"
|
||||
reference_datetime: "2011-01-30 00:00:00"
|
||||
remotes: []
|
||||
files:
|
||||
- "openssl-1.0.1b.tar.gz"
|
||||
- "openssl-1.0.1c.tar.gz"
|
||||
- "db-4.8.30.NC.tar.gz"
|
||||
- "miniupnpc-1.6.tar.gz"
|
||||
- "zlib-1.2.7.tar.gz"
|
||||
- "libpng-1.5.12.tar.gz"
|
||||
- "zlib-1.2.6.tar.gz"
|
||||
- "libpng-1.5.9.tar.gz"
|
||||
- "qrencode-3.2.0.tar.bz2"
|
||||
script: |
|
||||
#
|
||||
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
|
||||
export FAKETIME=$REFERENCE_DATETIME
|
||||
export TZ=UTC
|
||||
export INSTALLPREFIX=$OUTDIR/staging/deps
|
||||
export HOST=i686-w64-mingw32
|
||||
#
|
||||
tar xzf openssl-1.0.1b.tar.gz
|
||||
cd openssl-1.0.1b
|
||||
./Configure --cross-compile-prefix=i586-mingw32msvc- mingw
|
||||
mkdir -p $INSTALLPREFIX
|
||||
|
||||
tar xzf openssl-1.0.1c.tar.gz
|
||||
cd openssl-1.0.1c
|
||||
./Configure --cross-compile-prefix=$HOST- mingw --openssldir=$INSTALLPREFIX
|
||||
make
|
||||
make install_sw
|
||||
cd ..
|
||||
#
|
||||
tar xzf db-4.8.30.NC.tar.gz
|
||||
cd db-4.8.30.NC/build_unix
|
||||
../dist/configure --enable-mingw --enable-cxx --host=i586-mingw32msvc CFLAGS="-I/usr/i586-mingw32msvc/include"
|
||||
make $MAKEOPTS
|
||||
../dist/configure --prefix=$INSTALLPREFIX --enable-mingw --enable-cxx --host=$HOST --disable-shared
|
||||
make $MAKEOPTS library_build
|
||||
make install_lib install_include
|
||||
cd ../..
|
||||
#
|
||||
tar xzf miniupnpc-1.6.tar.gz
|
||||
cd miniupnpc-1.6
|
||||
sed 's/dllwrap -k --driver-name gcc/$(DLLWRAP) -k --driver-name $(CC)/' -i Makefile.mingw
|
||||
sed 's|wingenminiupnpcstrings $< $@|./wingenminiupnpcstrings $< $@|' -i Makefile.mingw
|
||||
make -f Makefile.mingw DLLWRAP=i586-mingw32msvc-dllwrap CC=i586-mingw32msvc-gcc AR=i586-mingw32msvc-ar
|
||||
cd ..
|
||||
mv miniupnpc-1.6 miniupnpc
|
||||
#
|
||||
tar xzf zlib-1.2.7.tar.gz
|
||||
cd zlib-1.2.7
|
||||
make -f win32/Makefile.gcc PREFIX=i586-mingw32msvc- $MAKEOPTS
|
||||
echo "
|
||||
--- miniupnpc-1.6/Makefile.mingw.orig 2013-09-29 18:52:51.014087958 -1000
|
||||
+++ miniupnpc-1.6/Makefile.mingw 2013-09-29 19:09:29.663318691 -1000
|
||||
@@ -67,8 +67,8 @@
|
||||
|
||||
wingenminiupnpcstrings.o: wingenminiupnpcstrings.c
|
||||
|
||||
-miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings
|
||||
- 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 ..
|
||||
#
|
||||
tar xzf libpng-1.5.12.tar.gz
|
||||
cd libpng-1.5.12
|
||||
./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/"
|
||||
tar xzf zlib-1.2.6.tar.gz
|
||||
cd zlib-1.2.6
|
||||
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 install
|
||||
cd ..
|
||||
#
|
||||
tar xjf qrencode-3.2.0.tar.bz2
|
||||
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"
|
||||
make $MAKEOPTS
|
||||
png_CFLAGS="-I$INSTALLPREFIX/include" png_LIBS="-L$INSTALLPREFIX/lib -lpng" ./configure --prefix=$INSTALLPREFIX --host=$HOST
|
||||
make
|
||||
make install
|
||||
cd ..
|
||||
#
|
||||
zip -r $OUTDIR/casinocoin-deps-0.0.4.zip \
|
||||
$(ls qrencode-*/{qrencode.h,.libs/libqrencode.{,l}a} | sort) \
|
||||
$(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
|
||||
cd $INSTALLPREFIX
|
||||
zip -r $OUTDIR/bitcoin-deps-win32-gitian-r9.zip include lib
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
---
|
||||
name: "casinocoin"
|
||||
suites:
|
||||
- "lucid"
|
||||
- "precise"
|
||||
architectures:
|
||||
- "i386"
|
||||
- "amd64"
|
||||
packages:
|
||||
- "mingw32"
|
||||
- "mingw-w64"
|
||||
- "g++-mingw-w64"
|
||||
- "git-core"
|
||||
- "unzip"
|
||||
- "nsis"
|
||||
@@ -15,53 +16,42 @@ remotes:
|
||||
- "url": "https://github.com/casinocoin-project/casinocoin.git"
|
||||
"dir": "casinocoin"
|
||||
files:
|
||||
- "qt-win32-4.7.4-gitian.zip"
|
||||
- "boost-win32-1.49.0-gitian2.zip"
|
||||
- "casinocoin-deps-0.0.4.zip"
|
||||
- "qt-win32-4.8.3-gitian-r4.zip"
|
||||
- "boost-win32-1.55.0-gitian-r6.zip"
|
||||
- "bitcoin-deps-win32-gitian-r9.zip"
|
||||
script: |
|
||||
#
|
||||
mkdir $HOME/qt
|
||||
cd $HOME/qt
|
||||
unzip ../build/qt-win32-4.7.4-gitian.zip
|
||||
STAGING=$HOME/staging
|
||||
HOST=i686-w64-mingw32
|
||||
#
|
||||
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/
|
||||
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
|
||||
export PATH=$STAGING/host/bin:$PATH
|
||||
mkdir -p $OUTDIR/src
|
||||
git archive HEAD | tar -x -C $OUTDIR/src
|
||||
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 FAKETIME=$REFERENCE_DATETIME
|
||||
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
|
||||
i586-mingw32msvc-strip release/casinocoin-qt.exe
|
||||
$HOST-strip release/casinocoin-qt.exe
|
||||
cp release/casinocoin-qt.exe $OUTDIR/
|
||||
#
|
||||
cd src
|
||||
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
|
||||
export FAKETIME=$REFERENCE_DATETIME
|
||||
export TZ=UTC
|
||||
make -f makefile.linux-mingw $MAKEOPTS DEPSDIR=$HOME/build casinocoind.exe USE_UPNP=0 DEBUGFLAGS="-frandom-seed=casinocoin"
|
||||
i586-mingw32msvc-strip casinocoind.exe
|
||||
make -f makefile.linux-mingw $MAKEOPTS DEPSDIR=$STAGING casinocoind.exe USE_UPNP=0 DEBUGFLAGS="-frandom-seed=casinocoin" USE_SSE2=1
|
||||
$HOST-strip casinocoind.exe
|
||||
mkdir $OUTDIR/daemon
|
||||
cp casinocoind.exe $OUTDIR/daemon
|
||||
cd ..
|
||||
|
||||
@@ -43,13 +43,13 @@ script: |
|
||||
cd casinocoin
|
||||
mkdir -p $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
|
||||
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
|
||||
install -s casinocoind $OUTDIR/bin/$GBUILD_BITS
|
||||
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
|
||||
install -s casinocoin-qt $OUTDIR/bin/$GBUILD_BITS
|
||||
install casinocoin-qt $OUTDIR/bin/$GBUILD_BITS
|
||||
|
||||
@@ -1,54 +1,62 @@
|
||||
---
|
||||
name: "qt"
|
||||
suites:
|
||||
- "lucid"
|
||||
- "precise"
|
||||
architectures:
|
||||
- "i386"
|
||||
- "amd64"
|
||||
packages:
|
||||
- "mingw32"
|
||||
- "mingw-w64"
|
||||
- "g++-mingw-w64"
|
||||
- "zip"
|
||||
- "unzip"
|
||||
- "faketime"
|
||||
reference_datetime: "2011-01-30 00:00:00"
|
||||
remotes: []
|
||||
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: |
|
||||
INSTDIR="$HOME/qt/"
|
||||
mkdir $INSTDIR
|
||||
SRCDIR="$INSTDIR/src/"
|
||||
mkdir $SRCDIR
|
||||
#
|
||||
tar xzf qt-everywhere-opensource-src-4.7.4.tar.gz
|
||||
cd qt-everywhere-opensource-src-4.7.4
|
||||
HOST=i686-w64-mingw32
|
||||
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/i686-pc-mingw32-/i586-mingw32msvc-/' -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 "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/$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_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_RCC\t\t= i586-mingw32msvc-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_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= $HOST-rcc/QMAKE_RCC\t\t= rcc/" -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
|
||||
# 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.
|
||||
# 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 '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
|
||||
#export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
|
||||
export FAKETIME=$REFERENCE_DATETIME
|
||||
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
|
||||
make $MAKEOPTS install
|
||||
cp -a bin $SRCDIR/
|
||||
cd $INSTDIR
|
||||
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
|
||||
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 *
|
||||
|
||||
20
contrib/gitian-downloader/aspect-key.pgp
Normal 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-----
|
||||
75
contrib/gitian-downloader/coblee-key.pgp
Normal 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-----
|
||||
54
contrib/gitian-downloader/face-key.pgp
Normal 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-----
|
||||
@@ -35,4 +35,24 @@ signers:
|
||||
weight: 40
|
||||
name: "Wladimir J. van der Laan"
|
||||
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
|
||||
|
||||
30
contrib/gitian-downloader/thrasher-key.pgp
Normal 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-----
|
||||
@@ -35,4 +35,24 @@ signers:
|
||||
weight: 40
|
||||
name: "Wladimir J. van der Laan"
|
||||
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
|
||||
|
||||
131
contrib/gitian-downloader/wtogami-key.pgp
Normal 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-----
|
||||
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 13 KiB |
@@ -18,6 +18,7 @@
|
||||
#
|
||||
|
||||
import subprocess, sys, re, os, shutil, stat, os.path
|
||||
from string import Template
|
||||
from time import sleep
|
||||
from argparse import ArgumentParser
|
||||
|
||||
@@ -169,6 +170,11 @@ class DeploymentInfo(object):
|
||||
elif os.path.exists(os.path.join(parentDir, "share", "qt4", "translations")):
|
||||
# MacPorts layout, e.g. "/opt/local/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:
|
||||
pluginPath = os.path.join(self.qtPath, "plugins")
|
||||
@@ -239,6 +245,10 @@ def runStrip(binaryPath, verbose):
|
||||
subprocess.check_call(["strip", "-x", binaryPath])
|
||||
|
||||
def copyFramework(framework, path, verbose):
|
||||
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)
|
||||
toPath = os.path.join(toDir, framework.binaryName)
|
||||
@@ -342,7 +352,7 @@ def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose):
|
||||
if pluginDirectory == "designer":
|
||||
# Skip designer plugins
|
||||
continue
|
||||
elif pluginDirectory == "phonon":
|
||||
elif pluginDirectory == "phonon" or pluginDirectory == "phonon_backend":
|
||||
# Deploy the phonon plugins only if phonon is in use
|
||||
if not deploymentInfo.usesFramework("phonon"):
|
||||
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.
|
||||
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("-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-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("-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")
|
||||
@@ -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:
|
||||
def runHDIUtil(verb, image_basename, **kwargs):
|
||||
hdiutil_args = ["hdiutil", verb, image_basename + ".dmg"]
|
||||
@@ -704,30 +728,67 @@ if config.dmg is not None:
|
||||
if fancy.get("applications_symlink", False):
|
||||
os.symlink("/Applications", os.path.join(disk_root, "Applications"))
|
||||
|
||||
finder = appscript.app("Finder")
|
||||
disk = finder.disks[disk_name]
|
||||
disk.open()
|
||||
window = disk.container_window
|
||||
window.current_view.set(appscript.k.icon_view)
|
||||
window.toolbar_visible.set(False)
|
||||
window.statusbar_visible.set(False)
|
||||
if fancy.has_key("window_bounds"):
|
||||
window.bounds.set(fancy["window_bounds"])
|
||||
view_options = window.icon_view_options
|
||||
view_options.arrangement.set(appscript.k.not_arranged)
|
||||
if fancy.has_key("icon_size"):
|
||||
view_options.icon_size.set(fancy["icon_size"])
|
||||
if bg_path is not None:
|
||||
view_options.background_picture.set(disk.files[os.path.basename(bg_path)])
|
||||
# The Python appscript package broke with OSX 10.8 and isn't being fixed.
|
||||
# So we now build up an AppleScript string and use the osascript command
|
||||
# to make the .dmg file pretty:
|
||||
appscript = Template( """
|
||||
on run argv
|
||||
tell application "Finder"
|
||||
tell disk "$disk"
|
||||
open
|
||||
set current view of container window to icon view
|
||||
set toolbar visible of container window to false
|
||||
set statusbar visible of container window to false
|
||||
set the bounds of container window to {$window_bounds}
|
||||
set theViewOptions to the icon view options of container window
|
||||
set arrangement of theViewOptions to not arranged
|
||||
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"):
|
||||
for name, position in fancy["items_position"].iteritems():
|
||||
window.items[name].position.set(position)
|
||||
disk.close()
|
||||
params = { "item" : name, "position" : ",".join([str(p) for p in position]) }
|
||||
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:
|
||||
subprocess.call(["SetFile", "-a", "V", bg_path])
|
||||
disk.update(registering_applications=False)
|
||||
sleep(2)
|
||||
disk.eject()
|
||||
# Set background file, then call SetFile to make it invisible.
|
||||
# (note: making it invisible first makes set background picture fail)
|
||||
bgscript = Template("""set background picture of theViewOptions to file "$bgpic"
|
||||
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:
|
||||
print "+ Finalizing .dmg disk image +"
|
||||
|
||||
@@ -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.
|
||||
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
|
||||
|
||||
During the process, the disk image window will pop up briefly where the fancy
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# RPC login details
|
||||
#
|
||||
host=127.0.0.1
|
||||
port=8332
|
||||
port=47970
|
||||
|
||||
rpcuser=myusername
|
||||
rpcpass=mypass
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# Copyright (c) 2011 The Bitcoin developers
|
||||
# Distributed under the MIT/X11 software license, see the accompanying
|
||||
# file license.txt or http://www.opensource.org/licenses/mit-license.php.
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#
|
||||
|
||||
import time
|
||||
@@ -217,7 +217,7 @@ if __name__ == '__main__':
|
||||
if 'host' not in settings:
|
||||
settings['host'] = '127.0.0.1'
|
||||
if 'port' not in settings:
|
||||
settings['port'] = 8332
|
||||
settings['port'] = 47970
|
||||
if 'threads' not in settings:
|
||||
settings['threads'] = 1
|
||||
if 'hashmeter' not in settings:
|
||||
|
||||
9
contrib/seeds/README
Normal 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).
|
||||
32
contrib/seeds/makeseeds.py
Normal 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
@@ -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.
|
||||
9
contrib/spendfrom/setup.py
Normal 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'],
|
||||
)
|
||||
267
contrib/spendfrom/spendfrom.py
Normal 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()
|
||||
4
contrib/test-patches/README
Normal 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
@@ -0,0 +1 @@
|
||||
Utilities to generate test vectors for the data-driven Bitcoin tests
|
||||
104
contrib/testgen/base58.py
Normal 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")
|
||||
126
contrib/testgen/gen_base58_test_vectors.py
Normal 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
@@ -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."
|
||||
96
contrib/wallettools/.svn/entries
Normal 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
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -1,5 +1,5 @@
|
||||
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: ")
|
||||
pwd2 = raw_input("Enter new wallet passphrase: ")
|
||||
access.walletpassphrasechange(pwd, pwd2)
|
||||
@@ -1,4 +1,4 @@
|
||||
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: ")
|
||||
access.walletpassphrase(pwd, 60)
|
||||
@@ -28,7 +28,7 @@ DOXYFILE_ENCODING = UTF-8
|
||||
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
|
||||
# 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.
|
||||
# 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
|
||||
# put the command \sideeffect (or @sideeffect) in the documentation, which
|
||||
# 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 =
|
||||
|
||||
|
||||
47
doc/README.md
Normal 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)
|
||||
@@ -1,8 +1,7 @@
|
||||
CasinoCoin 0.6 BETA
|
||||
CasinoCoin 0.8.x BETA
|
||||
|
||||
Copyright (c) 2009-2012 Bitcoin Developers
|
||||
Copyright (c) 2011-2012 Litecoin Developers
|
||||
Copyright (c) 2013 CasinoCoin Developers
|
||||
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
|
||||
@@ -22,16 +21,8 @@ Setup
|
||||
-----
|
||||
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
|
||||
"Excluded processes" list. Microsoft Security Essentials->Settings tab,
|
||||
select Excluded processes, press Add, select casinocoin-qt.exe, OK, Save changes.
|
||||
CasinoCoin-Qt is the original CasinoCoin client and it builds the backbone of the network.
|
||||
However, it downloads and stores the entire history of CasinoCoin transactions;
|
||||
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.
|
||||
|
||||
38
doc/Tor.txt
@@ -1,19 +1,19 @@
|
||||
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.
|
||||
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
|
||||
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.
|
||||
|
||||
-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
|
||||
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
|
||||
to run a hidden service (see next section), you'll need to enable
|
||||
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:
|
||||
|
||||
./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
|
||||
reachable from the Tor network. Add these lines to your /etc/tor/torrc (or equivalent
|
||||
config file):
|
||||
|
||||
HiddenServiceDir /var/lib/tor/bitcoin-service/
|
||||
HiddenServicePort 9333 127.0.0.1:9333
|
||||
HiddenServiceDir /var/lib/tor/casinocoin-service/
|
||||
HiddenServicePort 47950 127.0.0.1:47950
|
||||
|
||||
The directory can be different of course, but (both) 9333's should be equal to your
|
||||
bitcoind's P2P listen port (9333 by default).
|
||||
The directory can be different of course, but (both) port numbers should be equal to
|
||||
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
|
||||
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
|
||||
coming from unroutable addresses (such as 127.0.0.1, where the
|
||||
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:
|
||||
|
||||
./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
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
@@ -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,
|
||||
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
|
||||
License: MIT
|
||||
|
||||
@@ -29,6 +28,7 @@ Designer: md2k7
|
||||
Site: https://bitcointalk.org/index.php?topic=15276.0
|
||||
License: You are free to do with these icons as you wish, including selling,
|
||||
copying, modifying etc.
|
||||
License: MIT
|
||||
|
||||
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,
|
||||
@@ -38,23 +38,21 @@ Designer: http://www.everaldo.com
|
||||
Icon Pack: Crystal SVG
|
||||
License: LGPL
|
||||
|
||||
Icon: src/qt/res/icons/bitcoin.png, src/qt/res/icons/toolbar.png
|
||||
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: scripts/img/reload.xcf (modified), src/qt/res/movies/update_spinner.mng
|
||||
Icon Pack: Kids
|
||||
Designer: Everaldo (Everaldo Coelho)
|
||||
License: GNU/GPL
|
||||
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
|
||||
Designer: Vignoni David
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 4.6 KiB |
89
doc/build-msw.md
Normal 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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();
|
||||
@@ -1,5 +1,5 @@
|
||||
CasinoCoin-Qt: Qt4 GUI for CasinoCoin
|
||||
================================
|
||||
===============================
|
||||
|
||||
Build instructions
|
||||
===================
|
||||
@@ -8,13 +8,31 @@ Debian
|
||||
-------
|
||||
|
||||
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 \
|
||||
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:
|
||||
|
||||
@@ -27,45 +45,38 @@ Alternatively, install `Qt Creator`_ and open the `casinocoin-qt.pro` file.
|
||||
|
||||
An executable named `casinocoin-qt` will be built.
|
||||
|
||||
.. _`Qt Creator`: http://qt.nokia.com/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
|
||||
|
||||
.. _`Qt Creator`: http://qt-project.org/downloads/
|
||||
|
||||
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 `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 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
|
||||
.. _`HomeBrew`: http://mxcl.github.io/homebrew/
|
||||
|
||||
|
||||
Build configuration options
|
||||
|
||||
100
doc/release-notes.md
Normal 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
@@ -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
|
||||
@@ -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
|
||||
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
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
35
doc/unit-tests.md
Normal 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.
|
||||
37
share/certs/BitcoinFoundation_Apple_Cert.pem
Normal 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-----
|
||||
37
share/certs/BitcoinFoundation_Comodo_Cert.pem
Normal 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-----
|
||||
46
share/certs/PrivateKeyNotes.md
Normal 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?"
|
||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 88 KiB |
BIN
share/pixmaps/bitcoin128.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
1084
share/pixmaps/bitcoin128.xpm
Normal file
BIN
share/pixmaps/bitcoin16.png
Normal file
|
After Width: | Height: | Size: 871 B |
167
share/pixmaps/bitcoin16.xpm
Normal 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 "
|
||||
};
|
||||
BIN
share/pixmaps/bitcoin256.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
1969
share/pixmaps/bitcoin256.xpm
Normal file
BIN
share/pixmaps/bitcoin32.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
@@ -1,112 +1,348 @@
|
||||
/* XPM */
|
||||
static char * bitcoin32_xpm[] = {
|
||||
"32 32 77 1",
|
||||
static char *graphic[] = {
|
||||
/* width height num_colors chars_per_pixel */
|
||||
"32 32 309 2",
|
||||
/* colors */
|
||||
" c None",
|
||||
". c #A2A1A1",
|
||||
"+ c #A1A1A1",
|
||||
"@ c #A1A0A0",
|
||||
"# c #9F9F9F",
|
||||
"$ c #A7A7A7",
|
||||
"% c #A9A9A9",
|
||||
"& c #AEAEAE",
|
||||
"* c #B0B0B0",
|
||||
"= c #B1B1B1",
|
||||
"- c #A8A8A8",
|
||||
"; c #A4A4A4",
|
||||
"> c #ACACAC",
|
||||
", c #B2B2B2",
|
||||
"' c #AAAAAA",
|
||||
") c #ABABAB",
|
||||
"! c #A6A6A6",
|
||||
"~ c #A3A3A3",
|
||||
"{ c #A8A7A7",
|
||||
"] c #A5A5A5",
|
||||
"^ c #ADADAD",
|
||||
"/ c #9E9E9E",
|
||||
"( c #ADACAC",
|
||||
"_ c #A2A2A2",
|
||||
": c #A0A0A0",
|
||||
"< c #9D9D9D",
|
||||
"[ c #A5A4A4",
|
||||
"} c #9C9C9C",
|
||||
"| c #9B9B9B",
|
||||
"1 c #979797",
|
||||
"2 c #8C8C8C",
|
||||
"3 c #848484",
|
||||
"4 c #838383",
|
||||
"5 c #878787",
|
||||
"6 c #929292",
|
||||
"7 c #9A9A9A",
|
||||
"8 c #AFAFAF",
|
||||
"9 c #8B8B8B",
|
||||
"0 c #7F7F7F",
|
||||
"a c #808080",
|
||||
"b c #7E7E7E",
|
||||
"c c #828282",
|
||||
"d c #969696",
|
||||
"e c #939292",
|
||||
"f c #999999",
|
||||
"g c #898989",
|
||||
"h c #8A8A8A",
|
||||
"i c #888888",
|
||||
"j c #959595",
|
||||
"k c #939393",
|
||||
"l c #909090",
|
||||
"m c #8D8D8D",
|
||||
"n c #9D9C9C",
|
||||
"o c #B4B4B4",
|
||||
"p c #B6B6B6",
|
||||
"q c #919090",
|
||||
"r c #A9A8A8",
|
||||
"s c #B8B8B8",
|
||||
"t c #BCBCBC",
|
||||
"u c #B5B5B5",
|
||||
"v c #C5C5C5",
|
||||
"w c #C1C1C1",
|
||||
"x c #B3B3B3",
|
||||
"y c #C8C8C8",
|
||||
"z c #BFBFBF",
|
||||
"A c #B9B9B9",
|
||||
"B c #AAA9A9",
|
||||
"C c #9E9D9D",
|
||||
"D c #949494",
|
||||
"E c #919191",
|
||||
"F c #8E8E8E",
|
||||
"G c #858585",
|
||||
"H c #B7B7B7",
|
||||
"I c #818181",
|
||||
"J c #989898",
|
||||
"K c #949393",
|
||||
"L c #989797",
|
||||
" ",
|
||||
" .+@ ",
|
||||
" #$%&*==*&-; ",
|
||||
" +>,')'!;~!%%)={ ",
|
||||
" -*)&'!;+##+~]%^%*/ ",
|
||||
" ()&'$;_:/<</#+~!%>'[ ",
|
||||
" ^%'!~+#/<}|||}/#+~!%-] ",
|
||||
" '));_:/<}1234567<<#+~'%# ",
|
||||
" _&8$_/<}}790aabcd<}</+!>&e ",
|
||||
" *,);:/}</f2ghi3bj#<}<#~%>% ",
|
||||
" ]88$_/}<#+fkllmi47_:<}<+!^8j ",
|
||||
" ^,);:<}<+;}7djkmh;!_/}<#~%>~ ",
|
||||
" no8$_/<<#_]#:}|fk18';#<}/+!^= ",
|
||||
" %^);:<}<:]]_]~_:}$p^!+/}<#~%=q ",
|
||||
" r%$_#<<#_-!!%''%]st,';:/}/+]$# ",
|
||||
" ;-;:<}<:;)!'^8,u&vwp&$+/}<#~~+ ",
|
||||
" ]']+/}<:;-~-*=xuxyzu^]+/}<:~]+ ",
|
||||
" ;>-~#<</__<-*,=-xvA=%~#<}/_!$+ ",
|
||||
" B^>]+<}<:}f'=*)<^s8-~#<}<:;%)C ",
|
||||
" !=*%~#<}/dD8=8+jEF2i9d}}/_$&u ",
|
||||
" ou>]+<}|kD,**#|1DlmG57<:;'x* ",
|
||||
" BH*%~#<7k<=*8&>%;+/gI7/+$^8+ ",
|
||||
" :xu>]+<}1-=*8&^%]_:a4|#;',x9 ",
|
||||
" (p*-~#/<~~_+_+#<fjIF/+$^8[ ",
|
||||
" f=p>]~+:/}fJJfJ1dk6}_;'== ",
|
||||
" +&=>-]_+#/<<<<<#:_;$)8&K ",
|
||||
" [&u*^-]~+#<</+_]-)8x&| ",
|
||||
" _*su8>%]~+:_;$)8oo=L ",
|
||||
" L*,Au*>-]]$)&oH,>2 ",
|
||||
" #*p,o=^)8,8p)f ",
|
||||
" D:]^=*>_#m ",
|
||||
" "};
|
||||
". c #444444",
|
||||
"X c #474747",
|
||||
"o c #666666",
|
||||
"O c #888888",
|
||||
"+ c None",
|
||||
"@ c #AAAAAA",
|
||||
"# c None",
|
||||
"$ c #CCCCCC",
|
||||
"% c #474747",
|
||||
"& c #EEEEEE",
|
||||
"* c #535353",
|
||||
"= c None",
|
||||
"- c #757575",
|
||||
"; c #979797",
|
||||
": c #B9B9B9",
|
||||
"> c #DBDBDB",
|
||||
", c #FDFDFD",
|
||||
"< c #626262",
|
||||
"1 c #848484",
|
||||
"2 c #A6A6A6",
|
||||
"3 c #C8C8C8",
|
||||
"4 c #EAEAEA",
|
||||
"5 c #686868",
|
||||
"6 c #737373",
|
||||
"7 c #717171",
|
||||
"8 c #939393",
|
||||
"9 c #B5B5B5",
|
||||
"0 c #D7D7D7",
|
||||
"q c #F9F9F9",
|
||||
"w c #3C3C3C",
|
||||
"e c #5E5E5E",
|
||||
"r c #808080",
|
||||
"t c #4E4E4E",
|
||||
"y c None",
|
||||
"u c #A2A2A2",
|
||||
"i c None",
|
||||
"p c #C4C4C4",
|
||||
"a c #E6E6E6",
|
||||
"s c #4B4B4B",
|
||||
"d c None",
|
||||
"f c None",
|
||||
"g c #6D6D6D",
|
||||
"h c #8F8F8F",
|
||||
"j c #B1B1B1",
|
||||
"k c #D3D3D3",
|
||||
"l c #F5F5F5",
|
||||
"z c None",
|
||||
"x c None",
|
||||
"c c #434343",
|
||||
"v c None",
|
||||
"b c #5A5A5A",
|
||||
"n c None",
|
||||
"m c #7C7C7C",
|
||||
"M c None",
|
||||
"N c #9E9E9E",
|
||||
"B c #C0C0C0",
|
||||
"V c None",
|
||||
"C c #E2E2E2",
|
||||
"Z c None",
|
||||
"A c #5C5C5C",
|
||||
"S c #474747",
|
||||
"D c None",
|
||||
"F c #696969",
|
||||
"G c #8B8B8B",
|
||||
"H c None",
|
||||
"J c #ADADAD",
|
||||
"K c #CFCFCF",
|
||||
"L c #4A4A4A",
|
||||
"P c #F1F1F1",
|
||||
"I c None",
|
||||
"U c #565656",
|
||||
"Y c #787878",
|
||||
"T c #9A9A9A",
|
||||
"R c #BCBCBC",
|
||||
"E c #3F3F3F",
|
||||
"W c #DEDEDE",
|
||||
"Q c #6F6F6F",
|
||||
"! c None",
|
||||
"~ c #434343",
|
||||
"^ c #656565",
|
||||
"/ c None",
|
||||
"( c #878787",
|
||||
") c #A9A9A9",
|
||||
"_ c #CBCBCB",
|
||||
"` c #EDEDED",
|
||||
"' c None",
|
||||
"] c #525252",
|
||||
"[ c None",
|
||||
"{ c None",
|
||||
"} c #747474",
|
||||
"| c #6B6B6B",
|
||||
" . c #969696",
|
||||
".. c #B8B8B8",
|
||||
"X. c None",
|
||||
"o. c #DADADA",
|
||||
"O. c #515151",
|
||||
"+. c None",
|
||||
"@. c #FCFCFC",
|
||||
"#. c None",
|
||||
"$. c #3F3F3F",
|
||||
"%. c #464646",
|
||||
"&. c #616161",
|
||||
"*. c #838383",
|
||||
"=. c #A5A5A5",
|
||||
"-. 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
|
After Width: | Height: | Size: 5.8 KiB |
612
share/pixmaps/bitcoin64.xpm
Normal 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 "
|
||||
};
|
||||
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 151 KiB After Width: | Height: | Size: 151 KiB |
37
share/qt/Info.plist
Normal 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>
|
||||
29
share/qt/clean_mac_info_plist.py
Normal 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"
|
||||
@@ -5,7 +5,7 @@ SetCompressor /SOLID lzma
|
||||
|
||||
# General Symbol Definitions
|
||||
!define REGKEY "SOFTWARE\$(^Name)"
|
||||
!define VERSION 1.0.0.4
|
||||
!define VERSION 1.1.0.0
|
||||
!define COMPANY "CasinoCoin project"
|
||||
!define URL http://www.casinocoin.org/
|
||||
|
||||
@@ -45,13 +45,13 @@ Var StartMenuGroup
|
||||
!insertmacro MUI_LANGUAGE English
|
||||
|
||||
# Installer attributes
|
||||
OutFile casinocoin-1.0.0.4-win32-setup.exe
|
||||
OutFile casinocoin-1.1.0.0-win32-setup.exe
|
||||
InstallDir $PROGRAMFILES\CasinoCoin
|
||||
CRCCheck on
|
||||
XPStyle on
|
||||
BrandingText " "
|
||||
ShowInstDetails show
|
||||
VIProductVersion 1.0.0.4
|
||||
VIProductVersion 1.1.0.0
|
||||
VIAddVersionKey ProductName CasinoCoin
|
||||
VIAddVersionKey ProductVersion "${VERSION}"
|
||||
VIAddVersionKey CompanyName "${COMPANY}"
|
||||
@@ -67,7 +67,7 @@ Section -Main SEC0000
|
||||
SetOutPath $INSTDIR
|
||||
SetOverwrite on
|
||||
File ../release/casinocoin-qt.exe
|
||||
File /oname=license.txt ../COPYING
|
||||
File /oname=COPYING.txt ../COPYING
|
||||
File /oname=readme.txt ../doc/README_windows.txt
|
||||
SetOutPath $INSTDIR\daemon
|
||||
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)" NoRepair 1
|
||||
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\shell\open\command" "" '"$INSTDIR\casinocoin-qt.exe" "$$1"'
|
||||
WriteRegStr HKCR "casinocoin\shell\open\command" "" '"$INSTDIR\casinocoin-qt.exe" "%1"'
|
||||
SectionEnd
|
||||
|
||||
# Macro for selecting uninstaller sections
|
||||
@@ -120,7 +120,7 @@ done${UNSECTION_ID}:
|
||||
# Uninstaller sections
|
||||
Section /o -un.Main UNSEC0000
|
||||
Delete /REBOOTOK $INSTDIR\casinocoin-qt.exe
|
||||
Delete /REBOOTOK $INSTDIR\license.txt
|
||||
Delete /REBOOTOK $INSTDIR\COPYING.txt
|
||||
Delete /REBOOTOK $INSTDIR\readme.txt
|
||||
RMDir /r /REBOOTOK $INSTDIR\daemon
|
||||
RMDir /r /REBOOTOK $INSTDIR\src
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include "addrman.h"
|
||||
#include "hash.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -410,7 +411,7 @@ CAddress CAddrMan::Select_(int nUnkBias)
|
||||
fChanceFactor *= 1.2;
|
||||
}
|
||||
} else {
|
||||
// use an new node
|
||||
// use a new node
|
||||
double fChanceFactor = 1.0;
|
||||
while(1)
|
||||
{
|
||||
|
||||
@@ -117,7 +117,7 @@ public:
|
||||
// * Bucket selection is based on cryptographic hashing, using a randomly-generated 256-bit key, which should not
|
||||
// be observable by adversaries.
|
||||
// * 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
|
||||
#define ADDRMAN_TRIED_BUCKET_COUNT 64
|
||||
@@ -174,13 +174,13 @@ private:
|
||||
// last used nId
|
||||
int nIdCount;
|
||||
|
||||
// table with information about all nId's
|
||||
// table with information about all nIds
|
||||
std::map<int, CAddrInfo> mapInfo;
|
||||
|
||||
// find an nId based on its network address
|
||||
std::map<CNetAddr, int> mapAddr;
|
||||
|
||||
// randomly-ordered vector of all nId's
|
||||
// randomly-ordered vector of all nIds
|
||||
std::vector<int> vRandom;
|
||||
|
||||
// number of "tried" entries
|
||||
@@ -253,8 +253,8 @@ public:
|
||||
// * nNew
|
||||
// * nTried
|
||||
// * number of "new" buckets
|
||||
// * all nNew addrinfo's in vvNew
|
||||
// * all nTried addrinfo's in vvTried
|
||||
// * all nNew addrinfos in vvNew
|
||||
// * all nTried addrinfos in vvTried
|
||||
// * for each bucket:
|
||||
// * number of elements
|
||||
// * for each element: index
|
||||
|
||||
258
src/alert.cpp
Normal 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
@@ -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
|
||||
185
src/allocators.h
@@ -1,7 +1,5 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// 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
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_ALLOCATORS_H
|
||||
@@ -9,6 +7,9 @@
|
||||
|
||||
#include <string.h>
|
||||
#include <string>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
#include <map>
|
||||
#include <openssl/crypto.h> // for OPENSSL_cleanse()
|
||||
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32_WINNT
|
||||
@@ -24,23 +25,169 @@
|
||||
// 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
|
||||
// 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
|
||||
#include <sys/mman.h>
|
||||
#include <limits.h>
|
||||
/* This comes from limits.h if it's not defined there set a sane default */
|
||||
#ifndef PAGESIZE
|
||||
#include <unistd.h>
|
||||
#define PAGESIZE sysconf(_SC_PAGESIZE)
|
||||
#include <limits.h> // for PAGESIZE
|
||||
#include <unistd.h> // for sysconf
|
||||
#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))))
|
||||
#define munlock(a,b) \
|
||||
munlock(((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.
|
||||
*
|
||||
* Memory locks do not stack, that is, pages which have been locked several times by calls to mlock()
|
||||
* 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
|
||||
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
|
||||
@@ -71,7 +218,7 @@ struct secure_allocator : public std::allocator<T>
|
||||
T *p;
|
||||
p = std::allocator<T>::allocate(n, hint);
|
||||
if (p != NULL)
|
||||
mlock(p, sizeof(T) * n);
|
||||
LockedPageManager::instance.LockRange(p, sizeof(T) * n);
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -79,8 +226,8 @@ struct secure_allocator : public std::allocator<T>
|
||||
{
|
||||
if (p != NULL)
|
||||
{
|
||||
memset(p, 0, sizeof(T) * n);
|
||||
munlock(p, sizeof(T) * n);
|
||||
OPENSSL_cleanse(p, sizeof(T) * n);
|
||||
LockedPageManager::instance.UnlockRange(p, sizeof(T) * 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)
|
||||
{
|
||||
if (p != NULL)
|
||||
memset(p, 0, sizeof(T) * n);
|
||||
OPENSSL_cleanse(p, sizeof(T) * n);
|
||||
std::allocator<T>::deallocate(p, n);
|
||||
}
|
||||
};
|
||||
|
||||
42
src/base58.h
@@ -1,7 +1,5 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// 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
|
||||
// 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.
|
||||
// - 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.
|
||||
// - 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
|
||||
#define BITCOIN_BASE58_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "bignum.h"
|
||||
#include "key.h"
|
||||
#include "script.h"
|
||||
#include "allocators.h"
|
||||
|
||||
static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
||||
|
||||
@@ -180,7 +180,8 @@ protected:
|
||||
unsigned char nVersion;
|
||||
|
||||
// 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()
|
||||
{
|
||||
@@ -188,13 +189,6 @@ protected:
|
||||
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)
|
||||
{
|
||||
nVersion = nVersionIn;
|
||||
@@ -223,7 +217,7 @@ public:
|
||||
vchData.resize(vchTemp.size() - 1);
|
||||
if (!vchData.empty())
|
||||
memcpy(&vchData[0], &vchTemp[1], vchData.size());
|
||||
memset(&vchTemp[0], 0, vchTemp.size());
|
||||
OPENSSL_cleanse(&vchTemp[0], vchData.size());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -410,21 +404,19 @@ public:
|
||||
PRIVKEY_ADDRESS_TEST = CBitcoinAddress::PUBKEY_ADDRESS_TEST + 128,
|
||||
};
|
||||
|
||||
void SetSecret(const CSecret& vchSecret, bool fCompressed)
|
||||
void SetKey(const CKey& vchSecret)
|
||||
{
|
||||
assert(vchSecret.size() == 32);
|
||||
SetData(fTestNet ? PRIVKEY_ADDRESS_TEST : PRIVKEY_ADDRESS, &vchSecret[0], vchSecret.size());
|
||||
if (fCompressed)
|
||||
assert(vchSecret.IsValid());
|
||||
SetData(fTestNet ? PRIVKEY_ADDRESS_TEST : PRIVKEY_ADDRESS, vchSecret.begin(), vchSecret.size());
|
||||
if (vchSecret.IsCompressed())
|
||||
vchData.push_back(1);
|
||||
}
|
||||
|
||||
CSecret GetSecret(bool &fCompressedOut)
|
||||
CKey GetKey()
|
||||
{
|
||||
CSecret vchSecret;
|
||||
vchSecret.resize(32);
|
||||
memcpy(&vchSecret[0], &vchData[0], 32);
|
||||
fCompressedOut = vchData.size() == 33;
|
||||
return vchSecret;
|
||||
CKey ret;
|
||||
ret.Set(&vchData[0], &vchData[32], vchData.size() > 32 && vchData[32] == 1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool IsValid() const
|
||||
@@ -455,9 +447,9 @@ public:
|
||||
return SetString(strSecret.c_str());
|
||||
}
|
||||
|
||||
CBitcoinSecret(const CSecret& vchSecret, bool fCompressed)
|
||||
CBitcoinSecret(const CKey& vchSecret)
|
||||
{
|
||||
SetSecret(vchSecret, fCompressed);
|
||||
SetKey(vchSecret);
|
||||
}
|
||||
|
||||
CBitcoinSecret()
|
||||
@@ -465,4 +457,4 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif // BITCOIN_BASE58_H
|
||||
|
||||
80
src/bignum.h
@@ -1,7 +1,5 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// 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
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_BIGNUM_H
|
||||
@@ -133,7 +131,9 @@ public:
|
||||
|
||||
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;
|
||||
fNegative = true;
|
||||
@@ -222,7 +222,7 @@ public:
|
||||
BN_mpi2bn(pch, p - pch, this);
|
||||
}
|
||||
|
||||
uint256 getuint256()
|
||||
uint256 getuint256() const
|
||||
{
|
||||
unsigned int nSize = BN_bn2mpi(this, NULL);
|
||||
if (nSize < 4)
|
||||
@@ -264,28 +264,68 @@ public:
|
||||
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)
|
||||
{
|
||||
unsigned int nSize = nCompact >> 24;
|
||||
std::vector<unsigned char> vch(4 + nSize);
|
||||
vch[3] = nSize;
|
||||
if (nSize >= 1) vch[4] = (nCompact >> 16) & 0xff;
|
||||
if (nSize >= 2) vch[5] = (nCompact >> 8) & 0xff;
|
||||
if (nSize >= 3) vch[6] = (nCompact >> 0) & 0xff;
|
||||
BN_mpi2bn(&vch[0], vch.size(), this);
|
||||
bool fNegative =(nCompact & 0x00800000) != 0;
|
||||
unsigned int nWord = nCompact & 0x007fffff;
|
||||
if (nSize <= 3)
|
||||
{
|
||||
nWord >>= 8*(3-nSize);
|
||||
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;
|
||||
}
|
||||
|
||||
unsigned int GetCompact() const
|
||||
{
|
||||
unsigned int nSize = BN_bn2mpi(this, NULL);
|
||||
std::vector<unsigned char> vch(nSize);
|
||||
nSize -= 4;
|
||||
BN_bn2mpi(this, &vch[0]);
|
||||
unsigned int nCompact = nSize << 24;
|
||||
if (nSize >= 1) nCompact |= (vch[4] << 16);
|
||||
if (nSize >= 2) nCompact |= (vch[5] << 8);
|
||||
if (nSize >= 3) nCompact |= (vch[6] << 0);
|
||||
unsigned int nSize = BN_num_bytes(this);
|
||||
unsigned int nCompact = 0;
|
||||
if (nSize <= 3)
|
||||
nCompact = BN_get_word(this) << 8*(3-nSize);
|
||||
else
|
||||
{
|
||||
CBigNum bn;
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -307,7 +347,7 @@ public:
|
||||
psz++;
|
||||
|
||||
// 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;
|
||||
while (isxdigit(*psz))
|
||||
{
|
||||
@@ -418,7 +458,7 @@ public:
|
||||
CBigNum& operator>>=(unsigned int shift)
|
||||
{
|
||||
// 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;
|
||||
a <<= shift;
|
||||
if (BN_cmp(&a, this) > 0)
|
||||
|
||||
2674
src/bitcoinrpc.cpp
144
src/bitcoinrpc.h
@@ -1,7 +1,5 @@
|
||||
// Copyright (c) 2010 Satoshi Nakamoto
|
||||
// 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
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
@@ -12,13 +10,66 @@
|
||||
#include <list>
|
||||
#include <map>
|
||||
|
||||
class CBlockIndex;
|
||||
class CReserveKey;
|
||||
|
||||
#include "json/json_spirit_reader_template.h"
|
||||
#include "json/json_spirit_writer_template.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);
|
||||
|
||||
void ThreadRPCServer(void* parg);
|
||||
void StartRPCThreads();
|
||||
void StopRPCThreads();
|
||||
int CommandLineRPC(int argc, char *argv[]);
|
||||
|
||||
/** 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));
|
||||
*/
|
||||
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.
|
||||
Use like: RPCTypeCheck(object, boost::assign::map_list_of("name", str_type)("value", int_type));
|
||||
*/
|
||||
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);
|
||||
|
||||
@@ -46,6 +97,8 @@ public:
|
||||
std::string name;
|
||||
rpcfn_type actor;
|
||||
bool okSafeMode;
|
||||
bool threadSafe;
|
||||
bool reqWallet;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -72,4 +125,85 @@ public:
|
||||
|
||||
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
|
||||
|
||||