Giter Club home page Giter Club logo

collab-backend-1's Introduction

A Bitcoin shared wallet app, designed to rapidly agree and execute group expenses through unanimous voting.

The idea

Screenshots

Getting started

Previous installation of redis, mysql and rabbitmq is required. Install them with brew and run them one by one with command 'brew services start ______'

  1. Clone the repo
$ git clone https://github.com/rogerknl/collab-backend.git
$ cd collab-backend
  1. Install dependencies
$ npm install
  1. Set all environment variables in .env ( look .env.example )
  2. Set all parameters of db in /config/config.json
  3. Generate all content of the DB
$ npm run migrate
  1. Start backend development server
$ npm run dev
  1. Start queue consumer's process
$ cd queue
$ node index.js
*** This app requires its frontEnd you can find it here ***

FAQ

How do I start?

First, you’ll need to create a new account providing username, password and the Bitcoin public key of your wallet. Once you’ve validated your email address and logged in you’ll be able to: a) create new shared wallets and add other users to join it, and b) get invited to previously existing wallets.

How do I open a new wallet?

Pick a name describing the purpose of it, and Collab will create a new Bitcoin wallet with an exclusive public key. Now you’ll be able to invite other users to be part of your Collab wallet.

How do create a new operation?

You make a proposal (i.e. spend 0.05 Bitcoins on renting a terrace for Richard’s birthday party) and an e-mail will be sent to all participants of your wallet. When all of them have voted, if the decision is unanimously positive, the action gets executed and the money gets wired to the beneficiary’s account.

What happens if someone doesn’t agree on proceeding with the action?

If a single user of the wallet votes NO to a particular proposal, the operation won’t proceed and it will get discarded. Everyone involved will receive an e-mail notifying them that the operation has been canceled. Also, a log will be created for consultation purposes.

Does the transaction destinatary need to be a wallet member?

Not necessarily, you can transfer the money directly to another third party by introducing its wallet public key.

Who else is in my wallet?

Once inside a wallet of yours, a list with the current members will be displayed.

What rights do I have as a wallet user?

All the members of a particular wallet have equal voting rights. No one will be able to execute an action, withdraw funds or add another user without the consent of the rest.

Can I add other users to an existing wallet?

Any member of a particular wallet can invite another user to join in, but it needs approval of the rest of the existing members. The process will be the same as with the vote on a new transaction: a new email notification asking if you want that new user added, and, should everyone agree, that user will now be a full member of the wallet with the same privileges as the rest.

How does money gets transfered into every wallet?

With the public key anyone is able to make inbound transactions to any wallet.

Can I be part of multiple wallets at once?

Yes, you could have a myriad of different wallets depending on the purpose (putting together a specific event happening a set date -a neighbourhood BBQ- or a continuous collaboration -a rehearsal space with a few other musicians-) or the people involved (friends, colleagues, family).

Can I see how much money I have in every wallet I’m in?

You’ll be able to consult in real time the current balance of every wallet, along with its history through time.

Can I check if there’s any pending operation waiting for me to vote on?

Besides an email notification asking you to vote on everytime a new operation gets proposed, you be able to check your pending ones for every wallet inside the app.

Built with

  • KOA - Framework for node js
  • Redis - ElasticCache
  • MySQL - DataBase
  • RabbitMQ - Open Source Message Broker
  • Bitcore - Api for manage bitcoins
  • Nodemailer - Module for nodejs to allow easy as cake email sending
  • Bcrypt - Library to help you hash passwords

Contributing

Any contribution is welcome, just fork the repository and do your thing. Then submit a pull request pointing to this repo.

Authors

License

This project is licensed under the MIT License.

collab-backend-1's People

Contributors

rogerknl avatar xaviguasch avatar jportella93 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.