Mental Illness Coin Wallet. Small performance-focused centralized block-chain-like cryptocurrency system
Go to file
2024-11-13 22:10:13 +01:00
.idea init 2024-11-13 22:10:13 +01:00
cmd init 2024-11-13 22:10:13 +01:00
common init 2024-11-13 22:10:13 +01:00
server init 2024-11-13 22:10:13 +01:00
util init 2024-11-13 22:10:13 +01:00
Dockerfile init 2024-11-13 22:10:13 +01:00
go.mod init 2024-11-13 22:10:13 +01:00
go.sum init 2024-11-13 22:10:13 +01:00
LICENSE.txt init 2024-11-13 22:10:13 +01:00
README.md init 2024-11-13 22:10:13 +01:00

MICW v1

Warning

In early stage development

This version of MICW (Mental Illness Coin Wallet) is rather small centralized block-chain-like cryptocurrency system. It's performance focused because we have shitty hardware on our server.

Server

Configuring

addr: "0.0.0.0"
tls:
  enable: true
  cert: ""
  key: ""
http_port: 8000
grpc_port: -1 # -1 to disable
https_port: 443

db:
  host: "postgres"
  port: 5432
  user: "micw"
  name: "micw"
  password_file: "/run/secrets/db_password"

rewarders_public_keys:
    - "<trusted_pk>"

Running

# Edit config
nvim server/config.yml
# Put DB passowrd here
nvim .secrets/db_password.txt
# Build
docker compose build
# Run
docker compose up

Main terminology and ideas

This wallet has two main entities that are stored inside a database block and transaction. Blocks are just groups of transactions made in optimization purposes, kinda like buffering

Blocks are created, updated and uploaded into the DB by server/core/BlocksPipeline

Client

util is kinda a POC client for our wallet, with which you can generate and manage wallets, make transactions, etc, from your command line

Here are some useful commands u may need

# Write the keys (will ask u for password)
./util key gen ./keys 
# Get public key
./util key pub ./keys 
# Get whole key (password required if was set)
./util key get ./keys 

# create a new transaction with sending 1.0MIC to a receiver pk 
./util api send -a <proto://w.mic.pp.ua:443> -k <your_keys_file_path> -m <"message"> <receiver_public_key> 1.0
# checks transaction status
./util api get-tx -a <proto://w.mic.pp.ua:443> <tx_hash>
# Returns your current 
./util api balance -a <proto://w.mic.pp.ua:443> <public_key>
# Saves incoming transactions table
./utils api incoming -a <proto://w.mic.pp.ua:443> -o ./incoming_trx_out.csv <public_key>
# Saves outcoming transactions table
./utils api outcoming -a <proto://w.mic.pp.ua:443> -o ./outcoming_txs_out.csv <public_key> 

Getting started: generating keys

You are proving that u can commit a transaction by providing signatures with a transactions. And to make a signature -- u need a private key. Everybody can check your signature with your public key though, so your public key is basically your wallet address. We may make aliases later, but still it would be way more secure to use key as an address. As algorithms for signatures we are using ed25519.

Plans

  • Mobile app
  • MIC Bot integration