Project: BigchainDB (App Definition and Development / Database)
File: CHANGELOG.md

<! Copyright 2020 Interplanetary Database Association e.V., BigchainDB and IPDB software contributors. SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0) Code is Apache-2.0 and docs are CC-BY-4.0 > All notable changes to this project will be documented in this file (`CHANGELOG.md`). This project adheres to (or at least we try). The BigchainDB public API was defined in this file but that definition was moved and can now be found in . Contributors to this file, please follow the guidelines on . Note that each version (or "release") is the name of a of a particular commit, so the associated date and time are the date and time of that commit (as reported by GitHub), not the "Uploaded on" date listed on PyPI (which may differ). For reference, the possible headings are: Added* for new features. Changed* for changes in existing functionality. Deprecated* for once-stable features removed in upcoming releases. Removed* for deprecated features removed in this release. Fixed* for any bug fixes. Security* to invite users to upgrade in case of vulnerabilities. External Contributors* to list contributors outside of BigchainDB GmbH. Known Issues* Notes* Several dependencies updated including Flask that had vulnerability. Updated priv_validator key format in stack script (#2707) @aostrun - Gevent library API update is incompatible with bigchaindb-abci 1.0.1 version. Updated bigchaindb-abci. Support for multiple ABCI versions. Option for last transaction retrieval added. Migrated from Tendermint 0.22.8 to 0.31.5. Removed support for TLSv1 and TLSv1.1 in all NGINX config files. Kept support for TLSv1.2 and added support for TLSv1.3. Fixed two issues with schema validation. Pull requests & and team translated all the into Korean. Revised the in the docs. Added NGINX to the mix. Pull Requests and Revised `nginx/nginx.conf` to enable CORS. Fixed a typo in the Kubernetes ConfigMap template. translated the main `README.md` file into Korean. Tag name: v2.0.0b7 Completed the implementation of chain-migration elections (BEP-42). Pull requests , , , and Code that used the Python driver's (deprecated) transactions.send() method now uses its transactions.send_commit() method instead. Code that implied pluggable "consensus" now implies pluggable transaction "validation" (a more accurate word). Benchmark logs. A bug caused by an incorrect MongoDB query. There's now better documentation about logs, log rotation, and the `server.bind` config setting. Pull requests and Tag name: v2.0.0b6 . New documentation about log rotation. Also rotate Tendermint logs if started using Monit. Began implementing one of the migration strategies outlined in . That involved creating a more general-purpose election process and commands. Pull requests , , , , Used memoization to avoid doing some validation checks multiple times. Created an all-in-one Docker image containing BigchainDB Server, Tendermint and MongoDB. It was created for a particular user and is not recommended for production use unless you really know what you're doing. The supported versions of Tendermint are now hard-wired into BigchainDB Server: it checks to see what version the connected Tendermint has, and if it's not compatible, BigchainDB Server exits with an error message. The docs no longer say to install the highest version of Tendermint: they say to install a specific version. The setup docs include more recommended settings for `config.toml`. The process to add, remove or update the voting power of a validator at run time (using the `bigchaindb upsert-validator` subcommands) was completely changed and is now fully working. See and all the pull requests it

Pull requests and The license on the documentation was changed from CC-BY-SA-4 to CC-BY-4. Re-activated and/or updated some unit tests that had been deacivated during the migration to Tendermint. Pull requests , , , Updated RapidJSON to a newer, faster version. The Java driver is now officially supported. The MongoDB indexes on transaction id and block height were changed to be . Updated the required `cryptoconditions` package to a newer one. Removed some old code and tests. Pull requests , , , , Fixed the Events API so that it only sends valid transactions to subscribers. Also changed how it works internally, so now it is more reliable. Fixed a bug where MongoDB database initialization would abort if a collection already existed. Fixed a unit test that was failing randomly. Fixed the validator curl port. Fixed an error in the docs about the HTTP POST /transactions endpoint. Fixed a unit test that could loop forever. Fixed a bug when validating a CREATE + TRANSFER. Fixed the HTTP response when posting a transaction in commit mode. Fixed a crash that happened when attempting to restart BigchainDB at Tendermint block height 1. @danacr - The docs section titled "Production Deployment Template" was renamed to "Kubernetes Deployment Template" and we no longer consider it the go-to deployment template. The "Simple Deployment Template" is simpler, easier to understand, and less expensive (unless you are with an organization that already has a big Kubernetes cluster). Tag name: v2.0.0b5 Supported version of Tendermint `0.22.3` -> `0.22.8`. . Stateful validation raises a DoubleSpend exception if there is any other transaction that spends the same output(s) even if it has the same transaction ID. . Tag name: v2.0.0b4 Added scripts for creating a configuration to manage processes with Monit. . Redundant asset and metadata queries were removed. . Signal handling was fixed for BigchainDB processes. . Some of the abruptly closed sockets that used to stay in memory are being cleaned up now. . Fixed the bug when WebSockets powering Events API became unresponsive. . The instructions on how to write a BEP were simplified. . A section about troubleshooting was added to the network setup guide. . Some of the core code was given a better package structure. . Some of the previously disabled unit tests were re-enabled and updated. Pull requests and . Some building blocks for dynamically adding new validators were introduced. . Tag name: v2.0.0b3 Fixed a bug in transaction validation. For some more-complex situations, it would say that a valid transaction was invalid. This bug was actually fixed before; it was . The unit test for it was turned off while we integrated Tendermint. Then the query implementation code got changed, reintroducing the bug, but the unit test was off so the bug wasn't caught. When we turned the test back on, shortly after releasing Beta 2, it failed, unveiling the bug. Tag name: v2.0.0b2 Added new configuration settings `tendermint.host` and `tendermint.port`. Added tests to ensure that BigchainDB gracefully handles "nasty" strings in keys and values. Added a new logging handler to capture benchmark stats to a separate file. Changed the names of BigchainDB processes (Python processes) to include 'bigchaindb', so they are easier to spot and find. Updated all code to support the latest version of

Note that the BigchainDB ABCI server now listens to port 26657 instead of 46657. Pull requests and Removed all support and code for the old backlogreassigndelay setting. Fixed a bug that sometimes arose when using Docker Compose. (Tendermint would freeze.) Fixed a bug in the code that creates a MongoDB index for the "id" in the transactions collection. It works now, and performance is improved. The logging server would keep runnning in some tear-down scenarios. It doesn't do that any more. @hrntknr - The `bigchaindb upsert-validator` subcommand is not working yet, but a solution () has been finalized and will be implemented before we release the final BigchainDB 2.0. A lot of old/dead code was deleted. Pull requests , , , , , and Improved the documentation page "How to setup a BigchainDB Network". Tag name: v2.0.0b1 Fixed a bug that arose with some code that treated transactions-waiting-for-block-inclusion as if they were already stored in MongoDB (i.e. already in a block). If a user asked for a block and it happened to be an empty block, BigchainDB returned 404 Not Found, as if the block did not exist. Now it returns a 200 OK with a block containing no transactions, i.e. an empty block. An issue was found with the `bigchaindb upsert-validator` command. A solution was proposed in and is being implemented in If you run BigchainDB locally using `make start` (i.e. using Docker Compose) and then you put the node under heavy write load, Tendermint can become unresponsive and running `make stop` can hang. There seems to be one or more issues with Tendermint when it is put under heavy load (i.e. even when BigchainDB isn't involved). See Tendermint issues , and There's a about how to set up a network where each node uses a single virtual machine. We checked, and BigchainDB 2.0 Beta 1 works with MongoDB 3.6 (and 3.4). Support for RethinkDB is completely gone. Tag name: v2.0.0a6 Upgraded PyMongo to version 3.6 (which is compatible with MongoDB 3.6, 3.4 ). When deploying a node using our Docker Compose file, it didn't expose port 46656, which is used by Tendermint for inter-node communications, so the node couldn't communicate with other nodes. We fixed that in We ran all our tests using MongoDB 3.6 and they all passed, so it seems safe to use BigchainDB with MongoDB 3.6 from now on. Tag name: v2.0.0a5 To resolve , we made some changes to the `bigchaindb-abci` package (which is our fork of `py-abci`) and told BigchainDB to use the new version (`bigchaindb-abci==0.4.5`). . Tag name: v2.0.0a4 The Kubernetes liveness probe for the BigchainDB StatefulSet was improved to check the Tendermint /status endpoint in addition to the Tendermint /abci_info endpoint. resolved . There's a new . Tag name: v2.0.0a3 Upgraded BigchainDB Server code to use the latest version of Tendermint: version 0.19.2. Pull requests , and Made some fixes to `py-abci` (an external Python package) and used our fixed version with BigchainDB. Those fixes resolved several known issues, including and issues with large transactions in general. Note: At the time of writing, our fixes to `py-abci` hadn't been merged into the main `py-abci` repository or its latest release on PyPI; we were using our own special `bigchaindb-abci` package (which included our fixes). Pull requests and If BigchainDB Server crashes and then comes back, Tendermint Core doesn't try to reconnect to

That's just how Tendermint Core works. We revised our Kubernetes-based production deployment template to resolve that issue: BigchainDB Server and Tendermint Core are now in the same Kubernetes StatefulSet; if the connection between them ever goes down, then Kubernetes restarts the whole StatefulSet. Re-enabled multi-threading. Tendermint changed how it responds to a request to store data (via the ) between version 0.12 and 0.19.2. We started modifying the code of BigchainDB Server to account for those changes in responses (in ), but we found that there's a difference between what the Tendermint documentation says about those responses and how Tendermint actually responds. We need to determine Tendermint's intent before we can finalize that pull request. We were focused on getting the public BigchainDB Testnet stable during the development of BigchainDB 2.0 Alpha 3, and we think we largely succeeded. Because of that focus, we delayed the deployment of an internal test network until later. It would have had the same instabilities as the public BigchainDB Testnet anyway. In the future, we'll always test a new version of BigchainDB on our internal test network before deploying it on the public BigchainDB Testnet. (That wasn't possible this time around, because there was no old/stable version of BigchainDB 2.n to run on the public BigchainDB Testnet while we tested BigchainDB 2.[n+1] internally.) Tag name: v2.0.0a2 An implementation of , which makes sure a node can recover from a system fault (e.g. a crash) into a consistent state, i.e. a state where the data in the node's local MongoDB database is consistent with the data stored in the blockchain. Pull requests and When someone uses the HTTP API to send a new transaction to a BigchainDB network using the endpoint, they now get back a more informative HTTP response, so they can better-understand what happened. This is only when mode is `commit` or `sync`, because `async` means that the response is immediate, without waiting to see what happened to the transaction. If BigchainDB Server crashes and then is restarted, Tendermint Core won't try to reconnect to BigchainDB Server and so all operations requiring that connection won't work. We only understood this recently. We'll write a blog post explaining what we intend to do about it. The known issues in 2.0 Alpha (listed below) are still there. Tag name: v2.0.0a1 There were many changes between 1.3 and 2.0 Alpha, too many to list here. We wrote a series of blog posts to summarize most changes, especially those that affect end users and application developers: A forthcoming post about changes in BigchainDB Server configuration settings @r7vme contributed which fixed a bug in our Kubernetes-based production deployment template. We intend to resolve these issues before releasing the final BigchainDB 2.0: There's a known Heisenbug that (sometimes) arises and we found that making the BigchainDB webserver single-threaded prevents that bug from causing problems. We intend to resolve that bug, but in the meantime our temporary workaround is to change the default webserver configuration settings to single-threaded mode, i.e. `BIGCHAINDBSERVERWORKERS=1` and `BIGCHAINDBSERVERTHREADS=1`. Issues sometimes happen when a large transaction is sent to a BigchainDB network. Tag name: v1.3.0 Metadata full-text search. Improved documentation about blocks and votes. Tag name: v1.2.0 New and improved installation setup docs and code. Pull requests and New BigchainDB configuration setting to set the port number of the log server:

New secondary index on `id` in the bigchain table. That will make some queries execute faster. When using MongoDB, there are some restrictions on allowed names for keys (JSON keys). Those restrictions were always there but now BigchainDB checks key names explicitly, rather than leaving that to MongoDB. Pull requests and When using MongoDB, there are some restrictions on the allowed values of "language" (if that key is used in the values of `metadata` or `asset.data`). Those restrictions were always there but now BigchainDB checks the values explicitly, rather than leaving that to MongoDB. Pull requests and There's a new page in the root docs about permissions in BigchainDB. There's a new option in the `bigchaindb start` command: `bigchaindb start --no-init` will avoid doing `bigchaindb init` if it wasn't done already. Fixed a bug where setting the log level in a BigchainDB config file didn't have any effect. It does now. The docs were wrong about there being no Ping/Pong support in the Events API. There is, so the docs were fixed. Fixed an issue with closing WebSocket connections properly. Many changes were made to the Kubernetes-based production deployment template and code. Tag name: v1.1.0 Support for server-side plugins that can add support for alternate event consumers (other than the WebSocket API). New configuration settings to set the advertised wsserver scheme, host and port. (The advertised* ones are the ones that external users use to connect to the WebSocket API.) Support for secure (TLS) WebSocket connections. A new page of documentation about the contents of a condition (inside a transaction). We updated our definition of the public API* (at the top of this document). The HTTP API Logger now logs the request path and method as well. @carchrae - @ivanbakel - @ketanbhatt - Pull requests and New drivers & tools from our community: , by , by @nileshtrivedi Many improvements to our production deployment template (which uses Kubernetes). The production deployment template for the multi-node case was out of date. We updated that and verified it. Tag name: v1.0.1 Various issues in the Quickstart page. Pull requests and . Changefeed hanging when MongoDB primary node is turned off. . Missing `assets` tables for RethinkDB backend. . Cryptoconditions version mismatch. . Tag name: v1.0.0 This just reports the changes since the release of 1.0.0rc1. If you want the full picture of all changes since 0.10, then read the 1.0.0rc1 change log below as well as the upgrade guide. The file name of the upgrade guide changed from `docs/upgrade-guides/v0.10-->v1.0.md` to `docs/upgrade-guides/v0.10-v1.0.md`. In `transaction.inputs In `transaction.outputs Refined transaction schema validation to check that the `transaction.outputs Before, GET requests (to the HTTP API) with header `Content-Type: 'application/json'` would get a response with the message, "The browser (or proxy) sent a request that this server could not understand." Now, if a GET request includes a `Content-Type` header, that header gets deleted (i.e. ignored). If an end user sends a transaction with `operation` equal to `GENESIS`, it will be rejected as invalid. Tag name: v1.0.0rc1 Support for secure TLS/SSL communication between MongoDB and {BigchainDB, MongoDB Backup Agent, MongoDB Monitoring Agent}. Pull Requests , , , , and . Text search support (only if using MongoDB). Pull Requests and The `database.connection_timeout` configuration setting now works with RethinkDB too. New code and tools for benchmarking CREATE

There's an upgrade guide in `docs/upgrade-guides/v0.10-->v1.0.md`. It only covers changes to the transaction model and HTTP API. If that file hasn't been merged yet, see Cryptographic signatures now sign the whole (serialized) transaction body, including the transaction ID, but with all `"fulfillment"` values changed to `None`. In transactions, the value of `"amount"` must be a string. (Before, it was supposed to be a number.) In `setup.py`, the "Development Status" (as reported on PyPI) was changed from Alpha to Beta. If you explicitly specify a config file, e.g. `bigchaindb -c path/to/config start` and that file can't be found, then BigchainDB Server will fail with a helpful error message. Reduced the response time on the HTTP API endpoint to get all the unspent outputs associated with a given public key (a.k.a. "fast unspents"). Internally, the value of an asset's `"data"` is now stored in a separate assets table. This enabled the new text search. Each asset data is stored along with the associated CREATE transaction ID (asset ID). That data gets written when the containing block gets written to the bigchain table. Schema validation was sped up by switching to `rapidjson-schema`. If a node comes back from being down for a while, it will resume voting on blocks in the order determined by the MongoDB oplog, in the case of MongoDB. (In the case of RethinkDB, blocks missed in the changefeed will not be voted on.) Parallelized transaction schema validation in the vote pipeline. `asset.data` or `asset.id` are now required* in a CREATE or TRANSFER transaction, respectively. The HTTP response body, in the response to the `GET /` and the `GET /api/v1` endpoints, was changed substantially. Changed the HTTP `GET /api/v1/transactions/{transaction_id}` endpoint. It now only returns the transaction if it's in a valid block. It also returns a new header with a relative link to a status monitor. All instances of `txid` and `txid` were replaced with `transactionid`, in the transaction model and the HTTP API. The hostname and port were removed from all URLs in all HTTP API responses. Relative links were replaced with JSON objects in HTTP API responses. In the outputs endpoint of the HTTP API, the query parameter `unspent` was changed to `spent` (so no more double negatives). If that query parameter isn't included, then all outputs matching the specificed public key will be returned. If `spent=true`, then only the spent outputs will be returned. If `spent=false`, then only the unspent outputs will be returned. The supported crypto-conditions changed from version 01 of the crypto-conditions spec to version 02. The value of "version" inside a transaction must now be "1.0". (Before, it could be "0.anything".) The `server.threads` configuration setting (for the Gunicorn HTTP server) was removed from the default set of BigchainDB configuration settings. The `GET /api/v1/outputs` endpoint was failing for some transactions with threshold conditions. Fixed in @elopio - Pull Requests and @CsterKuroi - @tdsgit - @lavinasachdev3 - We dropped support for Python 3.4. There were many improvements to our Kubernetes-based production deployment template (and the associated documentaiton). There is now a , created by @addywaddy at . The was moved to a different GitHub repo and is now officially maintained by the BigchainDB team. We continue to recommend using MongoDB. Tag name: v0.10.3 Pin minor+ version of `cryptoconditions` to avoid upgrading to a non compatible version. Tag name:

Add Cross Origin Resource Sharing (CORS) support for the HTTP API. Fixed `streams_v1` API link in response to `GET /api/v1`. Fixed mismatch between docs and implementation for `GET /blocks?status=` endpoint. The `status` query parameter is now case insensitive. Tag name: v0.10.1 Documentation for the BigchainDB settings `wsserver.host` and `wsserver.port`. Fixed `Dockerfile`, which was failing to build. It now starts `FROM python:3.6` (instead of `FROM ubuntu:xenial`). Fixed the `Makefile` so that `release` depends on `dist`. Tag name: v0.10.0 Improved logging. Added logging to file. Added `--log-level` option to `bigchaindb start` command. Added new logging configuration settings. Pull Requests , , , , , , , , , and Events API using WebSocket protocol. Pull Requests , , , , , and Initial support for using SSL with MongoDB (work in progress). Pull Requests and The main BigchainDB Dockerfile (and its generated Docker image) now contains only BigchainDB Server. (It used to contain both BigchainDB Server and RethinkDB.) You must now run MongoDB or RethinkDB in a separate Docker container. Made separate schemas for CREATE and TRANSFER transactions. When signing transactions with threshold conditions, we now sign all subconditions for a public key. Many changes to the voting-related code, including how we validate votes and prevent duplicate votes by the same node. Pull Requests and Removed the `bigchaindb load` command. Pull Requests , and Removed old `/speed-tests` and `/benchmarking-tests` directories. Fixed the URL of the BigchainDB docs returned by the HTTP API. Fixed the MongoDB changefeed: it wasn't reporting update operations. Fixed the block-creation process: it wasn't checking if the transaction was previously included in: a valid block. the block-under-construction. Pull Requests and In alphabetical order by GitHub username: @anryko - @anujism - @jackric - @lavinasachdev3 - @morrme - @tomconte - @tymlez - Pull Requests & MongoDB is now the recommended database backend (not RethinkDB). There are some initial docs about how to deploy a BigchainDB node on Kubernetes. It's work in progress. Tag name: v0.9.5 Upgrade `python-rapidjson` to `0.0.11`(fixes #1350 - thanks to @ferOnti for reporting). Tag name: v0.9.4 Fixed #1271 (false double spend error). Thanks to @jmduque for reporting the problem along with a very detailed diagnosis and useful recommendations. Tag name: v0.9.3 Fixed HTTP API 500 error on `GET /outputs`: issues #1200 and #1231. Tag name: v0.9.2 Pin `python-rapidjson` library in `setup.py` to prevent `bigchaindb`'s installation to fail due to https://github.com/python-rapidjson/python-rapidjson/issues/62. Tag name: v0.9.1 Fixed bug in how the transaction `VERSION` string was calculated from the BigchainDB Server `short_version` string. Tag name: v0.9.0 It has been more than two months since the v0.8.0 release, so there have been many changes. We decided to describe them in broad strokes, with links to more details elsewhere. Support for MongoDB as a backend database. Some configuration settings and `bigchaindb` command-line commands were added. In particular, one can specify the database backend (`rethinkdb` or `mongodb`). For MongoDB, one can specify the name of the replicaset. Also for MongoDB, there are new command-line commands to add and remove hosts from the replicaset. See . Transaction schema validation. The transaction schema is also used to auto-generate some docs. Vote schema validation. The vote schema is also used to auto-generate some docs. New `ENABLEWEBADMIN` setting in the AWS deployment configuration file. The transaction model has changed substantially. @libscott wrote a blog post about the changes and it will be published soon on

Also, see . The HTTP API has changed substantially. @diminator wrote a blog post about the changes and it will be published soon on . Also, see . All RethinkDB-specific database calls were replaced with abstract calls to a backend database. Some improvements to the Dockerfile, e.g. Pull Requests and Many improvements to the tests We standardized on supporting Ubuntu 16.04 for now (but BigchainDB Server also works on similar Linux distros). `api_endpoint` was removed from the BigchainDB configuration settings. (It was never used anyway.) Removed all remaining StatsD monitoring code, configuration settings, docs, etc. (We'll add another monitoring solution in the future.) Fixed a memory (RAM) overflow problem when under heavy load by bounding the size of the queue at the entrance to the block pipeline. Fixed some logic in block validation. @amirelemam - (closed but used as the basis for ) @utarl - There were many additions and changes to the documentation. Fun fact: The JSON in the HTTP API docs is now auto-generated to be consistent with the current code. There's a draft spec for a BigchainDB Event Stream API and we welcome your feedback. See Tag name: v0.8.2 Fix spend input twice in same transaction (https://github.com/bigchaindb/bigchaindb/issues/1099). Tag name: v0.8.1 Upgrade pysha3 to 1.0.0 (supports official NIST standard). Workaround for rapidjson problem with package metadata extraction (https://github.com/kenrobbins/python-rapidjson/pull/52). Tag name: v0.8.0 The big new thing in version 0.8.0 is support for divisible assets, i.e. assets like carrots or thumbtacks, where the initial CREATE transaction can register/create some amount (e.g. 542 carrots), the first TRANSFER transaction can split that amount across multiple owners, and so on. Wrote a formal schema for the JSON structure of transactions. New configuration parameter: `backlogreassigndelay`. CREATE transactions must now be signed by all `owners_before` (rather than by a federation node). The user-provided timestamp was removed from the transaction data model (schema). `get_transaction()` will now return a transaction from the backlog, even if there are copies of the transaction in invalid blocks. Several pull requests to introduce a generalized database interface, to move RethinkDB calls into a separate implementation of that interface, and to work on a new MongoDB implementation of that interface. Pull Requests , , , , , Renamed "verifying key" to "public key". Renamed "signing key" to "private key". Renamed "vk" to "pk". `gettransactionbyassetid` now ignores invalid transactions. `gettransactionbymetadataid` now ignores invalid transactions. Updates to the configs and scripts for deploying a test network on AWS. The example config file deploys virtual machines running Ubuntu 16.04 now. Pull Requests , Changed logging of transactions on block creation so now it just says the length of the list of transactions, rather than listing all the transactions. Equality checks with AssetLinks. Bug in `bigchaindb load`. Two issues found with timestamp indexes. Hard-coded `backlogreassigndelay`. Race condition in `teststalemonitor.py`. When creating a signed vote, decode the vote signature to a `str`. Bug in AWS deployment scripts. Setting `BINDHTTPTO_LOCALHOST` to `False` didn't actually work. It does now. @najlachamseddine - @ChristianGaertner - @MinchinWeb - @ckeyer - @ChristianGaertner added a Python style checker (Flake8) to Travis CI, so external contributors should be aware that the Python code in their pull requests will be checked. See . Several additions and changes to the documentation, e.g. Pull Requests , , , , , , , , , , , , , , Tag name:

= commit: 2dd7f1af27478c529e6d2d916f64daa3fbda3885 committed: Oct 28, 2016, 4:00 PM GMT+2 Stale transactions in the `backlog` table now get reassigned to another node (for inclusion in a new block): Many improvements to make the database connection more robust: The new `--dev-allow-temp-keypair` option on `bigchaindb start` will generate a temporary keypair if no keypair is found. The `Dockerfile` was updated to use this. The AWS deployment scripts now allow you to: specify the AWS security group as a configuration parameter: tell RethinkDB to bind HTTP to localhost (a more secure setup; now the default in the example config file): Integrated the new `Transaction` model. This was a big change; 49 files changed. Merged "common" code (used by BigchainDB Server and the Python driver), which used to be in its own repository (`bigchaindb/bigchaindb-common`), into the main `bigchaindb/bigchaindb` repository (this one): Integrated the new digital asset model. This changed the data structure of a transaction and will make it easier to support divisible assets in the future. Transactions are now deleted from the `backlog` table after a block containing them is written to the `bigchain` table: Changed the example AWS deployment configuration file: Support for version 0.5.0 of the `cryptoconditions` Python package. Note that this means you must now install `ffi.h` (e.g. `sudo apt-get install libffi-dev` on Ubuntu). See Pull Requests and Updated some database access code: Pull Requests and Internally, when a transaction is in the `backlog` table, it carries some extra book-keeping fields: an `assignment_timestamp` (i.e. the time when it was assigned to a node), which is used to determine if it has gone stale. an `assignee`: the public key of the node it was assigned to. The `assignment_timestamp` wasn't removed before writing the transaction to a block. That was fixed in The `assignment_timestamp` and `assignee` weren't removed in the response to an HTTP API request sent to the `/api/v1/transactions/<txid>` endpoint. That was fixed in When validating a TRANSFER transaction, if any fulfillment refers to a transaction that's not in a valid block, then the transaction isn't valid. This wasn't checked before but it is now. @MinchinWeb - We made a small change to how we do version labeling. Going forward, we will have the version label set to 0.X.Y.dev in the master branch as we work on what will eventually be released as version 0.X.Y. The version number will only be changed to 0.X.Y just before the release. This version labeling scheme began with Several additions and changes to the documentation, e.g. Pull Requests , , , , , , , , , , , , , , , , , , , , , , , , , , and more Tag name: v0.6.0 = commit: bfc86e0295c7d1ef0acd3c275c125798bd5b0dfd committed: Sep 1, 2016, 2:15 PM GMT+2 Support for multiple operations in the ChangeFeed class: Instructions, templates and code for deploying a starter node on AWS using Terraform and Ansible: Pull Requests , , , , Check that the majority of votes on a block agree on the previous block. If they don't, consider the block

Set RethinkDB `read-mode='majority'` everywhere: Ported election logic and voting logic to the new pipeline architecture: Pull Requests and Moved the transaction (model) `version` inside the `transaction` (in the transaction data model): Changed how the BigchainDB config file (JSON) gets written so it's easier for humans to read: Improved and expanded the GET/POST endpoints for transactions (in the HTTP API): Changed the AWS cluster deployment scripts so that the deployer now generates their keypair locally, rather than having Amazon do it: When a transaction is retrieved by `get_transaction`, a `validity` field is added with a value one of `valid`, `undecided`, or `backlog`: Renamed `currentowners` and `newowners` (in the data models) to `ownersbefore` and `ownersafter`, respectively (i.e. before/after the transaction): Use `flask_restful` and class-based views for realizing the HTTP API: Fixed the confusing error message when there was a syntax error in the BigchainDB config file: Fixed `write_transaction` so it no longer has the side effect of adding `assignee` to a transaction that is being processed: @eladve - @d01phin - Pull Requests and @Kentoseth - Several additions and changes to the documentation, e.g. Pull Requests , , , , , and more Tag name: v0.5.1 = commit: ff042b5954abe48c7264d43128d52584eab2a806 committed: Jul 29, 2016, 2:38 PM GMT+2 New third table, the 'votes' table: Added `gettxbypayloaduuid()` including index: Ability to deploy a test cluster on AWS using Amazon Elastic Block Store (EBS) for storage: Ability to add different-size payloads to transactions when filling the backlog for benchmarking: Votes are no longer appended to the blocks inside the 'bigchain' table. They're now written to their own table, the 'votes' table: Refactored how blocks get constructed using the new approach to doing multiprocessing, using the `multipipes` package: Changed all queries to use `read_mode='majority'`: Revised how base software gets deployed on AWS instances: Refactored `db.utils.init()`: @shauns - @lonelypeanut - @lluminita - Pull Requests & Several additions and changes to the documentation: Pull Requests , , , , , , , , , , , , , , Tag name: v0.5.0 = commit: 38329531304952128b48f2e5603db5fa08069c26 committed: July 4, 2016, 1:07 PM GMT+2 New `bigchaindb set-replicas` subcommand: Informative JSON message when one makes a request to the root endpoint of the HTTP client-server API: Return HTTP response code 404 when a transaction is not found: Changed the order in which configuration settings get their values. If a setting is set by an environment variable, then that value will be the value, regardless of whether another value is set in a local config file. Also added a method to programattically update the config settings. Changed the definition of `util.sign_tx()`. It now has a third, optional argument: a Bigchain instance. Several additions and changes to the documentation: Pull Requests , , , , , , Tag name: v0.4.2 = commit: 7ce6c3980cf70437d7ce716a67f069afa8ecb79e committed: June 15, 2016, 1:42 PM GMT+2 Report the BigchainDB version number when starting BigchainDB: Round timestamps to a precision of one second, and replace payload hash with payload UUID in transactions: Updated cryptoconditions API usage: Tag name: v0.4.1 = commit: 9c4aa987bcbc294b6a5c3069e6c45a7ed77a4068 committed: June 13, 2016, 9:52 AM GMT+2 Revert `bigchain` deletes: Use inverted threshold condition instead of negative weights for escrow: Removed duplicate `pytest` in `setup.py`: There were several additions and changes to the documentation: Pull Requests , , , , , Tag name: v0.4.0 = commit: a89399c4f9fcdf82df73e0d8191af9e539d8d081 committed: May 27, 2016, 1:42 PM GMT+2 Support for escrow (possible because of two other new things: cryptoconditions with inverters, and a timeout condition): Caching of calls to `loadconsensusplugin()`, using . This speeds up the instantiation of `Bigchain` objects and greatly improves overall

New `Dockerfile-dev` Docker file to make it easier for developers to develop BigchainDB with Docker. One can run all unit tests with Docker again. Transactions in invalid blocks are copied to the backlog: . Queries to the bigchain table now ignore invalid blocks: Use secondary index on get_transaction: New `bigchaindb` command to set the number of RethinkDB shards (in both tables): Better handling of an outdated `setuptools`: The block processes now use GroupProcess: Replaced the `json` Python package with `rapidjson` (a Python wrapper for a fast JSON parser/generator written in C++), to speed up JSON serialization and deserialization: Overhauled `ROADMAP.md` and moved it to : Pull Requests , , , AWS deployment has better support for : AWS deployment script now reads from a configuration file: AWS deployment script doesn't auto-start the BigchainDB servers anymore: Bug related to transaction malleability: You can now see a big-picture view of all BigchainDB repositories on . Tag name: v0.3.0 = commit: a97c54e82be954a1411e5bfe0f09a9c631309f1e committed: May 3, 2016, 11:52 AM GMT+2 Crypto-conditions specs according to the Interledger protocol: Added support for anonymous hashlocked conditions and fulfillments: Several improvements to the AWS deployment scripts: Bug related to block validation: This release completely refactored the structure of the transactions and broke compatibility with older versions of BigchainDB. The refactor of the transactions was made in order to add support for multiple inputs/outputs and the crypto-conditions specs from the Interledger protocol. We also updated the RethinkDB Python drivers so you need to upgrade to RethinkDB v2.3+ Tag name: v0.2.0 = commit: 0c4a2b380aabdcf50fa2d7fb351c290aaedc3db7 committed: April 26, 2016, 11:09 AM GMT+2 Ability to use environment variables to set (or partially set) configuration settings: `bigchaindb --export-my-pubkey`: `bigchaindb --version`, and one central source for the current version (`version.py`): AWS deployment scripts: Pull Requests , , , `codecov.yml`: `CHANGELOG.md` (this file): Signatures using Ed25519: Pull Requests , Multisig support: HTTP Server & Web API: Pull Requests , , , Python driver/SDK/API: Python Style Guide: Monitoring & dashboard tools: Pull Requests , Rewrote into four sets of links: Pull Requests and Bug related to config overwrite: Bug related to running the `bigchaindb-benchmark load` on docker : Pull Requests , : Tag name: v0.1.5 = commit: 9f62cddbaf44167692cfee71db707bce93e3395f committed: April 20, 2016, 3:31 PM GMT+2 (Voter is not validating blocks correctly when checking for double spends) in Tag name: v0.1.4 = commit: c4c850f480bc9ae72df2a54f81c0825b6fb4ed62 committed: Feb 22, 2016, 11:51 AM GMT+1 Added to `classifiers` to setup.py Allow running pytest tests in parallel (using ): Allow non-interactive first start: to resolve Tag name: v0.1.3 = commit 8926e3216c1ee39b9bc332e5ef1df2a8901262dd committed Feb 16, 2016, 11:37 AM GMT+1 Changed from using Git Flow to GitHub flow (but with `develop` as the default branch). Tag name: v0.1.2 = commit d2ff24166d69dda68dd7b4a24a88279b1d37e222 committed Feb 15, 2016, 2:23 PM GMT+1 Various tests Fix exception when running `start`: resolved [Issue #35] Tag name: v0.1.1 = commit 2a025448b29fe7056760de1039c73bbcfe992461 committed Feb 15, 2016, 10:48 AM GMT+1 "release 0.1.1": `tox.ini` `requirements.txt` in the root directory, and the entire `requirements/` directory: Hotfix for AttributeError, fixed Tag name: v0.1.0 = commit 8539e8dc2d036a4e0a866a3fb9e55889503254d5 committed Feb 10, 2016, 10:04 PM GMT+1 The first public release of BigchainDB, including: Initial BigchainDB Server code, including many tests and some code for benchmarking. Initial documentation (in `bigchaindb/docs`). Initial `README.md`, `ROADMAP.md`, `CODEOFCONDUCT.md`, and `CONTRIBUTING.md`. Packaging for PyPI, including `setup.py` and `setup.cfg`. Initial `Dockerfile` and `docker-compose.yml` (for deployment using Docker and Docker Compose). Initial `.gitignore` (list of things for git to ignore). Initial `.travis.yml` (used by Travis CI).