Commit Graph

274 Commits

Author SHA1 Message Date
Ryan X. Charles b37e39abca Script().writeXX convenience methods
Script().writeOp('OP_CHECKMULTISIG'), or...
Script().writeOp(174), or...
Script().writeBuffer([push data buffer]), or...
Script().write([op string, number, or push data buffer])

These convenience methods let you easily write a script.
2014-09-23 21:28:03 -07:00
Ryan X. Charles 54818c0bd8 expose stealthtx 2014-09-23 21:08:00 -07:00
Ryan X. Charles d689dbb77e speed up random test slightly
...by caching hexes. Also, correct the "1000" typo - it's actually 100.
2014-09-23 20:28:16 -07:00
Ryan X. Charles 4f71535869 StealthTx
For spotting transactions to which you have the stealth key (or at least the
scan key) and creating transactions to a stealth address. So far it is only
partially working - you can see if a transaction is a stealth transaction (or
at least one of a limited kind of stealth transactions), and you can see that
you do not have the stealth key to spend one of these transactions. However, I
have not yet tested whether you can see a stealth transaction that you actually
have the key to. Also, it is not yet easy to spend to a stealth address.
2014-09-23 16:54:52 -07:00
Ryan X. Charles 4fabad21a1 get rid of obsolete 'bitcore' stealth addr format 2014-09-23 14:27:48 -07:00
Ryan X. Charles fd499089bb update readme to reflect toJSON/fromJSON
...rather than toObject/fromObject, which I had considered doing before, but
decided toJSON/fromJSON was more explicit.
2014-09-23 14:27:48 -07:00
Ryan X. Charles 22b87325d7 make Dark Wallet buffer/string formats the default
and rename the old functions to "bitcore buffer" and "bitcore string"
2014-09-23 14:27:48 -07:00
Ryan X. Charles a3062b622c Merge pull request #1 from petertodd/master
Minor: spelling
2014-09-22 18:26:43 -07:00
Ryan X. Charles 96df77429f add support for Dark Wallet-style addresses
These functions are prefixed DW which stands for Dark Wallet. The code for the
Dark Wallet address format can be found here:

https://github.com/darkwallet/darkwallet/blob/develop/js/util/stealth.js

Note that I deliberately support only the simplest possible format, which is
where there is only one payload pubkey and the prefix is blank. I should now go
back and replace my old toString, fromString, toBuffer, fromBuffer functions
with these Dark Wallet versions, since they are much more well-thought out than
mine.
2014-09-22 18:23:10 -07:00
Ryan X. Charles 9b8ce05b15 BufferWriter().toBuffer convenience method
It does the same thing as .concat(), but may be easier to remember, since the
rest of the library uses the ".toBuffer()" convention
2014-09-22 17:09:53 -07:00
Ryan X. Charles 792e8080c8 classify pubkeyhash and scripthash scripts
...both the "in" (ScriptSig) and "out" (ScriptPubkey)
2014-09-22 16:04:06 -07:00
Ryan X. Charles 6f92775b2c extra curly braces for code readability 2014-09-22 14:56:07 -07:00
Ryan X. Charles 5c7149aeab Stealthkey toJSON/fromJSON 2014-09-22 14:45:41 -07:00
Ryan X. Charles d6e3266179 toJSON/fromJSON for privkey, pubkey, keypair 2014-09-22 13:55:40 -07:00
Ryan X. Charles f3614e4a90 Key -> Keypair
...that is what is called everywhere else.
2014-09-22 13:14:39 -07:00
Ryan X. Charles e984736736 allow bufs in constructors
For Transaction, Block and Blockheader. This is a convenience so if you happen
to have the buffer for one of these, you can make a new one like this:

Transaction(txbuf);

Rather than having to do this:

Transaction().fromBuffer(txbuf);
2014-09-22 13:07:39 -07:00
Ryan X. Charles 1516ad3012 remove unused addressString variable 2014-09-22 12:52:09 -07:00
Ryan X. Charles e6a424303e remove unused base58check dependency 2014-09-22 12:51:18 -07:00
Ryan X. Charles 1bda566679 stealth address to/from JSON 2014-09-22 12:48:13 -07:00
Ryan X. Charles 27fbdb42ad isOpReturn
standard OP_RETURN scripts contain either just an OP_RETURN or an OP_RETURN
followed by a single pushdata OP with not more than 40 bytes.
2014-09-19 21:59:19 -07:00
Ryan X. Charles ffdfe0ce83 add fromString test for bip32
...since it was lacking any tests
2014-09-19 21:02:57 -07:00
Ryan X. Charles d57613bc91 body is actually defined in the function 2014-09-19 17:41:22 -07:00
Ryan X. Charles cc3196085f add .hash() function for a block
This is the plain old hash, which is a double sha256. The id of a block is the
reverse of this.
2014-09-19 17:29:40 -07:00
Ryan X. Charles aff3992ffb transaction hash and id
...the hash is the usual hash, and the id is the reverse of that, which is what
is usually graphically displayed by bitcoind.
2014-09-19 17:25:35 -07:00
Ryan X. Charles 40d17c5180 block id
The block id is the reverse of the double sha256 hash of the blockheader.
2014-09-19 17:08:44 -07:00
Ryan X. Charles f191e93711 make block reading more efficient
...by using streams. This way we don't load all the blocks before parsing them.
We parse them as we go.
2014-09-19 16:40:29 -07:00
Ryan X. Charles cfd509f859 make receivePubkey compatible with dark wallet
I had been using this formula for the receiveKeypair:

scanKeypair + payloadKeypair + sharedKeypair

However, Dark Wallet uses this formula:

payloadKeypair + sharedKeypair

It is not actually necessary to add the scanKeypair in order to have all the
features of stealth addresses, at least as far as I can tell. So in order to
bring my implementation closer to Dark Wallet's, I have removed the scanKeypair
from this calculation.
2014-09-19 14:32:32 -07:00
Ryan X. Charles 7647663a5e typo 2014-09-19 14:02:44 -07:00
Ryan X. Charles 199ed7c4ba update dependencies 2014-09-18 18:46:31 -07:00
Ryan X. Charles 04887db261 update blockreader example to use toJSON 2014-09-18 17:52:43 -07:00
Ryan X. Charles e11019a083 toJSON, fromJSON
Every object should have toJSON and fromJSON methods so you can have a reliable
way to store and retrieve objects.
2014-09-18 17:52:02 -07:00
Ryan X. Charles 2ecf1cdcdf Block parsing example
bitcoind saves blocks in files called blk*****.dat. Those files can be piped
into this example, which will parse them and spit out a nice looking string of
all the blocks, which also includes parsed transactions.
2014-09-18 15:20:23 -07:00
Ryan X. Charles f17d604e44 Address().fromHashbuf() convenience method
...useful for when you have the pubkeyhash, but not the version byte.
2014-09-18 15:18:53 -07:00
Peter Todd 2db942d65a
Minor: spelling 2014-09-18 05:58:08 -04:00
Ryan X. Charles 60459b6c7a expose
Block, Blockheader, Transaction, Txin, Txout
2014-09-17 17:36:59 -07:00
Ryan X. Charles d2bc960744 fix capitalization error on case-sensitive filesystems 2014-09-17 17:02:40 -07:00
Ryan X. Charles 6fe5d416a0 fix capitalization error on case-sensitive filesystems 2014-09-17 17:00:32 -07:00
Ryan X. Charles 1fa5482518 add travis file
...for travis automated testing
2014-09-17 16:56:36 -07:00
Ryan X. Charles cf5b2f1250 varint -> vi canonical spelling 2014-09-17 16:48:23 -07:00
Ryan X. Charles 4a21a9551c fromX is actually static
...should add an instance method in the future
2014-09-17 16:32:38 -07:00
Ryan X. Charles 2caf7c6471 bn -> BN canonical capitalization 2014-09-17 16:08:42 -07:00
Ryan X. Charles f727c5ad25 fix varint test broken in browser 2014-09-17 16:03:57 -07:00
Ryan X. Charles 0212e4bd4c replace .buffer with .read 2014-09-17 15:49:45 -07:00
Ryan X. Charles 8e049b7244 smarter 2014-09-17 15:44:59 -07:00
Ryan X. Charles 6cee393c5d put brains in read 2014-09-17 15:43:15 -07:00
Ryan X. Charles 6e1dfd3003 allow bufferreader.read to specify length
...to be more symmetric with the write function of bufferwriter
2014-09-17 15:41:30 -07:00
Ryan X. Charles 7918f53f12 bnjs -> BN ... for consistency 2014-09-17 15:32:58 -07:00
Ryan X. Charles aee8547093 add fromString method for library consistency 2014-09-17 15:32:14 -07:00
Ryan X. Charles 6494ca5076 convenience: varint -> vi 2014-09-17 15:27:12 -07:00
Ryan X. Charles 0eeba8eadb canonical BN notation 2014-09-17 15:22:52 -07:00