This release includes:
- Nov 15 upgrade
- Implement and enforce canonical transaction order.
- Add OP_CHECKDATASIG and OP_CHECKDATASIGVERIFY.
- Enforce minimum transaction size of 100 bytes.
- Enforce VERIFY_SIGPUSHONLY.
- Enforce VERIFY_CLEANSTACK.
- Remove monolith deployments
- Update bcrypto
- bug fixes
Backports from bcoin:
- bug fixes
Major changes include backports from bcoin:
buffer-map
refactor- bug fixes
- Initial tagged bcash release.
The chain indexing subsystem has been refactored to be more modular and flexible. A migration is required to cleanup the old indexes, if present.
Indexing has been made extensible so that new indexers such as a filter index for BIP 157 can be implemented easily.
Users can toggle any indexing on/off anytime before or after the initial sync. The indexer will start resyncing the chain state and replaying blocks to process them for indexing. Once caught up, it will just index new blocks.
An index can be dropped by just deleting the corresponding database.
-
__lib/indexer__
Indexer
implements the base methods which are common to all indexers, including setting up the database, handling chain events such as new block etc. -
By default, bcoin ships
TXIndexer
,AddrIndexer
implementations. These indexers preserve all the existing indexing functionality and can be enabled via the same flags i.e.--index-tx
--index-address
, for compatibility. -
Database location can be configured via
--index-prefix
config option. Default locations areprefix
+/index
e.g.:~/.bcoin/testnet/index/tx
,~/.bcoin/testnet/index/addr
. -
__/lib/blockchain/chain__
- the following methods have been moved out of the chain to the indexers:node.txindex
implements:getMeta(hash)
getTX(hash)
hasTX(hash)
getSpentView(tx)
node.addrindex
implements:getCoinsByAddress(addrs)
getHashesByAddress(addrs)
getTXByAddress(addrs)
getMetaByAddress(addrs)
Using these methods on the chain is deprecated.
The latest bcoin release contains almost a total rewrite of the wallet. A migration is required.
Bcoin has also been modularized quite a bit. Users installing globally from npm should be sure to run:
$ npm update -g bcoin
For users who cloned the respository themselves, it might be wise to simply
remove the node_modules
directory and do a fresh npm install
.
$ cd bcoin/
$ git pull origin master
$ rm -rf node_modules/
$ npm install
$ npm test
Once upgrading is complete, a migration script must be executed. The migration
script resides in ./migrate/latest
as an executable file.
A bcoin prefix directory must be passed as the first argument.
Example:
$ ./migrate/latest ~/.bcoin
What this does:
- Renames
chain.ldb
tochain
. - Renames
spvchain.ldb
tospvchain
. - Renames
walletdb.ldb
towallet
. - Runs a migration (
chaindb3to4.js
) onchain
. - Runs a migration (
chaindb3to4.js
) onspvchain
. - Runs a migration (
walletdb6to7.js
) onwallet
.
The chain migration should be minor, and only taxing if you have
--index-address
enabled.
If you have a testnet, regtest, or simnet directory, the migration must also be run on these, e.g.
$ ./migrate/latest ~/.bcoin/testnet
Also note that the --prefix
argument now always creates a fully-fledged
prefix directory. For example --prefix ~/.bcoin_whatever --network testnet
will create a directory structure of ~/.bcoin_whatever/testnet/
instead of
~/.bcoin_whatever
. Please update your directory structure accordingly.
Wallet and Node are now separated and use different persistent configuration files.
Some configuration options have moved to wallet.conf
, which is stored in the prefix
directory next to the existing bcoin.conf
.
All configuration options in wallet.conf
will have the wallet-
prefix added implicitly. The prefix is still needed when using CLI/ENV configuration
methods. The wallet now has it's own HTTP server, so options such as
wallet-http-host
must also be specified along with http-host
if you require this setting (required for Docker networking).
Wallet-specific settings such as api-key
and wallet-auth
have moved to wallet.conf
. If using CLI/ENV options, these are prefixed with wallet-
.
Various configuration method examples are shown below.
Note some config options (eg. network
) are automatically passed to wallet plugin
if specified through CLI/ENV, but should be specified in wallet.conf
for bwallet-cli
.
Example using wallet.conf:
network: testnet
wallet-auth: true
api-key: hunter2
http-host: 0.0.0.0
Example using CLI options:
./bin/node --network=testnet --http-host=0.0.0.0 --wallet-http-host=0.0.0.0 --wallet-api-key=hunter2 --wallet-wallet-auth=true
Example using ENV:
BCOIN_NETWORK=simnet BCOIN_HTTP_HOST=0.0.0.0 BCOIN_WALLET_HTTP_HOST=0.0.0.0 BCOIN_WALLET_API_KEY=hunter2 BCOIN_WALLET_WALLET_AUTH=true ./bin/node
The bcoin cli
interface has been deprecated and is now replaced with a
separate tool: bcoin-cli
. bcoin wallet
has also been deprecated and is
replaced with bwallet-cli
. Both bcoin-cli
and bwallet-cli
can be
installed with the bclient
package in npm.
The main wallet API changes have to do with changes in the structure of the HTTP server itself. The bcoin wallet HTTP server will now always listen on it's own port. Standard ports are:
main: 8334
testnet: 18334
regtest: 48334
simnet: 18558
The default account object is no longer present on the wallet. To retrieve it,
request /wallet/:id/account/default
instead. More minor changes to the JSON
output include the removal of id
and wid
properties on a number of objects.
Please update your code accordingly.
For socket.io events, all wallet
prefixes have been removed. For example,
wallet join
should be replaced with simply join
. All wallet-related events
(tx
, confirmed
, etc) now receive the wallet ID as the first argument. The
tx
event will receive [id, details]
instead of [details]
.
The _admin
endpoints have been moved up a level. Instead of requesting
/wallet/_admin/backup
(for example), request /backup
instead. If
--wallet-auth
is enabled, a new flag --admin-token
is accepted. Admin token
is a 64 character hex string and allows access to all admin routes. For
example, GET /backup?token=xxx...
. It also allows access to any wallet on the
HTTP or websocket layer (websockets who use the admin token can join a wallet
of *
, which notifies them of events on all wallets).
- wallet/http - A
conflict
event will be correctly emitted for all double spends. - wallet/http - Account balances are now indexed and will appear on account objects via the API.
- bcoin - Bcoin has been rewritten using class syntax. Objects will not be inheritable with legacy prototypal inheritance.
- pkg - Bcoin is once again buildable with browserify.
- pkg - Numerous modules have been moved out to separate dependencies. For
example, the
lib/crypto
module has been moved to thebcrypto
package (and also heavily optimized even further). - bcoin - The main
bcoin
module has been rewritten in terms of what it exposes and how. Conventions have changed (Address
instead ofaddress
). Due to the use of class syntax, something likebcoin.Address(str)
is no longer possible. Please take a look atlib/bcoin.js
to get a better idea of what has changed. - net - Support for BIP151 and BIP150 has been dropped.
- pkg - Ignored
bcoin*
files in npmignore have been removed. This fixes the npm install.
-
config - Options using megabyte units are now calculated properly again (6182df044228f9215938e7d314435f3f2640acca, a630d23a97b68f189a85105856fedc4e9e515754, 7728a0047053d4c368e60426e5fc7cc812d54caf).
-
address - Bech32 addresses are now supported (6acef06cbc87a3051ba238a2fb640562e718135e). This changes the semantics of the
Address
object: to support bech32,Address.fromBase58
calls should be replaced withAddress.fromString
. Likewise,addr.toBase58
calls should be replaced withaddr.toString
-
rpc -
getblockbyheight
is now exposed via JSON-RPC. It takes the same parameters as thegetblock
call, requiring a height instead of block hash (12d3ee6f9582afa9a3ba8984c63dcbc27b8db57e). -
bin -
bcoin --version
andbcoin --help
now exit with appropriate messages (f2f94a800e37c5dbdda6920fa6b85fbd485c212a). -
net - The p2p pool now exposes an
--only
option (a1d0948f2e528c5d77d6502659fafd064b1e693b). -
mempool - The mempool
indexAddress
option should now work correctly (fba9b46d253c19bbf8e662d9d75ab03dc9e20a78). -
rpc - JSON-RPC calls now properly cast booleans a la bitcoin core (dd49ee076196d2353783e3044185165dbac4aeb9).
-
rpc - Various RPC calls have been improved and updated (c78707ed6a71ce46c41c4e43ecb505e78a84b380, c1e684dc12d0a86573a905d54d4f81fce921987a, 5bde338a53117b1bd0fd92df0abc23d95180ab32).
-
rpc - Retroactive pruning is now available via the
pruneblockchain
call (f0bc6d5925419ba4a8289fa7828efc48ecc152d4). -
http - Getting block by height via the Rest API now works again (df4c8cc68c965bd818a5004354d2652751d4a702).
-
net - Peers who serve invalid orphans are now punished properly (0ceca23cb5a3d724c79c6bf587ede5d473df8486).
-
utils - An implementation of GCS filters is now supported (b994c278f25408886c3095d0c24123baaf07f78f).
-
http - The
witness
option is now properly exposed on the Rest API for segwit wallets (f04ad612b216becd35765c6e231f7820c7eee358). -
deps - Node.js >=v7.6.0 is now a required dependency (a0bd9680fed07c5eb37c227d160b0868f8adaf31).
-
build - The browser build has switched from browserify to webpack (19f236f74072d473123d20282d2119f6d9130458).
-
bcoin - The codebase has been rewritten to use all ES6 and ES7 features supported by node.js (aa05bb5df79d9a3af53060a4c0c066226f6e9e4c, 78d62c73b82e1953999d1cf80c90ed2035d4996e, e00472891df5934d8fc3aa63662f852816aa86b0, c53f4cf89e46d9de8ab7f65430310567558fe03f, 8c7279518f5341a2482a79ac98f0574468541edc).
-
workers - The worker pool has been refactored to solve the dissonance between the browser and node.js (27c60ce76e57af1695d78f912227d93194812c88).
-
net - DNS requests should now timeout sooner (647b6909c6d527eb82f6d789c88a23b2f8a60126).
-
http - Satoshi values are now required for all JSON serialization, as opposed to BTC strings which were used in the past (2f51fd1c5066f194a5a52383f4dd45497b882706).
-
bin - The
--no-wallet
flag is now exposed for nodes who want to run without a wallet. -
chain - BIP91 support is now exposed via the
--bip91
option. Thesegwit
andsegsignal
rules will be automatically added when callinggetblocktemplate
. To enable bip91 on an existing database--force-flags
must be passed. This will force bip91 to be enforced, but will not invalidate any previous blocks (bcoin cli reset [height]
may need to be used). -
chain - BIP148 support is now exposed via the
--bip148
option. This likewise must be enabled with--force-flags
on existing chains. This has the same potential "reset" implications as the--bip91
option.
This release contains a few non-backward-compatible changes.
Bcoin now requires node.js >=7.6.0 due to the use of ES6/7 features, and for the sake of more stability.
Bcoin's rest API now assumes satoshi values for in all JSON serialization. This is a breaking change for code that is not aware of it. All code which hits the rest API must be updated to use only satoshi values as opposed to BTC strings.
In other words, this:
{
"unconfirmed": "1.12",
"confirmed": "1.12"
}
Becomes this:
{
"unconfirmed": 112000000,
"confirmed": 112000000
}
- networks - Fixed simnet wpkh prefix.
- http -
wallet join
without wallet auth has been fixed for responses. This was causing a hanging issue with the client.
- networks - Simnet params have been fixed.
- cli - Chain reset call has been fixed.
- wallet/http - Create wallet route modified
(
POST /wallet/:id?
changed toPUT /wallet/:id
). - wallet/http - Create account route modified
(
POST /wallet/:id/account/:account?
changed toPUT /wallet/:id/account/:account
). - wallet/http -
auth
socket.io event name for wallet auth changed towallet auth
. - config -
payout-address
option was changed tocoinbase-address
. - node - Plugin system is now exposed. See bcoin-org/bcoin#156.
- config - The internal API for the config object has been rewritten and is now more reusable, particularly by node plugins.
- http/rpc - Both the HTTPBase and RPCBase objects now allow "mounting" by other rpc and http servers.
- wallet - The wallet code has been completely removed from the node, and now resides entirely within one module. The wallet is exposed only as a plugin or a separate server.
- rpc -
prioritisetransaction
is now exposed properly (deltaFee
s are now tracked on mempool entries). - rpc - Proper
id
and error codes are now implemented. - rpc - Several
getblocktemplate
improvements have been implemented for more accuracy. e.g.curtime
will now be updated each call. - mining - The internal miner API has been rewritten, and now mimics stratum in a sense.
- chain - Faster verification with checkpoints.
- net - Fixed a potential block stalling issue.
- net - Hardcoded seeds for main added. Makes for better shipping with browsers.
- wsproxy/proxysocket - DNS resolution is no longer exposed.
- logger - Log files now trim to 20mb on boot.
- hostlist - A persistent
hosts
file is now written by default.
- mempool - Trimming now removes dependency chains by cumulative fee rate.
- mempool - Cumulative descendant fees are now updated properly when removing a transaction.
- net - Preliminary upnp support for adding port mappings.
- chain/mempool/miner - Various atomicity fixes and extra sanity checking.
- pool/peer - Peer height is now tracked and exposed on the RPC as
bestheight
.
- mempool - Fixed critical fee estimator bug causing throwing in the mempool.
- http - Always display spent coins in tx routes (e.g.
/tx/[txid]
). - mempool - An on-disk mempool is now exposed via
--persistent-mempool
(also makes fee data persistent). - chain -
chain.add
now takes aflags
parameter to avoid POW and non-contextual checks if necessary. - net - HostList is now potentially persistent with a
hostLocation
option. - net - Smarter stall behavior and timeouts.
- http - Better bitcoind compatability for JSON-RPC.
- miner - Better fee rate comparisons.
- deps - Upgrade deps, fix build on arm and windows.
- miner - Optimized TX sorting.
- rpc - Improved getblocktemplate to provide more accurate results to bitcoind.
- miner - Improved fee rate sorting.
- rpc - Fix incompatibilities in rpc api (getblocktemplate & submitblock).
- pool - Increase max header chain failures to 500 (prevents the initial sync from reverting to getblocks so frequently).
- wsproxy: Fixed proof of work handling in websocket proxy (43c491b).
- chain: Optimized MTP and network target calculations (1e07d1b).
- wallet: Implemented "smart" coin selection (304f0e7e).
- protocol: Increased default network fees for main (09c2357).
- http: Fix for handling
DELETE
http method (393dd5d). - miner: Improved handling of default reserved size and sigops (f2964e0 and 7104e4c).
- Initial tagged release.