Barebones bitcoin-like protocol implemented in Python 3.6
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
misocoin
.gitignore rpc Dec 3, 2017
LICENSE Initial commit Dec 2, 2017
README.md update taco pic Dec 6, 2017
misocoin-cli.py basic communication Dec 5, 2017
misocoind.py Added a check in send_misocoin to validate to_address is a valid Dec 6, 2017
requirements.txt

README.md

Misocoin

misocoin logo

Misocoin is a barebones bitcoin-like protocol implemented in Python 3.x. It was written as a challenge for myself to see if I could implement a bitcoin clone from scratch.

This project doesn't follow the full bitcoin-protocol, but rather implements a barebones version that (with enough nodes) can still act as a trust-less third party for storing and ensuring the integrity of arbitrary data.

WARNING: Misocoin is not production ready and should only be used as an educational tool.

Quick start

  1. Make sure you're in a Python 3.x environment. I recommend using miniconda
  2. git clone git@github.com:kendricktan/misocoin.git
  3. cd misocoin && pip install -r requirements.txt
  4. To start the misocoin daemon, run
# To start it on localhost:4000 with a random private key
./misocoind.py

** [Welcome] Your misocoin address is 610d2657b8c4df8da493bbe0671e7406d2bee7a6
 * Running on http://localhost:4000/ (Press CTRL+C to quit)

# To start it on localhost:4001 with a specific private key
# ./misocoind.py -host=localhost -port=4001 -priv_key=60c8cb60c21143fffdd682f399ef3baa4b67c56a1f83a274284cfe7c57e007ed
  1. Once you have the daemon running, you can interact with the daemon it via the API
./misocoin-cli.py get_info
./misocoin-cli.py get_block <block_number>
./misocoin-cli.py get_balance
./misocoin-cli.py send_misocoin <to_address> <amount>

# To specify which host and port the daemon is located at
# ./misocoin-cli.py -host=<localhost> -port=<4000> [methods [args..]]
  1. To connect misocoin with other nodes, try running ./misocoind.py -nodes=host1:port1,host2:port2. E.g:
  • Terminal 1:
./misocoind.py -port=4001
  • Terminal 2:
./misocoind.py -port=4002 -nodes=localhost:4001

What's in misocoin

  • EDCSA
  • Dynamic difficulty (based on network hashing power)
  • Proof-of-Work
  • Consensus

Todo?

  • Automatically prunes chain in favor of a longer chain
  • Persistent storage for blockchain (currently all in memory)
  • Separate out tx and block logic to fit in a set amount of txs in a block
  • Nicer exception handling
  • Enforce functional paradigm

FAQ

  • Who's miso?

Miso is my cat. You can find out about him more on his instagram page.

  • Why did you make this?

I made it to understand more about bitcoin. Jks. I made it for Miso's birthday (15 December). I love my cat.

  • Can I have a picture of your cat in a taco outfit?

Sure

misocoin logo