No description
Find a file
2021-06-07 00:18:45 -07:00
include removed var 2021-06-06 16:54:49 -07:00
third_party added drogon 2021-04-02 01:28:19 -07:00
.gitignore 🐛 further bug fixes 2021-06-03 01:54:58 -07:00
.gitmodules added drogon 2021-04-02 01:28:19 -07:00
CMakeLists.txt 🐛 xxhash added 2021-04-12 20:12:23 -07:00
config.json the infinitely accidentately commited 2021-06-06 16:57:28 -07:00
help.html Docs HTML 2021-06-06 17:02:04 -07:00
LICENSE Create LICENSE 2021-04-27 22:53:00 -07:00
main.cpp 🐛 when pre_log_size == 0, illegal instruction would be generated 2021-06-06 17:30:45 -07:00
README.md Update README.md 2021-06-07 00:18:45 -07:00
users.json accidental commit 2021-06-03 12:40:32 -07:00

CCash

A webserver hosting a bank system for Minecraft, able to be used from web browser or from CC/OC if you're playing modded.

the currency model most Minecraft Servers adopt if any, is resource based, usually diamonds, this model is fraught with issues however:

  • the primary issue is minecraft worlds are infinite leading to hyper inflation as everyone accrues more diamonds
  • there is no central authority minting the currency, any consumer can introduce more diamonds to the system
  • some resources are passively reapable, making the generation of currency a larger focus then of products
  • locality is required for transaction
  • theft is possible, ownership is possession based

CCash solves these issues and adds a level of abstraction, the main philosophy of CCash is to have fast core operations that other services build on

Build

drogon depedencies

sudo apt install libjsoncpp-dev
sudo apt install uuid-dev
sudo apt install openssl
sudo apt install libssl-dev
sudo apt install zlib1g-dev

building the project

git clone --recurse-submodule https://github.com/EntireTwix/CCash/
mkdir build
cd build
cmake ..
make -j<threads>

then edit config.json to include the paths to your certs for HTTPS (I use certbot), or just remove the listener for port 443.

vim ../config.json

finally, run the program

sudo ./bank <admin password> <saving frequency in minutes> <threads>

Connected Services

Go to {ip}/BankF/help to see the bank's methods (also found in releases as help.html). Using the Bank's API allows (you/others) to (make/use) connected services that utilize the bank, a couple ideas are

Implemented:

In-Dev:

Ideas:

  • Gambling
  • Shipping
  • High-level bank operations such as loans
  • Some trust based system for transactions similiar to Paypal

**WARNING** : abruptly killing the program will result in data loss, use Close() method to close safely

FAQ

Q: how is money initially injected into the economy

A: you can take any approach you want, one that I recommend is using a one way exchange via the CC ATM above to have players mine the initial currency, this rewards early adopters and has a sunk cost effect in that the resource is promptly burned

Contributions

Thank you to the contributors

Name Work
Expand Frontend
React CC {API, Shops, and ATM}
Doggo Logs loading/adding Optimized

Features

Performance

  • In memory database instead of on disk
  • NOT written in Lua, like a OC/CC implementation
  • written in C++, arguably the fastest language
  • multi-threaded
  • parallel hashmaps a far superior HashMap implementation to the STD, that also benefits from multi-threaded
  • Drogon is a very fast web framework
  • Lightweight, anecodotally I experienced 0.0% idle, <1% CPU usage on average, 7% at peak, 1000 requests in 0.85s

Safety

  • Tamper Proof relative to an in-game implementation
  • Auto-Saving and Saves on close
  • HTTPS (OpenSSL)

Accessibility

  • RESTful API for connected services like a market, gambling, or anything else you can think of
  • able to be used millions of blocks away, across dimensions, servers, vanilla or modded. In contrast to an in-game modded implementation that would be range limited.
  • Logging of all transactions, configurable in log_consts.hpp

Dependencies