An implementation of the BIP32 spec for Hierarchical Deterministic Bitcoin addresses. No superimposing wallet structure has been defined.
You can use this library in two ways; one with a serialized public or private HD key or with a hex encoded seed.
Look at the tests to see more elaborate uses.
Chain chain = Chain.seed(hex.encode(utf8.encode("some seed")));
ExtendedPrivateKey key = chain.forPath("m/0/100");
print(key);
// => xprv9ww7sMFLzJN5LhdyGB9zfhm9MAVZ8P97iTWQtVeAg2rA9MPZfJUESWe6NaSu44zz44QBjWtwH9HNfJ4vFiUwfrTCvf7AGrgYpXe17bfh2Je
The key
has a field called key
which contains a BigInt
. This is the actual
key.
Chain chain = Chain.import("xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi");
ExtendedPrivateKey childKey = chain.forPath("m/0/100");
Chain chain = Chain.import("xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8");
ExtendedPublic childKey = chain.forPath("M/0/100");
The key
has a field called q
which contains a ECPoint
. This is the actual
key.
Please note that trying to generate a private key from a public key will throw an exception.
There is a tiny chance a child key derivation fails. Please catch the appropriate exceptions in your code.
These exceptions are:
KeyZero
KeyBiggerThanOrder
KeyInfinite
Add it to your pubspec.yaml
:
dependencies:
bip32: ^0.1.0
Without the guiding code of go-bip32 and money-tree projects this library would have been a significantly bigger struggle.
v0.1.0
example/main.dart
import 'dart:convert';
import 'package:convert/convert.dart';
import "package:bitcoin_bip32/bitcoin_bip32.dart";
void main() {
Chain chain = Chain.seed(hex.encode(utf8.encode("some seed")));
ExtendedPrivateKey key = chain.forPath("m/0/100");
print(key);
}
Add this to your package's pubspec.yaml file:
dependencies:
bitcoin_bip32: ^0.1.0
You can install packages from the command line:
with pub:
$ pub get
with Flutter:
$ flutter packages get
Alternatively, your editor might support pub get
or flutter packages get
.
Check the docs for your editor to learn more.
Now in your Dart code, you can use:
import 'package:bitcoin_bip32/bitcoin_bip32.dart';
Version | Uploaded | Documentation | Archive |
---|---|---|---|
0.1.1 | Jan 8, 2019 |
|
|
0.1.0 | Oct 30, 2018 |
|
|
Popularity:
Describes how popular the package is relative to other packages.
[more]
|
47
|
Health:
Code health derived from static analysis.
[more]
|
100
|
Maintenance:
Reflects how tidy and up-to-date the package is.
[more]
|
100
|
Overall:
Weighted score of the above.
[more]
|
73
|
We analyzed this package on Feb 14, 2019, and provided a score, details, and suggestions below. Analysis was completed with status completed using:
Detected platforms: Flutter, web, other
No platform restriction found in primary library
package:bitcoin_bip32/bitcoin_bip32.dart
.
Format lib/src/crypto.dart
.
Run dartfmt
to format lib/src/crypto.dart
.
Package | Constraint | Resolved | Available |
---|---|---|---|
Direct dependencies | |||
Dart SDK | >=2.0.0 <3.0.0 | ||
base58check | ^1.0.1 | 1.0.1 | |
convert | ^2.0.2 | 2.1.1 | |
pointycastle | ^1.0.0-rc4 | 1.0.0 | |
Transitive dependencies | |||
charcode | 1.1.2 | ||
collection | 1.14.11 | ||
crypto | 2.0.6 | ||
typed_data | 1.1.6 | ||
Dev dependencies | |||
test | ^1.3.4 |