npm doesn't play well with the symlink bitcore-latest.js. Instead, put the
latest main bundle in bundle.js (which is what it used to be called) so
packages like Copay can use the latest bundle just like how they used to.
The network classes Connection, Peer and PeerManager are not useful from the
browser, so I have removed them from the main browser bundle by default. This
saves several tens of kilobytes from the browser bundle (since not only are
these files not included, but their dependencies are not included either).
In this commit I have added the 'official' versions 0.1.24 and 0.1.25 to the
repo, and also created a new bitcore-dev.js that is not included in the repo.
bitcoin-dev.js is what we will use for development. When we define a new
version, we create a new bitcore-x.x.x.js file, and point bitcore-latest.js to
that. Note that the bitcore-x.x.x.js files should always be the "main" bundle,
which does not include BIP39 or BIP70, or other large packages.
Some features of bitcore will be too large to be included in the browser bundle
by default. Since BIP39 pretty much requires the giant list of words to be
used, I am excluding it by default. The ability to exclude some features by
default will become useful with some particularly large features to come,
particularly BIP70.
I have often made the error of using a public key rather than the hash of the
public key when creating an address, leading to invalid addresses. I'm sure I'm
not the only one. This commit follows the principle of "fail early, fail often"
and simply throws an error if you try to insert something other than 20 bytes
long when creating an address, which would be the case when using a public key.
This way that common mistake should be reduced.
Bitcore in Copay is not being installed correctly due to changes we made
recently in the way bitcore is compiled (it is not compiled on install, but on
prepublish). This adds all the bundles to the repo to fix that issue.
...no longer relies on Manuel's repo hostig a version of "bignum" that actually
contained bignumber.js. This moves bignumber.js internally and removes bignum
from the browser build process. Also adds a bitcore.Bignum that links to the
right thing. In node, browser.Bignum is require('bignum'). And in the browser,
bitcore.Bignum is is now Bignumber.js (same as before ... except bignumber.js
is now inside bitcore).
Generating random numbers properly depends on the platform. The new
getRandomBuffer method does the right thing on the right platform. It will
sometimes fail due to insufficient entropy. The getPseudoRandomBuffer class is
also provided that will never fail, but it is not cryptographically secure and
should not be used for keys.