Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cryptocoinjs/stealth
Stealth addresses for Bitcoin and other crypto currencies.
https://github.com/cryptocoinjs/stealth
Last synced: 25 days ago
JSON representation
Stealth addresses for Bitcoin and other crypto currencies.
- Host: GitHub
- URL: https://github.com/cryptocoinjs/stealth
- Owner: cryptocoinjs
- Created: 2015-02-14T18:15:37.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2015-08-31T12:34:36.000Z (over 9 years ago)
- Last Synced: 2024-10-28T15:59:11.639Z (about 1 month ago)
- Language: JavaScript
- Homepage:
- Size: 141 KB
- Stars: 42
- Watchers: 9
- Forks: 9
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
- awesome-cryptocoinjs - bitcoin
README
stealth
=======[![build status](https://secure.travis-ci.org/cryptocoinjs/stealth.svg)](http://travis-ci.org/cryptocoinjs/stealth)
[![Coverage Status](https://img.shields.io/coveralls/cryptocoinjs/stealth.svg)](https://coveralls.io/r/cryptocoinjs/stealth)[![js-standard-style](https://raw.githubusercontent.com/feross/standard/master/badge.png)](https://github.com/feross/standard)
This module is used for stealth addresses for Bitcoin and other crypto currencies.
Usage
-----First, you should really read this excellent resource: https://gist.github.com/ryanxcharles/1c0f95d0892b4a92d70a
This module depends upon [ecurve](https://github.com/cryptocoinjs/ecurve) and may change to
[elliptic](https://github.com/indutny/elliptic) in the future. However, this is just an implementation detail
that shouldn't affect your code.### Example
#### If you're the payer (sender)
```js
var Stealth = require('stealth')// you get this from the person you're going to pay (receiver)
var addr = 'vJmtuUb8ysKiM1HtHQF23FGfjGAKu5sM94UyyjknqhJHNdj5CZzwtpGzeyaATQ2HvuzomNVtiwsTJSWzzCBgCTtUZbRFpzKVq9MAUr'
var stealth = Stealth.fromString(addr)// single-use nonce key pair, works with CoinKey, bitcoinjs-lib, bitcore, etc
var keypair = require('coinkey').createRandom()// generate payment address
var payToAddress = stealth.genPaymentAddress(keypair.privateKey)// create transaction with two outputs:
// 1. Regular pay-to-pubkeyhash with `payToAddress` as recipient
// 2. OP_RETURN with `keypair.publicKey`
```#### If you're the payee (recipient)
```js
var Stealth = require('stealth')// you need to scan every transaction and look for the following:
// 1. does the transaction contain an OP_RETURN?
// 2. if yes, then extract the OP_RETURN
// 3. is the OP_RETURN data a compressed public key (33 bytes)?
// 4. if yes, check if mine// generate two key pairs, can use CoinKey, bitcoinjs-lib, bitcore, etc
var payloadKeyPair = require('coinkey').createRandom()
var scanKeyPair = require('coinkey').createRandom()// note, the private keys are NOT encoded in the Stealth address
// you need to save them somewhere
var stealth = new Stealth({
payloadPrivKey: payloadKeyPair.privateKey,
payloadPubKey: payloadKeyPair.publicKey,
scanPrivKey: scanKeyPair.privateKey,
scanPubKey: scanKeyPair.publicKey
})var addr = stealth.toString()
// => 'vJmtuUb8ysKiM1HtHQF23FGfjGAKu5sM94UyyjknqhJHNdj5CZzwtpGzeyaATQ2HvuzomNVtiwsTJSWzzCBgCTtUZbRFpzKVq9MAUr'// publish addr or give it someone
// unlike regular Bitcoin addresses, you can use
// stealth address as much as you like// scan and decode transactions
var opReturnPubKey = /* */
var pubKeyHashWithPayment = /* */var keypair = stealth.checkPaymentPubKeyHash(opReturnPubKey, pubKeyHashWithPayment)
// it NOT YOURS, `keypair` will be falsey
if (keypair == null) {
console.log('payment is not mine')
} else {
console.log('payment is mine')// redeem with `privKey`
console.log(keypair.privKey)
}
```API
---(TODO)
### + fromRandom([config])
Class method to create a stealth key from a random entropy. Optionally pass in `config` with the following:
- `rng`: A function that should accept a number `n` and return a `Buffer`/`Array` with length `n`.
- `version`: Version code for stealth string.Resources
---------### Credits
The creation of this module owes a lot of credit to the prior work of [Ryan X. Charles](https://github.com/ryanxcharles), specifically the following
resources:- https://github.com/ryanxcharles/fullnode
- https://gist.github.com/ryanxcharles/1c0f95d0892b4a92d70a### Additional Resources
- Dark Wallet description: https://wiki.unsystem.net/en/index.php/DarkWallet/Stealth
- Dark Wallet infographic: https://wiki.unsystem.net/en/images/e/e5/RHhNKL6.jpg
- Stealth Whitepaper: http://sourceforge.net/p/bitcoin/mailman/message/31813471/License
-------MIT