Skip to content

Cryptocurrency wallet for trading for Bitcoin, Bitcoin cash, Ethereum, ERC20, Ripple

License

Notifications You must be signed in to change notification settings

hiromaily/go-crypto-wallet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-crypto-wallet

Go Report Card codebeat badge GitHub release MIT License

Wallet functionalities to create raw transaction, to sing on unsigned transaction, to send signed transaction for BTC, BCH, ETH, XRP and so on.

What kind of coin can be used?

  • Bitcoin
  • Bitcoin Cash
  • Ethereum
  • ERC-20 Token
  • Ripple

Current development

  • This project is under refactoring
  • Bitcoin Core version 22.0 is released. Signet environment is ongoing.

Expected use cases

1.Deposit functionality

  • Pubkey addresses are given to our users first.
  • Users would want to deposit coins on our system.
  • After users sent coins to their given addresses, these all amount of coins are sent to our safe addresses managed offline by cold wallet

2.Payment functionality

  • Users would want to withdraw their coins to specific addresses.
  • Transaction is created and sent after payment is requested by users.

3.Transfer functionality

  • Internal use. Each accounts can transfer coins among internal accounts.

Wallet Type

This is explained for BTC/BCH for now.
There are mainly 3 wallets separately and these wallets are expected to be installed in each different devices.

1.Watch only wallet

  • Only this wallet run online to access to BTC/BCH Nodes.
  • Only pubkey address is stored. Private key is NOT stored for security reason. That's why this is called watch only wallet.
  • Major functionalities are
    • creating unsigned transaction
    • sending signed transaction
    • monitoring transaction status.

2.Keygen wallet as cold wallet

  • Key management functionalities for accounts.
  • This wallet is expected to work offline.
  • Major functionalities are
    • generating seed for accounts
    • generating keys based on HD Wallet
    • generating multisig addressed according to account setting
    • exporting pubkey addresses as csv file which is imported from Watch only wallet
    • signing on unsigned transaction as first sign. However, multisig addresses could not be completed by only this wallet.

3.Sign wallet as cold wallet (Auth wallet)

  • The internal authorization operators would use this wallet to sign on unsigned transaction for multisig addresses.
  • Each of operators would be given own authorization account and Sing wallet apps.
  • This wallet is expected to work offline.
  • Major functionalities are
    • generating seed for accounts for own auth account
    • generating keys based on HD Wallet for own auth account
    • exporting full-pubkey addresses as csv file which is imported from Keygen wallet to generate multisig address
    • signing on unsigned transaction as second or more signs for multisig addresses.

Workflow diagram

BTC

1. Generate keys

generate keys

2. Create unsigned transaction, Sign on unsigned tx, Send signed tx for non-multisig address.

create tx

3. Create unsigned transaction, Sign on unsigned tx, Send signed tx for multisig address.

create tx for multisig

Requirements

Directory Structure

  • cmd ... app directories including main.go
    • keygen ... keygen wallet
    • sign ... sign wallet
    • watch ... watch wallet
  • data
    • address ... generated files by this CLI
    • certs ... for docker volume directory used by docker-compose.xrp.yml
    • config ... config toml files
    • contract ... generated token abi file
    • dump ... BTC wallet file generated by api dumpwallet command. See Makefile.
    • fullpubkey ... generated files by this CLI
    • gaiad ... genesis.json for cosmos gaiad
    • keystore ... keystore for Ethereum
    • proto ... proto files for ripple gRPC communication
  • docker ... docker resources
  • docs ... documents
  • images ... for only docs
  • pkg ... go files
  • scripts ... shell scripts
  • templates ... template file for sqlboiler Go ORM
  • web
    • erc20-token ... erc20 token contract
    • ripple-lib-server ... Ripple gRPC server

pkg Directory Structure

Note, explained only well modified packages

  • wallet/api/btcgrp ... Bitcoin RPC APIs. API References
  • wallet/api/ethgrp ... Ethereum RPC APIs. API References
  • wallet/api/xrpgrp ... Ripple gRPC client to communicate with ripple-lib-server
  • wallet/key ... address/seed generation logic
  • wallet/service/btc ... Bitcoin business logic
  • wallet/service/eth ... Ethereum business logic
  • wallet/service/xrp ... Ripple business logic
  • wallet/service/coldsrv ... Cold Wallet common business logic
  • wallet/service/watchsrv ... Watch Wallet common business logic

Components inside repository

  • ripple-lib-server
    • ./web/ripple-lib-server
  • erc20-token
    • ./web/erc20-token

Installation

Installation

Operation example

Command example

TODO

Basics

For BTC/BCH

  • Setup Signet environment for development use
  • Fix overpaying fee issue on Signet. It says 725% overpaying.
  • native SegWit-Bech32
  • Multisig-address is used only once because of security reason, so after tx is sent, related receiver addresses should be updated by is_allocated=true.
  • Sent tx is not proceeded in bitcoin network if fee is not enough comparatively. So re-sending tx functionality is required adding more fee.

For ERC20 token

  • Add any useful APIs using contract equivalent to ETH APIs
  • Monitoring for ERC20 token

For ETH

  • Make sure that quantity-tag is used properly. e.g. when getting balance, which quantity-tag should be used, latest or pending.
  • Handling secret of private key properly. Password could be passed from command line argument.

For XRP

  • Handling secret of private key properly. Password could be passed from command line argument.

Project layout patterns

  • The pkg layout pattern, refer to the linked URLs for details.