Skip to content

Repository files navigation

Bitcoin Seed Tool

This tool offers a space for bitcoiners to experiment and learn how bitcoin wallets are generated using different sources of entropy (randomness). The page also offers many other seed related functionalites, some of which are outlined below. The online version can be found at https://bitcoiner.guide/seed.

Offline Usage

NEVER use the online version of this tool to create or interact with seeds used to manage real bitcoin. While there is nothing in this tool that collects private information or sends it anywhere, there may be other software on your device that does. If the tool detects a network connection, it will display a network symbol in the top corner of the screen.

To use this tool offline, use the download link in the online version or download the index.html from the releases page.

Usage

Some common use cases for this tool include:-

  • Learning how entropy is used to derive wallet components
  • Generating seeds via dice rolls, coin flips or playing cards
  • Verifying entropy inputs (dice rolls etc) applied to external wallets or signers
  • Generating BIP85 child seeds (or check those generated by a signing device)
  • Generating BIP47 payment codes and their corresponding PayNym avatars
  • Generating BIP47 addresses between any two payment codes
  • Verifying wallet address generation from a given seed/passphrase combination
  • Testing for a forgotten/incorrect passphrase (if you know a receive address)

Donations

If you find this page useful, consider donating some sats to the lead developer SuperPhatArrow or to any of the open source libraries this tool was built on top of.

Verification

To verify the tool, take the following steps.

  1. Import the release signing key, which is in this repository as RELEASE-SIGNING-KEY.asc

gpg --import RELEASE-SIGNING-KEY.asc

  1. Check the key's fingerprint is exactly EB3D 738B EC6A 873A C274 5292 CF4F E215 EA66 63AC

gpg --fingerprint qna@bitcoiner.guide

  1. Download the latest release index.html and signature.txt files

  2. Navigate to your Downloads folder and run sha256sum index.html

  3. Check for an exact hash match as the one published in the signature.txt file

  4. Run gpg --verify signature.txt and look for a Good signature from "QnA qna@bitcoiner.guide"

Reproducing a release

dist/index.html is assembled from the files in src/www by build.js, which only inlines them into one page. Anyone can rebuild a release from its tag and compare the hash with the one in that release's signature.txt:

git clone https://github.com/BitcoinQnA/seedtool.git
cd seedtool
git checkout <release tag>
node build.js
sha256sum dist/index.html

build.js needs Node.js only; no packages are installed. The bundled libraries in src/www/js/lib are committed build outputs: seven are built with esbuild by the build_*.js scripts from the pinned versions in package-lock.json, the rest are older browserify builds from libs/.

Before tagging a release, npm run release:check runs the tests, rebuilds dist/index.html and fails if the committed file differs from the source.

Development

Install nodejs

Make sure nodejs is installed:

node --version

If not, I recommend Node Version Manager (nvm). Then use nvm to make sure you are using the latest LTS version:

nvm install --lts
nvm use --lts

Install development dependencies

In the root directory of the project type:

npm i

Ready to code

In the root directory of the project type:

npm run dev

Open browser to http://localhost:3000/ change files in your code editor of choice and the webpage will reload on save of files in the src folder. The dev server only uses Node's standard library; PORT=4000 npm run dev serves on another port.

Build

npm run build

Builds the output html file to the dist directory for distribution

GIT add, commit and push

MSG="Added this awesome new feature" npm run git

Will run the build script and push your changes to git

About

No description, website, or topics provided.

Resources

Stars

106 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages