{"action":"created","comment":{"url":"https://api.github.com/repos/corda/corda/pulls/comments/168791498","pull_request_review_id":97220284,"id":168791498,"diff_hunk":"@@ -1,49 +1,273 @@\n Release notes\n =============\n \n-Here are release notes for each snapshot release from M9 onwards.\n+Release 3.0\n+-----------\n+\n+Corda 3.0 is here and brings with it wire stability and a host of other exciting features that aim to enhance\n+the developer and user experience whilst providing for the long term usability of deployed Corda instances. It\n+will provide functionality to ensure anyone wishing to move to the anticipated release of R3 Corda can do so\n+seamlessly and with the assurance stateful data persisted to the vault will remain understandable between\n+newer and older nodes.\n+\n+Special Thanks\n+~~~~~~~~~~~~~~\n+\n+As ever, we are grateful to the enthusiastic user and developer community that has  grown up to surround Corda.\n+As an open project we are always grateful to take code contributions from individual users where they feel they\n+can add functionality useful to themselves and the wider community.\n+\n+As such we'd like to extend special thanks to\n+\n+  * Ben Wyeth for providing a mechanism for registering a callback on app shutdown\n+\n+    Ben's contribution can be found on GitHub\n+    `here <https://github.com/corda/corda/commit/d17670c747d16b7f6e06e19bbbd25eb06e45cb93>`_\n+\n+  * Tomas Tauber for adding support for running the vault service using PostgresSQL in place of the in-memory H2 service\n+\n+    Tomas's contribution can be found on GitHub\n+    `here <https://github.com/corda/corda/commit/342090db62ae40cef2be30b2ec4aa451b099d0b7>`_\n+\n+    .. warning:: This is an experimental feature that has not been tested as part of our standard release testing. \n+\n+  * Rose Molina Atienza for correcting our careless spelling slip\n+    \n+    Rose's change can be found on GitHub\n+    `here <https://github.com/corda/corda/commit/128d5cad0af7fc5595cac3287650663c9c9ac0a3>`_\n+\n+Significant Changes in 3.0\n+~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+* **Wire Stability**:\n+\n+  Wire stability brings the same promise to developers for their data that API stability did for their code. From this\n+  point any state generated by a Corda system will always be retrievable, understandable, and seen as valid by any\n+  subsequently released version (versions 3.0 and above).\n+\n+  Systems can thus be deployed safe in the knowledge that valuable and important information will always be accessible through\n+  upgrade and change. Practically speaking this means from this point forward upgrading all, or part, of a Corda network\n+  will not require the replaying of data; \"it will just work\".\n+\n+  This has been facilitated by the switch over from Kryo to Corda's own AMQP based serialization framework, one designed to\n+  interoperate with stateful information and allow the evolution of such contract states over time as developers refine\n+  and improve their systems written atop the core Corda platform.\n+\n+  * **AMQP Serialization**\n+\n+    AMQP Serialization is now enabled for both peer to peer communication and the writing of states to the vault. This\n+    change brings a serialisation format that will allow us to deliver enhanced security and wire stability. This was a key\n+    prerequisite to enabling different Corda node versions to coexist on the same network and to enable easier upgrades.\n+\n+    Details on the AMQP serialization framework can be found :ref:`here <amqp_ref>`. This provides an introduction and\n+    overview of the framework whilst more specific details on object evolution as it relates to serialization can be\n+    found in :doc:`serialization-default-evolution` and :doc:`serialization-enum-evolution` respectively.\n+\n+    .. note:: This release delivers the bulk of our transition from Kryo serialisation to AMQP serialisation. This means\n+      that many of the restrictions that were documented in previous versions of Corda are now enforced.\n+ \n+      In particular, you are advised to review the section titled :ref:`Custom Types <amqp_custom_types_ref>`.\n+      To aid with the transition, we have included support in this release for default construction and instantiation of\n+      objects with inaccessible private fields, but it is not guaranteed that this support will continue into future versions;\n+      the restrictions documented at the link above are the canonical source.\n+\n+    Whilst this is an important step for Corda, in no way is this the end of the serialisation story. We have many new\n+    features and tools planned for future releases, but feel it is more important to deliver the garuntees discussed above\n+    as early as possible to allow the community to develop with greater confidence. \n+\n+  * **Artemis and Bridges**\n+\n+    Corda has now achieved the long stated goal of using the AMQP 1.0 open protocol standard as its communication protocol\n+    between peers. This forms a strong and flexible framework upon which we can deliver future enhancements that will allow\n+    much for smoother integrations between Corda and third party brokers, languages, and messaging systems. In addition, this\n+    is also an important step towards formally defining the official peer to peer messaging protocol of Corda, something\n+    required for more in-depth security audits of the Corda protocol.\n+\n+    .. warning:: The Artemis topics used for peer-to-peer communication have been changed to be more consistent with future\n+      cryptographic agility and to open up the future possibility of sharing brokers between nodes. This is a breaking wire\n+      level change as it means that nodes after this change will not be able to communicate correctly with nodes running the\n+      previous version. Also, any pending enqueued messages in the Artemis message store will not be delivered correctly to\n+      their original target. However, assuming a clean reset of the artemis data and that the nodes are consistent versions,\n+      data persisted via the AMQP serializer will be forward compatible.\n \n-Unreleased\n-----------\n-* X.509 certificates now have an extension that specifies the Corda role the certificate is used for, and the role\n+* **New Network Map Service**:\n+\n+  This release introduces the new network map architecture. The network map service has been completely redesigned and\n+  implemented to enable future increased network scalability and redundancy, reduced runtime operational overhead,\n+  support for multiple notaries, and administration of network compatibility zones (CZ) and business networks.\n+\n+  A Corda Compatibility Zone is defined as a grouping of participants and services (notaries, oracles,\n+  doorman, network map server) configured within an operational Corda network to be interoperable and compatible with\n+  each other.\n+\n+  We introduce the concept of network parameters, which will be used in a future version of Corda to specify precisely\n+  the set of constants (or ranges of constants) upon which the nodes within a network need to agree in order to be assured\n+  of seamless inter-operation. Additional security controls ensure that all network map data is now signed, thus reducing\n+  the power of the network operator to tamper with the map.\n+\n+  There is also support for a group of nodes to operate locally in a private network, which is achieved by copying the\n+  node's signed info file to other nodes' directories. We've added a bootstrapping tool to facilitate this use case.\n+\n+  Further information can be found in the :doc:`changelog`, :doc:`network-map` and :doc:`setting-up-a-corda-network` documentation.\n+\n+Other Functional Improvements\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+* **Security Auditing**\n+\n+  This version of Corda is the first to have had select components subjected to the newly established security review process\n+  by R3's internal security team. Security review will be an on-going process that seeks to provide assurance that the security model of Corda\n+  has been implemented to the highest standard, and is in-line with industry best practice.\n+\n+  As part of this security review process, an independent external security audit of the HTTP based components of the code\n+  was undertaken and whose recommendations were acted upon. The security assurance process will develop in parallel to the\n+  Corda platform and will combine code review, automated security testing and secure development practices to ensure Corda\n+  fulfils its security guarantees.\n+\n+* **Contract Upgrade**\n+\n+  Support for upgrading smart contracts has been significantly extended in this release, with more flexibility still to come.\n+\n+  In prior versions of Corda states included the hash of their defining application JAR. However the code that was used actually\n+  came from the class path. In this release, transactions have the JAR containing the contract and states attached to them.\n+  The code will be copied over the network to the recipient if that peer lacks a copy of the app. However, for security reasons,\n+  in 3.0 the application must still be whitelisted on the node for the transaction to be successfully checked, so all nodes that\n+  may encounter a transaction that uses your states must have a copy of your app. Future integration of the deterministic JVM\n+  sandbox will eliminate this requirement and allow for true smart contract code migration across the network.\n+\n+  .. note:: This change means that your app JAR must now fit inside the 10mb attachment size limit. To avoid redundantly copying\n+    unneeded code over the network and to simplify upgrades, consider splitting your application into two or more JARs - one that\n+    contains states and contracts (which we call the app \"kernel\"), and another that contains flows, services, web apps etc. Only\n+    the first will be attached. Also be aware that any dependencies your app kernel has must be bundled / \"shaded\" into a fat JAR,\n+    as JAR dependencies are not supported in Corda 3.0\n+\n+  Contract states express which attached JARs can define and check them using _constraints_. In older versions the only supported\n+  constraint was a hash constraint. This provides similar behaviour as public blockchain systems like Bitcoin and Ethereum, in\n+  which code is entirely fixed once deployed and cannot be changed later. In Corda there is an upgrade path that involves the\n+  cooperation of all involved parties (as advertised by the states themselves), but this requires explicit transactions to be\n+  applied to all states and be signed by all parties, this is a fairly heavyweight operation. Hash constraints provide for maximum\n+  decentralisation and minimum trust, at the cost of flexibility. In Corda 3.0 we add a new constraint, a _network parameters_\n+  constraint, that allows the list of acceptable contract JARs to be maintained by the operator of the compatibility zone rather\n+  than being hard-coded. This allows for simple upgrades at the cost of some centralisation.\n+\n+  .. note:: Future versions of Corda will add support for signature based constraints, in which any JAR signed by a given identity\n+    can be attached to the transaction. This final constraint type provides a balance of all requirements: smooth rolling upgrades\n+    can be performed without any additional steps or transactions being signed, at the cost of trusting the app developer more and\n+    some additional complexity around managing app signing.\n+\n+* **Test API Stability**\n+\n+  A great deal of work has been carried out to refine the APIs provided to test CorDapps, making them simpler, more intuitive,\n+  and generally easier to use. In addition, these APIs have been added to the *locked* list of the APIs we guarantee to be stable\n+  over time. This should greatly increase confidence when upgrading between versions, as your testing environments will work\n+  without alteration.\n+\n+  .. note:: * Many classes have been moved between packages, so you will need to update your imports\n+    * setCordappPackages and unsetCordappPackages have been removed from the ledger/transaction DSL and the flow test framework,\n+      and are now via a constructor parameter or automatically when when constructing the MockServices or MockNetwork object\n+    * Key constants e.g. ``ALICE_KEY`` have been removed, you can now use TestIdentity to make your own\n+    * The ledger/transaction DSL must now be provided with MockServices as it no longer makes its own\n+        * In transaction blocks, input and output take their arguments as ContractStates rather than lambdas\n+        * Also in transaction blocks, command takes its arguments as CommandDatas rather than lambdas\n+    * The MockServices API has changed, please refer to its API documentation\n+    * TestDependencyInjectionBase has been retired in favour of a JUnit Rule called SerializationEnvironmentRule\n+        * This replaces the initialiseSerialization parameter of ledger/transaction and verifierDriver\n+        * The withTestSerialization method is obsoleted by SerializationEnvironmentRule and has been retired\n+    * MockNetwork now takes a MockNetworkParameters builder to make it more Java-friendly, like driver's DriverParameters\n+        * Similarly, the MockNetwork.createNode methods now take a MockNodeParameters builder\n+    * MockNode constructor parameters are now aggregated in MockNodeArgs for easier subclassing\n+    * MockNetwork.Factory has been retired as you can simply use a lambda\n+    * testNodeConfiguration has been retired, please use a mock object framework of your choice instead\n+    * MockNetwork.createSomeNodes and IntegrationTestCategory have been retired with no replacement\n+\n+  .. tip:: We have provided a several scripts (depending upon your operating system of choice) to smooth the upgrade\n+    process for existing projects. This can be found at ``tools\\scripts\\update-test-packages.sh`` for the Bash shell and\n+    ``tools/scripts/upgrade-test-packages.ps1`` for Windows Poer Shell users in the source tree\n+\n+  Please see the :doc:`upgrade-notes` for more information on transitionining older tests to the new framework\n+\n+* **Clean Node Shutdown**\n+\n+  We, alongside user feedback, concluded there was a strong need for the ability to have a clean inflection point where a node\n+  could be shutdown without any in-flight transactions pending to allow for a clean system for upgrade purposes. As such, a flow\n+  draining mode has been added. When activated, this creates an inflection point that guarantees no new work will be started and\n+  all outstanding work completed prior to shutdown.\n+\n+  A clean shutdown can thus be achieved by:\n+\n+    1. Subscribing to state machine updates\n+    2. Trigger flows draining mode by ``rpc.setDrainingModeEnabled(true)``\n+    3. Wait until 1 lets you know no more checkpoints are around\n+    4. Shut the node down however you want\n+\n+* **X.509 certificates**\n+\n+  These now have an extension that specifies the Corda role the certificate is used for, and the role\n   hierarchy is now enforced in the validation code. This only has impact on those developing integrations with external\n-  PKI solutions, in most cases it is managed transparently by Corda. A formal specification of the extension can be\n+  PKI solutions; in most cases it is managed transparently by Corda. A formal specification of the extension can be\n   found at see :doc:`permissioning-certificate-specification`.\n \n-* **Enum Class Evolution**\n-  With the addition of AMQP serialization Corda now supports enum constant evolution.\n+* **Configurable authorization and authentication data sources**\n+\n+  Corda can now be configured to load RPC user credentials and permissions from an external database and supports password\n+  encryption based on the `Apache Shiro framework <https://shiro.apache.org>`_. See :ref:`RPC security management\n+  <rpc_security_mgmt_ref>` for documentation.\n+\n+* **SSH Server**\n \n-  That is the ability to alter an enum constant and, as long as certain rules are followed and the correct\n-  annotations applied, have older and newer instances of that enumeration be understood.\n+  Remote administration of Corda nodes through the CRaSH shell is now available via SSH, please see :doc:`shell` for more details.\n \n-* **AMQP Enabled**:\n-  AMQP Serialization is now enabled for both peer to peer communication and the writing of states to the vault. This change\n-  brings a stable format Corda can support internally throughout it's lifetime that meets the needs of Corda and our\n-  users.\n+* **RPC over SSL**\n \n-  Details on the AMQP serialization framework can be found in the :doc:`serialization` document :ref:`here <amqp_ref>`.\n-  This provides an introduction and overview of the framework whilst more specific details on object evolution as it relates to\n-  serialization is similarly found in pages :doc:`serialization-default-evolution` and :doc:`serialization-enum-evolution`\n-  respectively. Recommendations on how best to code CorDapps using your own :ref:`custom types <amqp_custom_types_ref>`.\n+  Corda now allows for the configuration of its RPC calls to be made over SSL. See :doc:`corda-configuration-file` for details\n+  how to configure this.\n \n-  .. note:: This release delivers the bulk of our transition from Kryo serialisation to AMQP serialisation. This means that many of the restrictions\n-    that were documented in previous versions of Corda are now enforced. (https://docs.corda.net/releases/release-V1.0/serialization.html).\n+* **Improved Notary configuration**\n \n-    In particular, you are advised to review the section titled \"Custom Types\". To aid with the transition, we have included support\n-    in this release for default construction of objects and their instantiation through getters as well as objects with inaccessible\n-    private fields but it is not guaranteed that this support will continue into future versions; the restrictions documented at the\n-    link above are the canonical source.\n+  The configuration of notaries has been simplified into a single ``notary`` configuration object. See\n+  :doc:`corda-configuration-file` for more details.\n \n-* **Custom Serializers**\n+  .. note:: ``extraAdvertisedServiceIds``, ``notaryNodeAddress``, ``notaryClusterAddresses`` and ``bftSMaRt`` configs have been\n+    removed.\n \n-  To allow interop with third party libraries that cannot be recompiled we add functionality that allows custom serializers\n-  to be written for those classes. If needed, a proxy object can be created as an interim step that allows Corda's internal\n-  serializers to operate on those types.\n+* **Database Tables Naming Scheme**\n \n-  A good example of this is the SIMM valuation demo which has a number of such serializers defined in the plugin/customserializers package\n+  To align with common conventions across all supported Corda and R3 Corda databases some table names have been changed.\n+\n+  In addition, for existing contract ORM schemas that extend from CommonSchemaV1.LinearState or CommonSchemaV1.FungibleState,\n+  you will need to explicitly map the participants collection to a database table. Previously this mapping was done in the\n+  superclass, but that makes it impossible to properly configure the table name. The required change is to add the override var\n+  ``participants: MutableSet<AbstractParty>? = null`` field to your class, and add JPA mappings.\n+\n+* **Pluggable Custom Serializers**\n+\n+  With the introduction of AMQP we have introduced the criteria that to be seamlessly serializable classes, specifically\n+  Java classes (as opposed to Kotlin), must be compiled with the ``-parameter`` flag. However, we recognise that this\n+  isn't always possible, especially dealing with third part libraries in controlled business environments where that is","path":"docs/source/release-notes.rst","position":null,"original_position":274,"commit_id":"3d4ab05d42a32d8b92252db1e33f3810043a9554","original_commit_id":"8e7dc65b5a30a2f4202eb07cacd0b18714f103b0","user":{"login":"josecoll","id":23558646,"avatar_url":"https://avatars0.githubusercontent.com/u/23558646?v=4","gravatar_id":"","url":"https://api.github.com/users/josecoll","html_url":"https://github.com/josecoll","followers_url":"https://api.github.com/users/josecoll/followers","following_url":"https://api.github.com/users/josecoll/following{/other_user}","gists_url":"https://api.github.com/users/josecoll/gists{/gist_id}","starred_url":"https://api.github.com/users/josecoll/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/josecoll/subscriptions","organizations_url":"https://api.github.com/users/josecoll/orgs","repos_url":"https://api.github.com/users/josecoll/repos","events_url":"https://api.github.com/users/josecoll/events{/privacy}","received_events_url":"https://api.github.com/users/josecoll/received_events","type":"User","site_admin":false},"body":"double usage of \"control\" (I've just remove the \"where that is out of your control\")","created_at":"2018-02-16T15:43:45Z","updated_at":"2018-02-16T15:43:45Z","html_url":"https://github.com/corda/corda/pull/2492#discussion_r168791498","pull_request_url":"https://api.github.com/repos/corda/corda/pulls/2492","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/corda/corda/pulls/comments/168791498"},"html":{"href":"https://github.com/corda/corda/pull/2492#discussion_r168791498"},"pull_request":{"href":"https://api.github.com/repos/corda/corda/pulls/2492"}}},"pull_request":{"url":"https://api.github.com/repos/corda/corda/pulls/2492","id":168251671,"html_url":"https://github.com/corda/corda/pull/2492","diff_url":"https://github.com/corda/corda/pull/2492.diff","patch_url":"https://github.com/corda/corda/pull/2492.patch","issue_url":"https://api.github.com/repos/corda/corda/issues/2492","number":2492,"state":"open","locked":false,"title":"V3 Release notes","user":{"login":"fenryka","id":3903362,"avatar_url":"https://avatars3.githubusercontent.com/u/3903362?v=4","gravatar_id":"","url":"https://api.github.com/users/fenryka","html_url":"https://github.com/fenryka","followers_url":"https://api.github.com/users/fenryka/followers","following_url":"https://api.github.com/users/fenryka/following{/other_user}","gists_url":"https://api.github.com/users/fenryka/gists{/gist_id}","starred_url":"https://api.github.com/users/fenryka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fenryka/subscriptions","organizations_url":"https://api.github.com/users/fenryka/orgs","repos_url":"https://api.github.com/users/fenryka/repos","events_url":"https://api.github.com/users/fenryka/events{/privacy}","received_events_url":"https://api.github.com/users/fenryka/received_events","type":"User","site_admin":false},"body":"So, input needed from \r\n\r\n@gendal and @mikehearn (clearly)\r\n\r\nSpecific inputs from\r\n\r\n@jamesbr3 - security blurb\r\n@tudor-malene - cntract upgrade\r\n@andr3ej - Testing api blurb\r\n@mnesbit - \r\n@shamsasari - network map stuff\r\n","created_at":"2018-02-09T14:22:21Z","updated_at":"2018-02-16T15:43:45Z","closed_at":null,"merged_at":null,"merge_commit_sha":"06662975d5378c5da2c98a4a44dc256ed6188f9d","assignee":null,"assignees":[],"requested_reviewers":[{"login":"tudor-malene","id":1941897,"avatar_url":"https://avatars0.githubusercontent.com/u/1941897?v=4","gravatar_id":"","url":"https://api.github.com/users/tudor-malene","html_url":"https://github.com/tudor-malene","followers_url":"https://api.github.com/users/tudor-malene/followers","following_url":"https://api.github.com/users/tudor-malene/following{/other_user}","gists_url":"https://api.github.com/users/tudor-malene/gists{/gist_id}","starred_url":"https://api.github.com/users/tudor-malene/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tudor-malene/subscriptions","organizations_url":"https://api.github.com/users/tudor-malene/orgs","repos_url":"https://api.github.com/users/tudor-malene/repos","events_url":"https://api.github.com/users/tudor-malene/events{/privacy}","received_events_url":"https://api.github.com/users/tudor-malene/received_events","type":"User","site_admin":false},{"login":"shamsasari","id":3883563,"avatar_url":"https://avatars3.githubusercontent.com/u/3883563?v=4","gravatar_id":"","url":"https://api.github.com/users/shamsasari","html_url":"https://github.com/shamsasari","followers_url":"https://api.github.com/users/shamsasari/followers","following_url":"https://api.github.com/users/shamsasari/following{/other_user}","gists_url":"https://api.github.com/users/shamsasari/gists{/gist_id}","starred_url":"https://api.github.com/users/shamsasari/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shamsasari/subscriptions","organizations_url":"https://api.github.com/users/shamsasari/orgs","repos_url":"https://api.github.com/users/shamsasari/repos","events_url":"https://api.github.com/users/shamsasari/events{/privacy}","received_events_url":"https://api.github.com/users/shamsasari/received_events","type":"User","site_admin":false},{"login":"sollecitom","id":5455106,"avatar_url":"https://avatars0.githubusercontent.com/u/5455106?v=4","gravatar_id":"","url":"https://api.github.com/users/sollecitom","html_url":"https://github.com/sollecitom","followers_url":"https://api.github.com/users/sollecitom/followers","following_url":"https://api.github.com/users/sollecitom/following{/other_user}","gists_url":"https://api.github.com/users/sollecitom/gists{/gist_id}","starred_url":"https://api.github.com/users/sollecitom/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sollecitom/subscriptions","organizations_url":"https://api.github.com/users/sollecitom/orgs","repos_url":"https://api.github.com/users/sollecitom/repos","events_url":"https://api.github.com/users/sollecitom/events{/privacy}","received_events_url":"https://api.github.com/users/sollecitom/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/corda/corda/pulls/2492/commits","review_comments_url":"https://api.github.com/repos/corda/corda/pulls/2492/comments","review_comment_url":"https://api.github.com/repos/corda/corda/pulls/comments{/number}","comments_url":"https://api.github.com/repos/corda/corda/issues/2492/comments","statuses_url":"https://api.github.com/repos/corda/corda/statuses/3d4ab05d42a32d8b92252db1e33f3810043a9554","head":{"label":"corda:pre-release-v3-release-notes","ref":"pre-release-v3-release-notes","sha":"3d4ab05d42a32d8b92252db1e33f3810043a9554","user":{"login":"corda","id":22600631,"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,"name":"corda","full_name":"corda/corda","owner":{"login":"corda","id":22600631,"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},"private":false,"html_url":"https://github.com/corda/corda","description":"Corda is a distributed ledger platform designed to record, manage and automate legal agreements between business partners. Designed by (and for) the world's largest financial institutions yet with applications in multiple industries.  It offers a unique response to the privacy and scalability challenges facing decentralised applications.","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-02-16T13:48:08Z","pushed_at":"2018-02-16T15:37:56Z","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":107838,"stargazers_count":1473,"watchers_count":1473,"language":"Kotlin","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":394,"mirror_url":null,"archived":false,"open_issues_count":123,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":394,"open_issues":123,"watchers":1473,"default_branch":"master"}},"base":{"label":"corda:pre-release-V3","ref":"pre-release-V3","sha":"e41408d21e86a67880ffd425a8a4c9d74af9a3f1","user":{"login":"corda","id":22600631,"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,"name":"corda","full_name":"corda/corda","owner":{"login":"corda","id":22600631,"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},"private":false,"html_url":"https://github.com/corda/corda","description":"Corda is a distributed ledger platform designed to record, manage and automate legal agreements between business partners. Designed by (and for) the world's largest financial institutions yet with applications in multiple industries.  It offers a unique response to the privacy and scalability challenges facing decentralised applications.","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-02-16T13:48:08Z","pushed_at":"2018-02-16T15:37:56Z","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":107838,"stargazers_count":1473,"watchers_count":1473,"language":"Kotlin","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":394,"mirror_url":null,"archived":false,"open_issues_count":123,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":394,"open_issues":123,"watchers":1473,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/corda/corda/pulls/2492"},"html":{"href":"https://github.com/corda/corda/pull/2492"},"issue":{"href":"https://api.github.com/repos/corda/corda/issues/2492"},"comments":{"href":"https://api.github.com/repos/corda/corda/issues/2492/comments"},"review_comments":{"href":"https://api.github.com/repos/corda/corda/pulls/2492/comments"},"review_comment":{"href":"https://api.github.com/repos/corda/corda/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/corda/corda/pulls/2492/commits"},"statuses":{"href":"https://api.github.com/repos/corda/corda/statuses/3d4ab05d42a32d8b92252db1e33f3810043a9554"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"josecoll"}}