Code Monkey home page Code Monkey logo

coincoin's Introduction

coincoin

Build Status

coincoin is a cryptocurrency proof-of-concept implemented in Elixir. It's an umbrella project that focuses on the 2 main components of (most of) the existing cryptocurrencies: the blockchain and digital transactions.

It's goal is to be as simple as possible but complete enough to technically understand what's going on behind Bitcoin or Ethereum for example. It's also a way do dive more into Elixir and OTP.

Setup

Blockchains are P2P softwares. To start using coincoin, we need to setup multiple nodes and connect them together.

You need Elixir installed. Clone this repository and go to the root of the project.

Then pull the dependencies using mix deps.get

To setup a 3 nodes blockchain, spawn 3 tabs in your terminal (node1, node2 and node3) and run:

  • node1: iex -S mix phx.server (defaults: PORT=4000 P2P_PORT=5000)
  • node2: PORT=4001 P2P_PORT=5001 iex -S mix phx.server
  • node3: PORT=4002 P2P_PORT=5002 iex -S mix phx.server

Then connect the nodes to create a P2P network:

$node2> Blockchain.connect("localhost:5000") # connect node2 to node1

$node3> Blockchain.connect("localhost:5001") # connect node3 to node2

This will setup a simple network:

node1 <--> node2 <--> node3

You can also use the robinmonjo/coincoin docker image available on the docker hub:

docker run -it robinmonjo/coincoin

If you use Docker, in the Blockchain.connect/1 call make sure to pass your container IP address and that this address is reachable.

Notes:

  • if you don't want to interact with the REST API, you can skip the PORT env var and use iex -S mix instead of iex -S mix phx.server
  • Blockchain.connect(5000) is equivalent to Blockchain.connect("localhost:5000")
  • for releases use make release

Usage

When started, coincoin will start 3 apps:

  • blockchain: a minimal blockchain
  • token: a minimal cryptocurrency implemented on top of the blockchain
  • blockchain_web: a web interface to manage nodes of the blockchain

To manipulate the blockchain and store random data in it using the iex console checkout the blockchain app. To do the same using a REST API, checkout the blockchain_web app. And finally to play with a cryptocurrency and use the blockchain as a distributed ledger, checkout the token app.

Why coincoin ?

Lately I heard a lot about:

  1. how Elixir is awesome and is the future of complex system / web development
  2. how blockchain technology will be the next big thing

So what about building a cryptocurrency proof-of-concept in Elixir ?

As I'm sure about 1, I still have some doubts about 2 eventough technologies behind cryptocurrencies are exciting.

Also "coin-coin" in french is the noise of a duck (hence Scrooge McDuck)

Final words

Issues, suggestions and pull requests are very welcome ๐Ÿ˜Š

coincoin's People

Contributors

robinmonjo avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.