No description
Find a file
2019-12-15 09:14:56 +02:00
bitcoin nit 2019-11-25 00:23:26 +02:00
robin_hood Switched to using robin_hood::unordered_flat_map 2019-12-05 13:02:43 +02:00
rocksdb Nit in rocksdb headers 2019-11-28 18:35:34 +02:00
staticlibs Compile fixups for linux; rebuilt rocksdb for linux with USE_RTTI 2019-12-12 01:28:27 +02:00
test Got Win64 working with librocksdb.a. Yippeee. 2019-11-28 17:18:43 +02:00
.gitignore Initial revision. Just laying out a skeleton to build on. 2019-04-23 02:33:16 +03:00
AbstractConnection.cpp Made app only start listening for client connections after initial sync 2019-11-27 14:07:09 +02:00
AbstractConnection.h wip 2019-11-30 12:29:32 +02:00
App.cpp Got scripthash_unspent working .. but block synch is painfully slow 2019-12-13 00:14:09 +02:00
App.h Added --datadir (-D) command-line option 2019-11-28 23:58:24 +02:00
BitcoinD.cpp wip 2019-11-30 12:29:32 +02:00
BitcoinD.h tweaks 2019-11-30 23:33:30 +02:00
BlockProc.cpp Nits .. renamed a few data members to be clearer and added comments 2019-12-12 13:15:45 +02:00
BlockProc.h Nits .. renamed a few data members to be clearer and added comments 2019-12-12 13:15:45 +02:00
BlockProcTypes.h initial data structures and hooks in addBlock for undo (reorg rewind) 2019-12-14 00:47:11 +02:00
BTC.cpp Refactored out the stuff we don't use in BTC.h and BTC.cpp to a separate file 2019-12-14 22:00:04 +02:00
BTC.h Refactored out the stuff we don't use in BTC.h and BTC.cpp to a separate file 2019-12-14 22:00:04 +02:00
BTC_unused.cpp Refactored out the stuff we don't use in BTC.h and BTC.cpp to a separate file 2019-12-14 22:00:04 +02:00
BTC_unused.h Refactored out the stuff we don't use in BTC.h and BTC.cpp to a separate file 2019-12-14 22:00:04 +02:00
Common.cpp More nits and cleanup. 2019-11-12 11:29:45 +02:00
Common.h wip 2019-12-04 16:54:40 +02:00
Controller.cpp initial data structures and hooks in addBlock for undo (reorg rewind) 2019-12-14 00:47:11 +02:00
Controller.h Fix: Connection lost/reconnect detection logic in Controller.cpp 2019-12-13 18:54:30 +02:00
Fulcrum.pro building nit: use -fomit-frame-pointer for release builds 2019-12-14 22:36:48 +02:00
Logger.cpp Added process function to controller, and hooks for bitcoind when ready 2019-11-18 08:29:33 +02:00
Logger.h Added process function to controller, and hooks for bitcoind when ready 2019-11-18 08:29:33 +02:00
LRUCache.h Some tweaks for correctness and memory consumption + lru cache perf 2019-12-08 17:21:39 +02:00
main.cpp removed testign 2019-04-25 21:20:45 +03:00
Mgr.cpp Nits: Runtime check that classes deriving from QObjectMixin are ok. 2019-11-17 10:59:50 +02:00
Mgr.h massive refactorings 2019-12-04 20:02:14 +02:00
Mixins.cpp Scripthash history fix. Oops! 2019-12-12 12:15:06 +02:00
Mixins.h Finally got scripthash_unspent working with ok performance! 2019-12-13 02:45:45 +02:00
Options.cpp some nits 2019-11-17 11:10:41 +02:00
Options.h Added --datadir (-D) command-line option 2019-11-28 23:58:24 +02:00
README.md Nits to README.md 2019-05-01 19:50:56 +03:00
RecordFile.cpp Refactorings and nits in RecordFile.cpp code 2019-12-11 16:35:22 +02:00
RecordFile.h Refactorings and nits in RecordFile.cpp code 2019-12-11 16:35:22 +02:00
register_MetaTypes.cpp Refactored out the stuff we don't use in BTC.h and BTC.cpp to a separate file 2019-12-14 22:00:04 +02:00
resources.qrc Got rid of more ShuffleUp stuff, added CLI args 2019-11-07 23:55:13 +02:00
RPC.cpp nit 2019-12-01 02:50:00 +02:00
RPC.h Performance optimization: Pre-create some static QStrings we use often 2019-11-26 10:05:00 +02:00
Servers.cpp Made app only start listening for client connections after initial sync 2019-11-27 14:07:09 +02:00
Servers.h Added more stats 2019-11-17 12:38:36 +02:00
SrvMgr.cpp Made app only start listening for client connections after initial sync 2019-11-27 14:07:09 +02:00
SrvMgr.h Got rid of SrvMgr newServers signal for now 2019-11-18 00:49:32 +02:00
Storage.cpp Moved a lock up to top in addBlock 2019-12-15 09:14:56 +02:00
Storage.h initial data structures and hooks in addBlock for undo (reorg rewind) 2019-12-14 00:47:11 +02:00
TXO.h Added UndoInfo Serialize/Deserialize and test 2019-12-14 11:42:26 +02:00
TXO_Compact.h its kinda broken.. WIP 2019-12-12 20:38:56 +02:00
Util.cpp storage wip 2019-11-29 14:42:17 +02:00
Util.h Added saving of undo data to db 2019-12-15 09:08:31 +02:00

Shuffle Up Server

Author: Calin Culianu (<calin.culianu __ at __ gmail . com>)

A fast shuffling server for use with Electron Cash's future "shuffle up" feature (which we haven't properly figured out a name for as yet), written in C++.

Highlights and design goals:

  • Speed: Server is 100% modern C++ code using multi-threaded programming techniques.
  • Flexibility: We want to be able to modify the shuffling logic and add levels of trustlessness as we develop advanced shuffling techniques involving potentially hundreds of inputs. As such, the server's core kernel which handles communication should be decoupled from the other parts that higher level shuffle logic. (So far, so good.)

Requirements

  • Qt Core & Qt Networking libraries 5.11 or above (I use 5.12.3 myself).
  • A modern C++17 compiler. Clang is recommended but G++ also works.
  • No other external dependencies. All crypto functions use code imported from Bitcoin-ABC (such as secp256k1, etc).

How To Compile

It's recommended you use Qt Creator.

  1. Get the latest version of Qt for your platform.
  2. Point the Qt Creator IDE at the ShuffleUpServer.pro file.
  3. Hit Build. It should "just work".

Platform Notes

Big Endian Architectures

The code is more or less configured to assume a "little endian" architecture by default (which is what all Intel x86/x86_64 are). If you're on a big endian machine, on Linux it should just auto-detect that fact. However, on other OS's such as BSD, if you're on a big endian machine, you may need to uncomment this line from the .pro file:

# DEFINES += WORDS_BIGENDIAN

Windows

I couldn't easily get MSVC versions before 2019 to actually accept legal C++17. As such, if you're using Qt Creator on Windows -- it's recommended you select MinGW and/or G++ as the compiler (which comes with the Qt distribution for Windows).

Linux

If you have clang on your system, configure the project to use it as the compiler preferentially over G++. G++ works too, but clang is preferred because reasons.

MacOS

Everything should just work (I use MacOS as my dev machine, so that's why).


F.A.Q.


Q: This thing isn't finished yet!

A: Yes, I know It's still a work in progress.


Q: Why Qt? This isn't a GUI app!

A: Yes, I know. However, Qt is a very decent, cross-platform and fast application framework. You can use its "Core" library for console apps, servers, etc. It has great network support and other basic things a programmer needs to get stuff done.



Donations

Sure! Send BCH here:

bitcoincash:qphax4s4n9h60jxj2fkrjs35w2tvgd4wzvf52cgtzc

bitcoincash:qphax4s4n9h60jxj2fkrjs35w2tvgd4wzvf52cgtzc