npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

nostr-keys

v1.1.0

Published

Advanced nostr key derivation.

Downloads

12

Readme

nostr-keys

One key to rule them all.

Private keys for Nostr and cryptocurrencies are simply very large random integers. They are all similar in that way. At that base level, they are interchangable.

For example, once you generate a Nostr private key, that same private key controls a Bitcoin address, a Litecoin address, and an ever growing list of systems.

This package allows you to generate or import a 12 word seed phrase, from which you can obtain a near limitless number of Nostr keypairs, Bitcoin private keys and address, as well as those for many other cryptocurrencies.

Example Code (/test/test.mjs)

import { strGenerateSeedWords, 
         boolIsValidWords, 
         objNostrKeys,
         objCoinKeys } from "@laantungir/nostr-keys"

console.log()
console.log(`New random private 12 word seed phrase in a string.`)
let strSP = strGenerateSeedWords()
console.log(strSP)
console.log()


// Use this if you are importing a seed phrase instead of 
// generating one.
console.log()
console.log(`Is this a valid seed phrase.`)
console.log(boolIsValidWords(strSP) )


// From this phrase, generate a javascript object that contains 
// nostr keys that conform to NIP-06 and NIP-19 
console.log()
console.log(`Nostr keys.`)
let oNK = objNostrKeys(strSP)
console.log(oNK)


console.log()
console.log(`Just give me the npub.`)
console.log(oNK.npub)


// The key phrase will generate a near endless number of Nostr keys
console.log()
console.log(`First 5 Nostr nsec's.`)
for (var i = 0; i < 5; i++) {
    console.log(objNostrKeys(strSP,i).strDerivationPath, objNostrKeys(strSP,i).nsec)
}


// Now Bitcoin :-)
console.log()
console.log(`Bitcoin address and private key.`)
let objBC = objCoinKeys(strSP)
console.log(objBC)


console.log()
console.log("The first 5 Bitcoin addresses.")
for (var i = 0; i < 5; i++) {
    let objBC = objCoinKeys(strSP, 0, 0, 0, i)
    console.log(objBC.strDerivationPath, objBC.strCoinAddress, objBC.strCoinPrivateKeyWIF)
}


console.log()
console.log("The first 5 Bitcoin change addresses.")
for (var i = 0; i < 5; i++) {
    let objBC = objCoinKeys(strSP, 0, 0, 1, i)
    console.log(objBC.strDerivationPath, objBC.strCoinAddress, objBC.strCoinPrivateKeyWIF)
}


console.log()
console.log("Litecoin address and key.")
console.log(objCoinKeys(strSP,2))

console.log()
console.log("Dogecoin address and key for Elon.")
console.log(objCoinKeys(strSP,3))

Example Code Output


New random private 12 word seed phrase in a string.
any ten vague remind average never coconut universe they board sad sad


Is this a valid seed phrase.
true

Nostr keys.
{
  nsecHex: 'a9318d82eab6b8fe8b0d4a8e1ae553c6779240e6e87934c8e8271ef3a42565fd',
  npubHex: 'ace5b7c3109b337704de6bcca86e2bec9110880a796a9a60248bb8cbe69318db',
  nsec: 'nsec14yccmqh2k6u0azcdf28p4e2ncemeys8xapunfj8gyu008fp9vh7sscpayw',
  npub: 'npub14njm0scsnvehwpx7d0x2sm3tajg3pzq2094f5cpy3wuvhe5nrrdsr94ysw',
  strDerivationPath: "m/44'/1237'/0'/0/0"
}

Just give me the npub.
npub14njm0scsnvehwpx7d0x2sm3tajg3pzq2094f5cpy3wuvhe5nrrdsr94ysw

First 5 Nostr nsec's.
m/44'/1237'/0'/0/0 nsec14yccmqh2k6u0azcdf28p4e2ncemeys8xapunfj8gyu008fp9vh7sscpayw
m/44'/1237'/1'/0/0 nsec1sy5z7wjja8pztdhmkk2pvjdkru9cwk2xevg4wlt062wyc0pd3vuqfxd053
m/44'/1237'/2'/0/0 nsec1fxx7zx3cm53qzp84a660234sd47h5gxdgwmulv223ssv2hde9clqh8fk3t
m/44'/1237'/3'/0/0 nsec15q0u85z30hqhrrctnweqg9tl8yjnu0dzzpkldcghplalwtpv3qms29h64s
m/44'/1237'/4'/0/0 nsec12yzm6hc3hd98h4clmt8tl8qwm9sfchewvss5xzhw5t5uawx4a8aqchyveq

Bitcoin address and private key.
{
  nsecHex: '29c2f0df778e2d02cc9811e24bd84b323cedb0601570e5ac640d0459f9b89144',
  strCoinPrivateKeyWIF: 'KxctZPrgKHtgKBuVpXNpbxWLWG6UBDpUUdSPmJeVXwmsahv7KJJV',
  strCoinAddress: '1CsTuJYXtETUP1gcU6C8K5mhBfhzEpSfki',
  strDerivationPath: "m/44'/0'/0'/0/0"
}

The first 5 Bitcoin addresses.
m/44'/0'/0'/0/0 1CsTuJYXtETUP1gcU6C8K5mhBfhzEpSfki KxctZPrgKHtgKBuVpXNpbxWLWG6UBDpUUdSPmJeVXwmsahv7KJJV
m/44'/0'/0'/0/1 1PRtgEY1o58aEfhsafqZT5ELtCXdnzmd8q L1P9u5ATMnS6VRqQ39KeRGNsf8K4dhYYrupGYv8KDtgMgVc9VeAp
m/44'/0'/0'/0/2 1QCVZ5m6UbK9U6arTK2zdFA457i4NhshmU L2dmUqMz9G4o8kFV8jp6h5PToje4cLYwwzYnDZVmE6W2pKU6jybN
m/44'/0'/0'/0/3 1FG471XN8z6Le5RYhXAhPxnPK7pfNuDnmA L3KU1ZtmnrbhdKGru712dWsSKpPVBy6imNCoXuywwko943DJQSAh
m/44'/0'/0'/0/4 16KhtSLT8ZhYEmJqekCwtiGUW9cLEHKxZs L4wspFPuzkhZLEfGCKZuH5D8b75YKsMxiZcfftFFM2Q1PfdVAWSo

The first 5 Bitcoin change addresses.
m/44'/0'/0'/1/0 12RAiqdToGnwiNPKJJF4Biff6GYabbEhBB L2cWS8AxxMejd49WC1CTkiMjNYhDics3wKjEFZbLSW8c9jRrDyu6
m/44'/0'/0'/1/1 1LnjucKhqf1fJZaNRexogpqQNSYktyURWG KwoNKZ89Cfcbt9bnPkZKZKHu9Jqz3S68TohALJibWtuj2no8QiDg
m/44'/0'/0'/1/2 1GDt86VUZYTEMW4KfMbviXBf9jCxnPyxBF KyZNqYCExC47dxuRmyirSyddJCNtsy1Uz5GeyVt3hMmiYaEwiygk
m/44'/0'/0'/1/3 1M3w1yj9khTAjc2wDNqAjzhEtpgzBJ6bdi L1ShfyxfaNvQupZTJoARSMZvZ4VPgk5HKUB4VvxxAyEdTVYp7Q7A
m/44'/0'/0'/1/4 19NHHbBQfL6wi86YT3JcaTHdHrTpHWnu35 L1XqVy2aYCH5bJ6FNmsuKS6D2dmdxFsCNZgxR5LCeh7age2mjJmf

Litecoin address and key.
{
  nsecHex: 'af484e1715f3dfb889d8308d007dc43402ffc674b39433f2d095ee96c5cd7990',
  strCoinPrivateKeyWIF: 'L36SJTwhAaEkCDkCsPvVrYeCUybQMo4CjmpUYH5HRxv16cmxHYhi',
  strCoinAddress: '16DW7HZ7qTFSC9qnEMGzVyfs8xJEBcEcFz',
  strDerivationPath: "m/44'/2'/0'/0/0"
}

Dogecoin address and key for Elon.
{
  nsecHex: '943fd935e47c28c284a2198ddb780a9754a1a70a8a056d850fe0b50e64f24df9',
  strCoinPrivateKeyWIF: 'L2BtUh1sUUKQnojXxEG29Ae14nBsvzBnEYnEGyLG354ugCMvUvbH',
  strCoinAddress: '1PaycfwfYv6gMhEGr1RVLnfX9tR8MF2rUD',
  strDerivationPath: "m/44'/3'/0'/0/0"
}