{"action":"created","comment":{"url":"https://api.github.com/repos/corda/corda/pulls/comments/243315191","pull_request_review_id":187052204,"id":243315191,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0MzMxNTE5MQ==","diff_hunk":"@@ -1,995 +1,268 @@\n-Release notes\n-=============\n+Release notes for Corda 4\n+=========================\n \n .. _release_notes_v4_0:\n \n-Release 4.0 (Unreleased)\n-------------------------\n-\n-Significant Changes in 4.0\n-~~~~~~~~~~~~~~~~~~~~~~~~~~\n-\n-* **Retirement of non-elliptic Diffie-Hellman for TLS**\n-  The TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 family of ciphers is retired from the list of allowed ciphers for TLS\n-  as it is a legacy cipher family not supported by all native SSL/TLS implementations.\n-\n-* **Reference states**:\n-\n-  Introduced the concept of \"reference input states\". A reference input state is a ``ContractState`` which can be referred\n-  to in a transaction by the contracts of input and output states but whose contract is not executed as part of the\n-  transaction verification process and is not consumed when the transaction is committed to the ledger but is checked\n-  for \"current-ness\". In other words, the contract logic isn't run for the referencing transaction only. It's still a\n-  normal state when it occurs in an input or output position.\n-\n-* **Added auto-acceptance for network parameters updates**\n-  Added auto-accepting for a subset of network parameters, negating the need for a node operator to manually run an accept\n-  command on every parameter update. This behaviour can be turned off via the node configuration.\n-\n-* **CorDapp JAR Signing and Sealing**:\n-\n-  CorDapps built by corda-gradle-plugins are now signed and sealed JAR files.\n-  Signing can be configured or disabled, and it defaults to using the Corda development certificate.\n-  Signed CorDapps facilitate signature constraints checks.\n-  Sealed JARs require a unique package to be shipped within a single CorDapp JAR. Sealing can be disabled.\n-\n-<< MORE TO COME >>\n-\n-.. _release_notes_v3_3:\n-\n-Release 3.3\n------------\n-\n-Corda 3.3 brings together many small improvements, fixes, and community contributions to deliver a stable and polished release\n-of Corda. Where both the 3.1 and 3.2 releases delivered a smaller number of critical bug fixes addressing immediate and impactful error conditions, 3.3\n-addresses a much greater number of issues, both small and large, that have been found and fixed since the release of 3.0 back in March. Rolling up a great\n-many improvements and polish to truly make the Corda experience just that much better.\n-\n-In addition to work undertaken by the main Corda development team, we've taken the opportunity in 3.3 to bring back many of the contributions made\n-by community members from master onto the currently released stable branch. It has been said many times before, but the community and its members\n-are the real life-blood of Corda and anyone who takes the time to contribute is a star in our eyes. Bringing that code into the current version we hope\n-gives people the opportunity to see their work in action, and to help their fellow community members by having these contributions available in a\n-supported release.\n-\n-Changes of Note\n-~~~~~~~~~~~~~~~\n-\n-* **Serialization fixes**\n-\n-  Things \"in the lab\" always work so much better than they do in the wild, where everything you didn't think of is thrown at your code and a mockery\n-  is made of some dearly held assumptions.  A great example of this is the serialization framework which delivers Corda's wire stability guarantee\n-  that was introduced in 3.0 and has subsequently been put to a rigorous test by our users. Corda 3.3 consolidates a great many fixes in that framework,\n-  both programmatically in terms of fixing bugs, but also in the documentation, hopefully making things clearer and easier to work with.\n-\n-* **Certificate Hierarchy**\n-\n-  After consultation, collaboration, and discussion with industry experts, we have decided to alter the default Certificate Hierarchy (PKI) utilized by\n-  Corda and the Corda Network. To facilitate this, the nodes have had their certificate path verification logic made much more flexible. All existing\n-  certificate hierarchy, certificates, and networks will remain valid. The possibility now exists for nodes to recognize a deeper certificate chain and\n-  thus Compatibility Zone operators can deploy and adhere to the PKI standards they expect and are comfortable with.\n-\n-  Practically speaking, the old code assumed a 3-level hierarchy of Root -> Intermediate CA (Doorman) -> Node, and this was hard coded. From 3.3 onward an\n-  arbitrary depth of certificate chain is supported. For the Corda Network, this means the introduction of an intermediate layer between the root and the\n-  signing certificates (Network Map and Doorman). This has the effect of allowing the root certificate to *always* be kept offline and never retrieved or\n-  used. Those new intermediate certificates can be used to generate, if ever needed, new signing certs without risking compromise of the root key.\n-\n-Special Thanks\n-~~~~~~~~~~~~~~\n-\n-The Corda community is a vibrant and exciting ecosystem that spreads far outside the virtual walls of the\n-R3 organisation. Without that community, and the most welcome contributions of its members, the Corda project\n-would be a much poorer place.\n-\n-We're therefore happy to extend thanks to the following members of that community for their contributions\n-\n-  * `Dan Newton <https://github.com/lankydan>`_ for a fix to cleanup node registration in the test framework. The changes can be found `here <https://github.com/corda/corda/commit/599aa709dd025a56e2c295cc9225ba2ee5b0fc9c>`_.\n-  * `Tushar Singh Bora <https://github.com/kid101>`_ for a number of `documentation tweaks <https://github.com/corda/corda/commit/279b8deaa6e1045fa4890ef179ee9a41c8a6406b>`_. In addition, some updates to the tutorial documentation `here <https://github.com/corda/corda/commit/37656a58f5fd6cad7a2fa1c08e887777b375cedd>`_.\n-  * `Jiachuan Li <https://github.com/lijiachuan1982>`_ for a number of corrections to our documentation. Those contributions can be found `here <https://github.com/corda/corda/commit/83a09885172f22ad4e03909d942b473bccb4e228>`_ and `here <https://github.com/corda/corda/commit/f23f2ee6966cf46a3f8b598e868393f9f2e610e7>`_.\n-  * `Yogesh <https://github.com/acetheultimate>`_ for a documentation tweak that can be see `here <https://github.com/corda/corda/commit/07e3ff502f620d5201a29cf12f686b50cd1cb17c>`_.\n-  * `Roman Plášil <https://github.com/Quiark>`_ for speeding up node shutdown when connecting to an http network map. This fix can be found `here <https://github.com/corda/corda/commit/ec1e40109d85d495b84cf4307fb8a7e34536f1d9>`_.\n-  * `renlulu <https://github.com/renlulu>`_ for a small `PR <https://github.com/corda/corda/commit/cda7c292437e228bd8df5c800f711d45a3d743e1>`_ to optimize some of the imports.\n-  * `cxyzhang0 <https://github.com/cxyzhang0>`_ for making the ``IdentitySyncFlow`` more useful. See `here <https://github.com/corda/corda/commit/a86c79e40ca15a8b95380608be81fe338d82b141>`_.\n-  * `Venelin Stoykov <https://github.com/vstoykov>`_ with updates to the `documentation <https://github.com/corda/corda/commit/4def8395b3bd100b2b0a3d2eecef5e20f0ec7f47>`_ around the progress tracker.\n-  * `Mohamed Amine Legheraba <https://github.com/MohamedLEGH>`_ for updates to the Azure documentation that can be seen `here <https://github.com/corda/corda/commit/14e9bf100d0b0236f65ee4ffd778f32307b9e519>`_.\n-  * `Stanly Johnson <https://github.com/stanly-johnson>`_ with a `fix <https://github.com/corda/corda/commit/f9a9bb19a7cc6d202446890e4e11bebd4a118cf3>`_ to the network bootstrapper.\n-  * `Tittu Varghese <https://github.com/tittuvarghese>`_ for adding a favicon to the docsite. This commit can be found `here <https://github.com/corda/corda/commit/cd8988865599261db45505060735880c3066792e>`_\n-\n-Issues Fixed\n-~~~~~~~~~~~~\n-\n-* Refactoring ``DigitalSignatureWithCertPath`` for more performant storing of the certificate chain. [`CORDA-1995 <https://r3-cev.atlassian.net/browse/CORDA-1995>`_]\n-* The serializers class carpenter fails when superclass has double-size primitive field. [`Corda-1945 <https://r3-cev.atlassian.net/browse/Corda-1945>`_]\n-* If a second identity is mistakenly created the node will not start. [`CORDA-1811 <https://r3-cev.atlassian.net/browse/CORDA-1811>`_]\n-* Demobench profile load fails with stack dump. [`CORDA-1948 <https://r3-cev.atlassian.net/browse/CORDA-1948>`_]\n-* Deletes of NodeInfo can fail to propagate leading to infinite retries. [`CORDA-2029 <https://r3-cev.atlassian.net/browse/CORDA-2029>`_]\n-* Copy all the certificates from the network-trust-store.jks file to the node's trust store. [`CORDA-2012 <https://r3-cev.atlassian.net/browse/CORDA-2012>`_]\n-* Add SNI (Server Name Indication) header to TLS connections. [`CORDA-2001 <https://r3-cev.atlassian.net/browse/CORDA-2001>`_]\n-* Fix duplicate index declaration in the Cash schema. [`CORDA-1952 <https://r3-cev.atlassian.net/browse/CORDA-1952>`_]\n-* Hello World Tutorial Page mismatch between code sample and explanatory text. [`CORDA-1950 <https://r3-cev.atlassian.net/browse/CORDA-1950>`_]\n-* Java Instructions to Invoke Hello World CorDapp are incorrect. [`CORDA-1949 <https://r3-cev.atlassian.net/browse/CORDA-1949>`_]\n-* Add ``VersionInfo`` to the ``NodeInfo`` submission request to the network map element of the Compatibility Zone. [`CORDA-1938 <https://r3-cev.atlassian.net/browse/CORDA-1938>`_]\n-* Rename current INTERMEDIATE_CA certificate role to DOORMAN_CA certificate role. [`CORDA-1934 <https://r3-cev.atlassian.net/browse/CORDA-1934>`_]\n-* Make node-side network map verification agnostic to the certificate hierarchy. [`CORDA-1932 <https://r3-cev.atlassian.net/browse/CORDA-1932>`_]\n-* Corda Shell incorrectly deserializes generic types as raw types. [`CORDA-1907 <https://r3-cev.atlassian.net/browse/CORDA-1907>`_]\n-* The Corda web server does not support asynchronous servlets. [`CORDA-1906 <https://r3-cev.atlassian.net/browse/CORDA-1906>`_]\n-* Amount<T> is deserialized from JSON and YAML as Amount<Currency>, for all values of T. [`CORDA-1905 <https://r3-cev.atlassian.net/browse/CORDA-1905>`_]\n-* ``NodeVaultService.loadStates`` queries without a ``PageSpecification`` property set. This leads to issues with large transactions. [`CORDA-1895 <https://r3-cev.atlassian.net/browse/CORDA-1895>`_]\n-* If a node has two flows, where one's name is a longer version of the other's, they cannot be started [`CORDA-1892 <https://r3-cev.atlassian.net/browse/CORDA-1892>`_]\n-* Vault Queries across ``LinearStates`` and ``FungibleState`` tables return incorrect results. [`CORDA-1888 <https://r3-cev.atlassian.net/browse/CORDA-1888>`_]\n-* Checking the version of the Corda jar file by executing the jar with the ``--version`` flag without specifying a valid node configuration file causes an exception to be thrown. [`CORDA-1884 <https://r3-cev.atlassian.net/browse/CORDA-1884>`_]\n-* RPC deadlocks after a node restart. [`CORDA-1875 <https://r3-cev.atlassian.net/browse/CORDA-1875>`_]\n-* Vault query fails to find a state if it extends some class (``ContractState``) and it is that base class that is used as the predicate (``vaultService.queryBy<I>()``). [`CORDA-1858 <https://r3-cev.atlassian.net/browse/CORDA-1858>`_]\n-* Missing unconsumed states from linear id when querying vault caused by a the previous transaction failing with an SQL exception. [`CORDA-1847 <https://r3-cev.atlassian.net/browse/CORDA-1847>`_]\n-* Inconsistency in how a web path is written. [`CORDA-1841 <https://r3-cev.atlassian.net/browse/CORDA-1841>`_]\n-* Cannot use ``TestIdentities`` with same organization name in ``net.corda.testing.driver.Driver``. [`CORDA-1837 <https://r3-cev.atlassian.net/browse/CORDA-1837>`_]\n-* Docs page typos. [`CORDA-1834 <https://r3-cev.atlassian.net/browse/CORDA-1834>`_]\n-* Adding flexibility to the serialization frameworks unit tests support and utility code. [`CORDA-1808 <https://r3-cev.atlassian.net/browse/CORDA-1808>`_]\n-* Cannot use ``--initial-registration`` with the ``networkServices`` configuration option in place of the older ``compatibilityzone`` option within ``node.conf``. [`CORDA-1789 <https://r3-cev.atlassian.net/browse/CORDA-1789>`_]\n-* Document more clearly the supported version of both IntelliJ and the IntelliJ Kotlin Plugins. [`CORDA-1727 <https://r3-cev.atlassian.net/browse/CORDA-1727>`_]\n-* DemoBench's \"Launch Explorer\" button is not re-enabled when you close Node Explorer. [`CORDA-1686 <https://r3-cev.atlassian.net/browse/CORDA-1686>`_]\n-* It is not possible to run ``stateMachinesSnapshot`` from the shell. [`CORDA-1681 <https://r3-cev.atlassian.net/browse/CORDA-1681>`_]\n-* Node won't start if CorDapps generate states prior to deletion [`CORDA-1663 <https://r3-cev.atlassian.net/browse/CORDA-1663>`_]\n-* Serializer Evolution breaks with Java classes adding nullable properties. [`CORDA-1662 <https://r3-cev.atlassian.net/browse/CORDA-1662>`_]\n-* Add Java examples for the creation of proxy serializers to complement the existing kotlin ones. [`CORDA-1641 <https://r3-cev.atlassian.net/browse/CORDA-1641>`_]\n-* Proxy serializer documentation isn't clear on how to write a proxy serializer. [`CORDA-1640 <https://r3-cev.atlassian.net/browse/CORDA-1640>`_]\n-* Node crashes in ``--initial-registration`` polling mode if doorman returns a transient HTTP error. [`CORDA-1638 <https://r3-cev.atlassian.net/browse/CORDA-1638>`_]\n-* Nodes started by gradle task are not stopped when the gradle task exits. [`CORDA-1634 <https://r3-cev.atlassian.net/browse/CORDA-1634>`_]\n-* Notarizations time out if notary doesn't have up-to-date network map. [`CORDA-1628 <https://r3-cev.atlassian.net/browse/CORDA-1628>`_]\n-* Node explorer: Improve error handling when connection to nodes cannot be established. [`CORDA-1617 <https://r3-cev.atlassian.net/browse/CORDA-1617>`_]\n-* Validating notary fails to resolve an attachment. [`CORDA-1588 <https://r3-cev.atlassian.net/browse/CORDA-1588>`_]\n-* Out of process nodes started by the driver do not log to file. [`CORDA-1575 <https://r3-cev.atlassian.net/browse/CORDA-1575>`_]\n-* Once ``--initial-registration`` has been passed to a node, further restarts should assume that mode until a cert is collected. [`CORDA-1572 <https://r3-cev.atlassian.net/browse/CORDA-1572>`_]\n-* An array of primitive byte arrays (an array of arrays) won't deserialize in a virgin factory (i.e. one that didn't build the serializer for serialization). [`CORDA-1545 <https://r3-cev.atlassian.net/browse/CORDA-1545>`_]\n-* Ctrl-C in the shell fails to aborts the flow. [`CORDA-1542 <https://r3-cev.atlassian.net/browse/CORDA-1542>`_]\n-* One transaction with two identical cash outputs cannot be save in the vault. [`CORDA-1535 <https://r3-cev.atlassian.net/browse/CORDA-1535>`_]\n-* The unit tests for the enum evolver functionality cannot be regenerated. This is because verification logic added after their initial creation has a bug that incorrectly identifies a cycle in the graph. [`CORDA-1498 <https://r3-cev.atlassian.net/browse/CORDA-1498>`_]\n-* Add in a safety check that catches flow checkpoints from older versions. [`CORDA-1477 <https://r3-cev.atlassian.net/browse/CORDA-1477>`_]\n-* Buggy ``CommodityContract`` issuance logic. [`CORDA-1459 <https://r3-cev.atlassian.net/browse/CORDA-1459>`_]\n-* Error in the process-id deletion process allows multiple instances of the same node to be run. [`CORDA-1455 <https://r3-cev.atlassian.net/browse/CORDA-1455>`_]\n-* Node crashes if network map returns HTTP 50X error. [`CORDA-1414 <https://r3-cev.atlassian.net/browse/CORDA-1414>`_]\n-* Delegate Property doesn't serialize, throws an erroneous type mismatch error. [`CORDA-1403 <https://r3-cev.atlassian.net/browse/CORDA-1403>`_]\n-* If a vault query throws an exception, the stack trace is swallowed. [`CORDA-1397 <https://r3-cev.atlassian.net/browse/CORDA-1397>`_]\n-* Node can fail to fully start when a port conflict occurs, no useful error message is generated when this occurs. [`CORDA-1394 <https://r3-cev.atlassian.net/browse/CORDA-1394>`_]\n-* Running the ``deployNodes`` gradle task back to back without a clean doesn't work. [`CORDA-1389 <https://r3-cev.atlassian.net/browse/CORDA-1389>`_]\n-* Stripping issuer from Amount<Issued<T>> does not preserve ``displayTokenSize``. [`CORDA-1386 <https://r3-cev.atlassian.net/browse/CORDA-1386>`_]\n-* ``CordaServices`` are instantiated multiple times per Party when using ``NodeDriver``. [`CORDA-1385 <https://r3-cev.atlassian.net/browse/CORDA-1385>`_]\n-* Out of memory errors can be seen when using Demobench + Explorer. [`CORDA-1356 <https://r3-cev.atlassian.net/browse/CORDA-1356>`_]\n-* Reduce the amount of classpath scanning during integration tests execution. [`CORDA-1355 <https://r3-cev.atlassian.net/browse/CORDA-1355>`_]\n-* SIMM demo throws \"attachment too big\" errors. [`CORDA-1346 <https://r3-cev.atlassian.net/browse/CORDA-1346>`_]\n-* Fix vault query paging example in ``ScheduledFlowTests``. [`CORDA-1344 <https://r3-cev.atlassian.net/browse/CORDA-1344>`_]\n-* The shell doesn't print the return value of a started flow. [`CORDA-1342 <https://r3-cev.atlassian.net/browse/CORDA-1342>`_]\n-* Provide access to database transactions for CorDapp developers. [`CORDA-1341 <https://r3-cev.atlassian.net/browse/CORDA-1341>`_]\n-* Error with ``VaultQuery`` for entity inheriting from ``CommonSchemaV1.FungibleState``. [`CORDA-1338 <https://r3-cev.atlassian.net/browse/CORDA-1338>`_]\n-* The ``--network-root-truststore`` command line option not defaulted. [`CORDA-1317 <https://r3-cev.atlassian.net/browse/CORDA-1317>`_]\n-* Java example in \"Upgrading CorDapps\" documentation is wrong. [`CORDA-1315 <https://r3-cev.atlassian.net/browse/CORDA-1315>`_]\n-* Remove references to ``registerInitiatedFlow`` in testing documentation as it is not needed. [`CORDA-1304 <https://r3-cev.atlassian.net/browse/CORDA-1304>`_]\n-* Regression: Recording a duplicate transaction attempts second insert to vault. [`CORDA-1303 <https://r3-cev.atlassian.net/browse/CORDA-1303>`_]\n-* Columns in the Corda database schema should have correct NULL/NOT NULL constraints. [`CORDA-1297 <https://r3-cev.atlassian.net/browse/CORDA-1297>`_]\n-* MockNetwork/Node API needs a way to register ``@CordaService`` objects. [`CORDA-1292 <https://r3-cev.atlassian.net/browse/CORDA-1292>`_]\n-* Deleting a ``NodeInfo`` from the additional-node-infos directory should remove it from cache. [`CORDA-1093 <https://r3-cev.atlassian.net/browse/CORDA-1093>`_]\n-* ``FailNodeOnNotMigratedAttachmentContractsTableNameTests`` is sometimes failing with database constraint \"Notary\" is null. [`CORDA-1976 <https://r3-cev.atlassian.net/browse/CORDA-1976>`_]\n-* Revert keys for DEV certificates. [`CORDA-1661 <https://r3-cev.atlassian.net/browse/CORDA-1661>`_]\n-* Node Info file watcher should block and load ``NodeInfo`` when node startup. [`CORDA-1604 <https://r3-cev.atlassian.net/browse/CORDA-1604>`_]\n-* Improved logging of the network parameters update process. [`CORDA-1405 <https://r3-cev.atlassian.net/browse/CORDA-1405>`_]\n-* Ensure all conditions in cash selection query are tested. [`CORDA-1266 <https://r3-cev.atlassian.net/browse/CORDA-1266>`_]\n-* ``NodeVaultService`` bug. Start node, issue cash, stop node, start node, ``getCashBalances()`` will not show any cash\n-* A Corda node doesn't re-select cluster from HA Notary.\n-* Event Horizon is not wire compatible with older network parameters objects.\n-* Notary unable to resolve Party after processing a flow from same Party.\n-* Misleading error message shown when a node is restarted after a flag day event.\n-\n-.. _release_notes_v3_2:\n-\n-Release 3.2\n------------\n-\n-As we see more Corda deployments in production this minor release of the open source platform brings\n-several fixes that make it easier for a node to join Corda networks broader than those used when\n-operating as part of an internal testing deployment. This will ensure Corda nodes will be free to interact\n-with upcoming network offerings from R3 and others who may make broad-access Corda networks available.\n-\n-* **The Corda Network Builder**\n-\n-To make it easier to create more dynamic, flexible, networks for testing and deployment,\n-with the 3.2 release of Corda we are shipping a graphical network bootsrapping tool (see :doc:`network-builder`)\n-to facilitate the simple creation of more dynamic ad hoc dev-mode environments.\n-\n-Using a graphical interface you can dynamically create and alter Corda test networks, adding\n-nodes and CorDapps with the click of a button! Additionally, you can leverage its integration\n-with Azure cloud services for remote hosting of Nodes and Docker instances for local testing.\n-\n-* **Split Compatibility Zone**\n-\n-Prior to this release compatibility zone membership was denoted with a single configuration setting\n-\n-.. sourcecode:: shell\n-\n-    compatibilityZoneURL : \"http://<host>(:<port>)\"\n-\n-That would indicate both the location of the Doorman service the node should use for registration\n-of its identity as well as the Network Map service where it would publish its signed Node Info and\n-retrieve the Network Map.\n-\n-Compatibility Zones can now, however, be configured with the two disparate services, Doorman and\n-Network Map, running on different URLs. If the compatibility zone your node is connecting to\n-is configured in this manner, the new configuration looks as follows.\n-\n-.. sourcecode:: shell\n-\n-    networkServices {\n-        doormanURL: \"http://<host>(:<port>)\"\n-        networkMapURL: \"http://<host>(:<port>)\"\n-    }\n-\n-.. note:: The ``compatibilityZoneURL`` setting should be considered deprecated in favour of the new\n-    ``networkServices`` settings group.\n-\n-* **The Blob Inspector**\n-\n-The blob inspector brings the ability to unpack serialized Corda blobs at the\n-command line, giving a human readable interpretation of the encoded date.\n-\n-.. note:: This tool has been shipped as a separate Jar previously. We are now including it\n-    as part of an official release.\n-\n-Documentation on its use can be found here :doc:`blob-inspector`\n-\n-* **The Event Horizon**\n-\n-One part of joining a node to a Corda network is agreeing to the rules that govern that network as set out\n-by the network operator. A node's membership of a network is communicated to other nodes through the network\n-map, the service to which the node will have published its Node Info, and through which it receives the\n-set of NodeInfos currently present on the network. Membership of that list is a finite thing determined by\n-the network operator.\n-\n-Periodically a node will republish its NodeInfo to the Network Map service. The Network Map uses this as a\n-heartbeat to determine the status of nodes registered with it. Those that don't \"beep\" within the\n-determined interval are removed from the list of registered nodes. The ``Event Horizon`` network parameter\n-sets the upper limit within which a node must respond or be considered inactive.\n-\n-.. important:: This does not mean a node is unregistered from the Doorman, only that its NodeInfo is\n-    removed from the Network Map. Should the node come back online it will be re-added to the published\n-    set of NodeInfos\n+Here we are, 9 months and 1500 plus commits later... and it's a bouncing baby software release!\n \n-Issues Fixed\n-~~~~~~~~~~~~\n+We are really proud to release Corda 4 to the open source community today. It's been a long time in\n+the making, but we think you'll agree worth the wait.\n \n-* Update Jolokia to a more secure version [`CORDA-1744 <https://r3-cev.atlassian.net/browse/CORDA-1744>`_]\n-* Add the Blob Inspector [`CORDA-1709 <https://r3-cev.atlassian.net/browse/CORDA-1709>`_]\n-* Add support for the ``Event Horizon`` Network Parameter [`CORDA-866 <https://r3-cev.atlassian.net/browse/CORDA-866>`_]\n-* Add the Network Bootstrapper [`CORDA-1717 <https://r3-cev.atlassian.net/browse/CORDA-1717>`_]\n-* Fixes for the finance CordApp[`CORDA-1711 <https://r3-cev.atlassian.net/browse/CORDA-1711>`_]\n-* Allow Doorman and NetworkMap to be configured independently [`CORDA-1510 <https://r3-cev.atlassian.net/browse/CORDA-1510>`_]\n-* Serialization fix for generics when evolving a class [`CORDA-1530  <https://r3-cev.atlassian.net/browse/CORDA-1530>`_]\n-* Correct typo in an internal database table name [`CORDA-1499 <https://r3-cev.atlassian.net/browse/CORDA-1499>`_] and [`CORDA-1804 <https://r3-cev.atlassian.net/browse/CORDA-1804>`_]\n-* Hibernate session not flushed before handing over raw JDBC session to user code [`CORDA-1548 <https://r3-cev.atlassian.net/browse/CORDA-1548>`_]\n-* Fix Postgres db bloat issue [`CORDA-1812  <https://r3-cev.atlassian.net/browse/CORDA-1812>`_]\n-* Roll back flow transaction on exception [`CORDA-1790 <https://r3-cev.atlassian.net/browse/CORDA-1790>`_]\n+Just as prior releases have brought with them commitments to wire and API stability, Corda 4\n+comes with those same guarantees. States and apps valid in Corda 3 are transparently usable in Corda 4.\n \n-.. _release_notes_v3_1:\n+.. important:: We strongly recommend reading \":doc:`app-upgrade-notes`\". This covers the upgrade procedure,\n+   along with how you can adjust your app to opt-in to new features making your app more secure and\n+   easier to upgrade.\n \n-Release 3.1\n------------\n+Additionally, be aware that the data model upgrades are changes to the Corda consensus rules. To use\n+apps that benefit from them, *all* nodes in a compatibility zone must be upgraded and the zone must be\n+enforcing that upgrade. This may take time in large zones like the testnet. Please take this into\n+account for your own schedule planning.\n \n-This rapid follow-up to Corda 3.0 corrects an issue discovered by some users of Spring Boot and a number of other\n-smaller issues discovered post release. All users are recommended to upgrade.\n+.. contents::\n \n-Special Thanks\n-~~~~~~~~~~~~~~\n+Changes for developers in Corda 4\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n \n-Without passionate and engaged users Corda would be all the poorer. As such, we are extremely grateful to\n-`Bret Lichtenwald <https://github.com/bret540>`_ for helping nail down a reproducible test case for the\n-Spring Boot issue.\n+Reference states\n+++++++++++++++++\n \n-Major Bug Fixes\n-~~~~~~~~~~~~~~~\n+With Corda 4 we are introducing the concept of \"reference input states\". These allow smart contracts\n+to read data from the ledger without simultaneously updating it. They're useful not only for any kind of\n+reference data such as rates, healthcare codes, geographical information etc, but for anywhere\n+you might have used a SELECT JOIN in a SQL based app.\n \n-* **Corda Serialization fails with \"Unknown constant pool tag\"**\n+A reference input state is a ``ContractState`` which can be referred to in a transaction by the contracts\n+of input and output states but, significantly, whose contract is not executed as part of the transaction\n+verification process and is not consumed when the transaction is committed to the ledger. Rather, it is checked\n+for \"current-ness\". In other words, the contract logic isn't run for the referencing transaction only.\n+It's still a normal state when it occurs in an input or output position.\n \n-  This issue is most often seen when running a CorDapp with a Rest API using / provided by ``Spring Boot``.\n+Signature constraints\n++++++++++++++++++++++\n \n-  The fundamental cause was ``Corda 3.0`` shipping with an out of date dependency for the\n-  `fast-classpath-scanner <https://github.com/lukehutch/fast-classpath-scanner>`_ library, where the manifesting\n-  bug was already fixed in a released version newer than our dependant one. In response, we've updated our dependent\n-  version to one including that bug fix.\n+CorDapps built by the ``corda-gradle-plugins`` are now signed and sealed JAR files by default. This","path":"docs/source/release-notes.rst","position":325,"original_position":324,"commit_id":"746db52681dcddc0b8a200f65576dab6e364dde8","original_commit_id":"c7d4c3064475544e7ab7ba17f989fe29b37e3a96","user":{"login":"mikehearn","id":971089,"node_id":"MDQ6VXNlcjk3MTA4OQ==","avatar_url":"https://avatars2.githubusercontent.com/u/971089?v=4","gravatar_id":"","url":"https://api.github.com/users/mikehearn","html_url":"https://github.com/mikehearn","followers_url":"https://api.github.com/users/mikehearn/followers","following_url":"https://api.github.com/users/mikehearn/following{/other_user}","gists_url":"https://api.github.com/users/mikehearn/gists{/gist_id}","starred_url":"https://api.github.com/users/mikehearn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikehearn/subscriptions","organizations_url":"https://api.github.com/users/mikehearn/orgs","repos_url":"https://api.github.com/users/mikehearn/repos","events_url":"https://api.github.com/users/mikehearn/events{/privacy}","received_events_url":"https://api.github.com/users/mikehearn/received_events","type":"User","site_admin":false},"body":"I added a discussion of this to the app upgrade notes.","created_at":"2018-12-20T15:35:18Z","updated_at":"2018-12-20T15:35:19Z","html_url":"https://github.com/corda/corda/pull/4445#discussion_r243315191","pull_request_url":"https://api.github.com/repos/corda/corda/pulls/4445","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/corda/corda/pulls/comments/243315191"},"html":{"href":"https://github.com/corda/corda/pull/4445#discussion_r243315191"},"pull_request":{"href":"https://api.github.com/repos/corda/corda/pulls/4445"}},"in_reply_to_id":243290838},"pull_request":{"url":"https://api.github.com/repos/corda/corda/pulls/4445","id":239922881,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM5OTIyODgx","html_url":"https://github.com/corda/corda/pull/4445","diff_url":"https://github.com/corda/corda/pull/4445.diff","patch_url":"https://github.com/corda/corda/pull/4445.patch","issue_url":"https://api.github.com/repos/corda/corda/issues/4445","number":4445,"state":"open","locked":false,"title":"Refresh release notes for Corda 4","user":{"login":"mikehearn","id":971089,"node_id":"MDQ6VXNlcjk3MTA4OQ==","avatar_url":"https://avatars2.githubusercontent.com/u/971089?v=4","gravatar_id":"","url":"https://api.github.com/users/mikehearn","html_url":"https://github.com/mikehearn","followers_url":"https://api.github.com/users/mikehearn/followers","following_url":"https://api.github.com/users/mikehearn/following{/other_user}","gists_url":"https://api.github.com/users/mikehearn/gists{/gist_id}","starred_url":"https://api.github.com/users/mikehearn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikehearn/subscriptions","organizations_url":"https://api.github.com/users/mikehearn/orgs","repos_url":"https://api.github.com/users/mikehearn/repos","events_url":"https://api.github.com/users/mikehearn/events{/privacy}","received_events_url":"https://api.github.com/users/mikehearn/received_events","type":"User","site_admin":false},"body":"Taking over from https://github.com/corda/corda/pull/4395\r\n\r\nFirst round of updates done. I will go over the remaining comments from the old PR tomorrow.","created_at":"2018-12-19T17:49:01Z","updated_at":"2018-12-20T15:35:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0cd718e49d0e7dfb2b82eaf192be8526a8d8dc37","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/corda/corda/pulls/4445/commits","review_comments_url":"https://api.github.com/repos/corda/corda/pulls/4445/comments","review_comment_url":"https://api.github.com/repos/corda/corda/pulls/comments{/number}","comments_url":"https://api.github.com/repos/corda/corda/issues/4445/comments","statuses_url":"https://api.github.com/repos/corda/corda/statuses/746db52681dcddc0b8a200f65576dab6e364dde8","head":{"label":"corda:mike-release-notes","ref":"mike-release-notes","sha":"746db52681dcddc0b8a200f65576dab6e364dde8","user":{"login":"corda","id":22600631,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyNjAwNjMx","avatar_url":"https://avatars1.githubusercontent.com/u/22600631?v=4","gravatar_id":"","url":"https://api.github.com/users/corda","html_url":"https://github.com/corda","followers_url":"https://api.github.com/users/corda/followers","following_url":"https://api.github.com/users/corda/following{/other_user}","gists_url":"https://api.github.com/users/corda/gists{/gist_id}","starred_url":"https://api.github.com/users/corda/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/corda/subscriptions","organizations_url":"https://api.github.com/users/corda/orgs","repos_url":"https://api.github.com/users/corda/repos","events_url":"https://api.github.com/users/corda/events{/privacy}","received_events_url":"https://api.github.com/users/corda/received_events","type":"Organization","site_admin":false},"repo":{"id":70137417,"node_id":"MDEwOlJlcG9zaXRvcnk3MDEzNzQxNw==","name":"corda","full_name":"corda/corda","private":false,"owner":{"login":"corda","id":22600631,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyNjAwNjMx","avatar_url":"https://avatars1.githubusercontent.com/u/22600631?v=4","gravatar_id":"","url":"https://api.github.com/users/corda","html_url":"https://github.com/corda","followers_url":"https://api.github.com/users/corda/followers","following_url":"https://api.github.com/users/corda/following{/other_user}","gists_url":"https://api.github.com/users/corda/gists{/gist_id}","starred_url":"https://api.github.com/users/corda/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/corda/subscriptions","organizations_url":"https://api.github.com/users/corda/orgs","repos_url":"https://api.github.com/users/corda/repos","events_url":"https://api.github.com/users/corda/events{/privacy}","received_events_url":"https://api.github.com/users/corda/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/corda/corda","description":"Corda is an open source blockchain project, designed for business from the start. Only Corda allows you to build interoperable blockchain networks that transact in strict privacy. Corda's smart contract technology allows businesses to transact directly, with value.","fork":false,"url":"https://api.github.com/repos/corda/corda","forks_url":"https://api.github.com/repos/corda/corda/forks","keys_url":"https://api.github.com/repos/corda/corda/keys{/key_id}","collaborators_url":"https://api.github.com/repos/corda/corda/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/corda/corda/teams","hooks_url":"https://api.github.com/repos/corda/corda/hooks","issue_events_url":"https://api.github.com/repos/corda/corda/issues/events{/number}","events_url":"https://api.github.com/repos/corda/corda/events","assignees_url":"https://api.github.com/repos/corda/corda/assignees{/user}","branches_url":"https://api.github.com/repos/corda/corda/branches{/branch}","tags_url":"https://api.github.com/repos/corda/corda/tags","blobs_url":"https://api.github.com/repos/corda/corda/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/corda/corda/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/corda/corda/git/refs{/sha}","trees_url":"https://api.github.com/repos/corda/corda/git/trees{/sha}","statuses_url":"https://api.github.com/repos/corda/corda/statuses/{sha}","languages_url":"https://api.github.com/repos/corda/corda/languages","stargazers_url":"https://api.github.com/repos/corda/corda/stargazers","contributors_url":"https://api.github.com/repos/corda/corda/contributors","subscribers_url":"https://api.github.com/repos/corda/corda/subscribers","subscription_url":"https://api.github.com/repos/corda/corda/subscription","commits_url":"https://api.github.com/repos/corda/corda/commits{/sha}","git_commits_url":"https://api.github.com/repos/corda/corda/git/commits{/sha}","comments_url":"https://api.github.com/repos/corda/corda/comments{/number}","issue_comment_url":"https://api.github.com/repos/corda/corda/issues/comments{/number}","contents_url":"https://api.github.com/repos/corda/corda/contents/{+path}","compare_url":"https://api.github.com/repos/corda/corda/compare/{base}...{head}","merges_url":"https://api.github.com/repos/corda/corda/merges","archive_url":"https://api.github.com/repos/corda/corda/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/corda/corda/downloads","issues_url":"https://api.github.com/repos/corda/corda/issues{/number}","pulls_url":"https://api.github.com/repos/corda/corda/pulls{/number}","milestones_url":"https://api.github.com/repos/corda/corda/milestones{/number}","notifications_url":"https://api.github.com/repos/corda/corda/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/corda/corda/labels{/name}","releases_url":"https://api.github.com/repos/corda/corda/releases{/id}","deployments_url":"https://api.github.com/repos/corda/corda/deployments","created_at":"2016-10-06T08:46:29Z","updated_at":"2018-12-20T15:04:21Z","pushed_at":"2018-12-20T15:30:04Z","git_url":"git://github.com/corda/corda.git","ssh_url":"git@github.com:corda/corda.git","clone_url":"https://github.com/corda/corda.git","svn_url":"https://github.com/corda/corda","homepage":"https://www.corda.net","size":171102,"stargazers_count":2580,"watchers_count":2580,"language":"Kotlin","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":661,"mirror_url":null,"archived":false,"open_issues_count":86,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":661,"open_issues":86,"watchers":2580,"default_branch":"master"}},"base":{"label":"corda:master","ref":"master","sha":"3efbad34ccab3c0c0bf24fd2c42f0cfca6b64748","user":{"login":"corda","id":22600631,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyNjAwNjMx","avatar_url":"https://avatars1.githubusercontent.com/u/22600631?v=4","gravatar_id":"","url":"https://api.github.com/users/corda","html_url":"https://github.com/corda","followers_url":"https://api.github.com/users/corda/followers","following_url":"https://api.github.com/users/corda/following{/other_user}","gists_url":"https://api.github.com/users/corda/gists{/gist_id}","starred_url":"https://api.github.com/users/corda/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/corda/subscriptions","organizations_url":"https://api.github.com/users/corda/orgs","repos_url":"https://api.github.com/users/corda/repos","events_url":"https://api.github.com/users/corda/events{/privacy}","received_events_url":"https://api.github.com/users/corda/received_events","type":"Organization","site_admin":false},"repo":{"id":70137417,"node_id":"MDEwOlJlcG9zaXRvcnk3MDEzNzQxNw==","name":"corda","full_name":"corda/corda","private":false,"owner":{"login":"corda","id":22600631,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyNjAwNjMx","avatar_url":"https://avatars1.githubusercontent.com/u/22600631?v=4","gravatar_id":"","url":"https://api.github.com/users/corda","html_url":"https://github.com/corda","followers_url":"https://api.github.com/users/corda/followers","following_url":"https://api.github.com/users/corda/following{/other_user}","gists_url":"https://api.github.com/users/corda/gists{/gist_id}","starred_url":"https://api.github.com/users/corda/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/corda/subscriptions","organizations_url":"https://api.github.com/users/corda/orgs","repos_url":"https://api.github.com/users/corda/repos","events_url":"https://api.github.com/users/corda/events{/privacy}","received_events_url":"https://api.github.com/users/corda/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/corda/corda","description":"Corda is an open source blockchain project, designed for business from the start. Only Corda allows you to build interoperable blockchain networks that transact in strict privacy. Corda's smart contract technology allows businesses to transact directly, with value.","fork":false,"url":"https://api.github.com/repos/corda/corda","forks_url":"https://api.github.com/repos/corda/corda/forks","keys_url":"https://api.github.com/repos/corda/corda/keys{/key_id}","collaborators_url":"https://api.github.com/repos/corda/corda/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/corda/corda/teams","hooks_url":"https://api.github.com/repos/corda/corda/hooks","issue_events_url":"https://api.github.com/repos/corda/corda/issues/events{/number}","events_url":"https://api.github.com/repos/corda/corda/events","assignees_url":"https://api.github.com/repos/corda/corda/assignees{/user}","branches_url":"https://api.github.com/repos/corda/corda/branches{/branch}","tags_url":"https://api.github.com/repos/corda/corda/tags","blobs_url":"https://api.github.com/repos/corda/corda/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/corda/corda/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/corda/corda/git/refs{/sha}","trees_url":"https://api.github.com/repos/corda/corda/git/trees{/sha}","statuses_url":"https://api.github.com/repos/corda/corda/statuses/{sha}","languages_url":"https://api.github.com/repos/corda/corda/languages","stargazers_url":"https://api.github.com/repos/corda/corda/stargazers","contributors_url":"https://api.github.com/repos/corda/corda/contributors","subscribers_url":"https://api.github.com/repos/corda/corda/subscribers","subscription_url":"https://api.github.com/repos/corda/corda/subscription","commits_url":"https://api.github.com/repos/corda/corda/commits{/sha}","git_commits_url":"https://api.github.com/repos/corda/corda/git/commits{/sha}","comments_url":"https://api.github.com/repos/corda/corda/comments{/number}","issue_comment_url":"https://api.github.com/repos/corda/corda/issues/comments{/number}","contents_url":"https://api.github.com/repos/corda/corda/contents/{+path}","compare_url":"https://api.github.com/repos/corda/corda/compare/{base}...{head}","merges_url":"https://api.github.com/repos/corda/corda/merges","archive_url":"https://api.github.com/repos/corda/corda/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/corda/corda/downloads","issues_url":"https://api.github.com/repos/corda/corda/issues{/number}","pulls_url":"https://api.github.com/repos/corda/corda/pulls{/number}","milestones_url":"https://api.github.com/repos/corda/corda/milestones{/number}","notifications_url":"https://api.github.com/repos/corda/corda/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/corda/corda/labels{/name}","releases_url":"https://api.github.com/repos/corda/corda/releases{/id}","deployments_url":"https://api.github.com/repos/corda/corda/deployments","created_at":"2016-10-06T08:46:29Z","updated_at":"2018-12-20T15:04:21Z","pushed_at":"2018-12-20T15:30:04Z","git_url":"git://github.com/corda/corda.git","ssh_url":"git@github.com:corda/corda.git","clone_url":"https://github.com/corda/corda.git","svn_url":"https://github.com/corda/corda","homepage":"https://www.corda.net","size":171102,"stargazers_count":2580,"watchers_count":2580,"language":"Kotlin","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":661,"mirror_url":null,"archived":false,"open_issues_count":86,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":661,"open_issues":86,"watchers":2580,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/corda/corda/pulls/4445"},"html":{"href":"https://github.com/corda/corda/pull/4445"},"issue":{"href":"https://api.github.com/repos/corda/corda/issues/4445"},"comments":{"href":"https://api.github.com/repos/corda/corda/issues/4445/comments"},"review_comments":{"href":"https://api.github.com/repos/corda/corda/pulls/4445/comments"},"review_comment":{"href":"https://api.github.com/repos/corda/corda/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/corda/corda/pulls/4445/commits"},"statuses":{"href":"https://api.github.com/repos/corda/corda/statuses/746db52681dcddc0b8a200f65576dab6e364dde8"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"mikehearn"}}