{"id":13731977,"url":"https://github.com/hexresearch/ergvein","last_synced_at":"2025-07-04T10:04:28.392Z","repository":{"id":35443727,"uuid":"212041647","full_name":"hexresearch/ergvein","owner":"hexresearch","description":"Multiplatform BTC wallet with client side filters","archived":false,"fork":false,"pushed_at":"2024-03-16T18:44:48.000Z","size":45243,"stargazers_count":36,"open_issues_count":25,"forks_count":8,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-05-27T22:06:10.790Z","etag":null,"topics":["bitcoin","bitcoin-wallet","cachix","desktop","mobile","privacy","spv","wallet"],"latest_commit_sha":null,"homepage":"https://cypra.io","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hexresearch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2019-10-01T07:57:21.000Z","updated_at":"2024-07-17T14:30:16.000Z","dependencies_parsed_at":"2024-04-20T05:44:02.041Z","dependency_job_id":null,"html_url":"https://github.com/hexresearch/ergvein","commit_stats":{"total_commits":957,"total_committers":16,"mean_commits":59.8125,"dds":0.7847439916405434,"last_synced_commit":"8f57305120c629456953acf1c55aae65f9a2f19e"},"previous_names":[],"tags_count":40,"template":false,"template_full_name":null,"purl":"pkg:github/hexresearch/ergvein","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexresearch%2Fergvein","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexresearch%2Fergvein/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexresearch%2Fergvein/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexresearch%2Fergvein/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hexresearch","download_url":"https://codeload.github.com/hexresearch/ergvein/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hexresearch%2Fergvein/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260831430,"owners_count":23069466,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitcoin","bitcoin-wallet","cachix","desktop","mobile","privacy","spv","wallet"],"created_at":"2024-08-03T02:01:42.988Z","updated_at":"2025-07-04T10:04:28.365Z","avatar_url":"https://github.com/hexresearch.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# Ergvein\n\n![Build all](https://github.com/hexresearch/ergvein/workflows/Build%20all/badge.svg)\n\nErgvein is MVP implementation for [Cypra](https://cypra.io) ecosystem. It is cryptocurrency [SPV](https://developer.bitcoin.org/devguide/operating_modes.html?highlight=spv#simplified-payment-verification-spv) wallet that is focused on privacy, decentralized exchange and heavy usage of smart contracts. The wallet is Bitcoin only at the moment. The project encourages users to host their own backend node.\n\n**Wallet is not finished yet! Consider the product as alpha quality and subject for changes.**\n\nFeatures:\n* We use [SPV](https://developer.bitcoin.org/devguide/operating_modes.html?highlight=spv#simplified-payment-verification-spv) design. Wallet doesn't trust nodes. All data is double checked: the wallet samples multiple nodes and checks results for consistency.\n* Private keys are stored in encrypted storage and never leave your device. All wallet data is encrypted and protected by your password.\n* Android platform\n* Decentralized public network of indexing nodes that allows users to make money when they run them.\n\n# How to build project\n\n1. You need `nix` tool to build the repo. Install with non-root user:\n```\nbash \u003c(curl https://nixos.org/nix/install)\n```\n1. Optional, to speed up (factor of 10 times) build, you can enable cachix binary cache. See secion below.\n1. To build desktop version:\n```\n./shells.sh\ncabal new-build all\ncabal new-run ergvein\n```\n1. To build android version:\n```\n./make-android.sh\n./install-apk.sh\n```\n1. If you are using NixOS you need to manually enable reflex-platform cache:\n```\nnix.binaryCaches = [ \"https://cache.nixos.org/\" \"https://nixcache.reflex-frp.org\" ];\nnix.binaryCachePublicKeys = [ \"ryantrinkle.com-1:JJiAKaRv9mWgpVAz8dwewnZe0AzzEAzPkagE9SP5NWI=\" ];\n```\n\n# How to build release\n\nThere are two files that are related to APK signing of release bundle: `./release/password` and `./release/release.keystore`.\nFirst is encrypted by git-crypt and only our team can access it. That protects Google Play releases from tampering.\n\nBut, if you want to build your own release version with own signatures, you can create your own keys and sign with them. Here\nhow to perform this:\n```\ncd release \u0026\u0026 ./create_keystore.sh my_store.keystore\n```\nFill password and answer questions for certificate, next put password in a file, for instance: `./release/my-password`.\n\nNext, you can build release with:\n```\n./release-android.sh --arg releasePasswordFile ./release/my-password --arg releaseKeyStore ./release/my_store.keystore\n```\nResults will be symlinked in folders `android-release` for bundle and `android-release-apk` for APK version, we provide both\nas bundles are not easy for manual installation.\n\n# How to use cachix\n\nWe provide binary cache for builds via cachix.org. To start using it to speed up your builds:\n```\nnix-env -iA cachix -f https://cachix.org/api/v1/install\ncachix use ergvein\n```\n\n# Deploy index server with docker-compose\n\nThis docker-compose uses official docker image [ergvein/ergvein-index-server](https://hub.docker.com/r/ergvein/ergvein-index-server)\n\n``` sh\ncd index-server/docker-compose-example\n```\n\nAdjust connection settings for bitcoin node in config.yml and run:\n\n``` sh\ndocker-compose up -d\n```\n\nErgvein index server will listen on all network interfaces port tcp 8667.\n\nStop and purge all data:\n\n``` sh\ndocker-compose down -v\n```\n\nNote that you need to have running and synced bitcoin nodes.\n\nIf you have no btc nodes, you may run them along with ergvein indexer like that:\n\n``` sh\ndocker-compose -f docker-compose.yml -f docker-compose-btc.yml up -d\n```\n\nAlso pay attention to `BTCNodeUser` and `BTCNodePassword` parameters in config.yml. In production environmnet use strong password for bitcoin node and generate `rpcauth` string (have a look at docker-compose-btc.yml file) with official bitcoin project python script:\n\n``` sh\ncurl -sSL https://raw.githubusercontent.com/bitcoin/bitcoin/master/share/rpcauth/rpcauth.py | python3 - bitcoinrpcuser\n```\n\nIn docker-compose file you have to escape `$` symbol with `$` (yes, should looks like double dollar sign).\n\nIf you want to run on tesnet networks update settings in config.yml and use CHAIN=test environment variable:\n\n``` sh\nCHAIN=test docker-compose -f docker-compose.yml -f docker-compose-btc.yml up -d\n```\n\nStop and purge all data (including btc node):\n\n``` sh\ndocker-compose -f docker-compose.yml -f docker-compose-btc.yml up -d\n```\n\n\n# Deploy indexer server with nixos module\n\nYou can use our NixOS module to deploy index server in ten minutes. Add the following to your `/etc/nixos/configuration.nix`:\n``` nix\nlet ergvein = pkgs.fetchFromGitHub {\n      owner = \"hexresearch\";\n      repo = \"ergvein\";\n      rev = \"35a67a64c70c73cc100c929fe32f334ca6d549aa\";\n      sha256 = \"18rly6g6qkysw3gv3fhvicsbxv37f1hm4ll7sckpdwcfbxvyrfwn\";\n    };\nin {\n  imports = [\n    \"${ergvein}/nix/modules/ergvein.nix\"\n    \"${ergvein}/nix/modules/local-secrets.nix\" # remove if using nixops secrets\n  ];\n  services.ergvein = {\n    enable = true;\n    externalAddress = { host = \"127.0.0.1\"; port = 8667; }; # here place your ip\n  };\n  deployment.keys = {\n    btcpassword.text = \"verysecretpassword\";\n  };\n\n}\n```\n\n# UI prototyping\n\n* Start the server:\n    * ``cd ui-playground``\n    * ``./watch.sh``\n* Implement the design in pure HTML+CSS in ``index.html``\n* You may use ``css/extra.css`` for fast CSS changes\n* Alternatevly use Style.hs to mimic the Ergvein.Style module with Clay\n   1. Change Style.hs\n   2. ``./generate-css.sh``\n   3. Sometimes hakyll fails to detect changes from the ``generate-css`` script. In this case, open ``css/style.css`` and press Ctrl+S\n\nThe page is accessible at ``127.0.0.1:8000``\n\nFinally, transfer design choices and extra classes to the wallet.\n\n# Troubleshooting\n\n## Element inspector fails to render\n\nIf the page turns to blank when you open the element inspector or resize the window try exporting\n`export WEBKIT_DISABLE_COMPOSITING_MODE=1` before running the app.\n\n## pg_ctl failed to start\n\nError: `could not create lock file \"/var/run/postgresql/.s.PGSQL.5434.lock\": Permission denied`\nSolution: `sudo chmod a+w /var/run/postgresql`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhexresearch%2Fergvein","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhexresearch%2Fergvein","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhexresearch%2Fergvein/lists"}