{"action":"created","comment":{"url":"https://api.github.com/repos/ripple/rippled/pulls/comments/72486447","id":72486447,"diff_hunk":"@@ -0,0 +1,470 @@\n+//------------------------------------------------------------------------------\n+/*\n+    This file is part of rippled: https://github.com/ripple/rippled\n+    Copyright (c) 2012, 2013 Ripple Labs Inc.\n+\n+    Permission to use, copy, modify, and/or distribute this software for any\n+    purpose  with  or without fee is hereby granted, provided that the above\n+    copyright notice and this permission notice appear in all copies.\n+\n+    THE  SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n+    WITH  REGARD  TO  THIS  SOFTWARE  INCLUDING  ALL  IMPLIED  WARRANTIES  OF\n+    MERCHANTABILITY  AND  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n+    ANY  SPECIAL ,  DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n+    WHATSOEVER  RESULTING  FROM  LOSS  OF USE, DATA OR PROFITS, WHETHER IN AN\n+    ACTION  OF  CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n+    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n+*/\n+//==============================================================================\n+\n+#include <BeastConfig.h>\n+#include <ripple/app/tx/impl/PayChan.h>\n+\n+#include <ripple/basics/chrono.h>\n+#include <ripple/basics/Log.h>\n+#include <ripple/protocol/digest.h>\n+#include <ripple/protocol/st.h>\n+#include <ripple/protocol/Feature.h>\n+#include <ripple/protocol/Indexes.h>\n+#include <ripple/protocol/PublicKey.h>\n+#include <ripple/protocol/TxFlags.h>\n+#include <ripple/protocol/XRPAmount.h>\n+#include <ripple/ledger/View.h>\n+\n+namespace ripple {\n+\n+/*\n+    PaymentChannel\n+\n+        Payment channels permit off-ledger checkpoints of XRP payments flowing\n+        in a single direction. A channel sequesters the owner's XRP in its own\n+        ledger entry. The owner can authorize the recipient to claim up to a\n+        given balance by giving the receiver a signed message (off-ledger). The\n+        recipient can use this signed message to claim any unpaid balance while\n+        the channel remains open. The owner can top off the line as needed. If\n+        the channel has not paid out all its funds, the owner must wait out a\n+        delay to close the channel to give the recipient a chance to supply any\n+        claims. The recipient can close the channel at any time. Any transaction\n+        that touches the channel after the expiration time will close the\n+        channel. The total amount paid increases monotonically as newer claims\n+        are issued. When the channel is closed any remaining balance is returned\n+        to the owner. Channels are intended to permit intermittent off-ledger\n+        settlement of ILP trust lines as balances get substantial. For\n+        bidirectional channels, a payment channel can be used in each direction.\n+\n+    PaymentChannelCreate\n+\n+        Create a unidirectional channel. The parameters are:\n+        Destination\n+            The recipient at the end of the channel.\n+        Amount\n+            The amount of XRP to deposit in the channel immediately.\n+        SettleDelay\n+            The amount of time everyone but the recipient must wait for a\n+            superior claim.\n+        PublicKey\n+            The key that will sign claims against the channel.\n+        CancelAfter (optional)\n+            Any channel transaction that touches this channel after the\n+            `CancelAfter` time will close it.\n+        DestinationTag (optional)\n+            Required if the destination has lsfRequireDestTag set.\n+        SourceTag (optional)\n+\n+    PaymentChannelFund\n+\n+        Add additional funds to the payment channel. Only the channel owner may\n+        use this transaction. The parameters are:\n+        Channel\n+            The 256-bit ID of the channel.\n+        Amount\n+            The amount of XRP to add.\n+        Expiration (optional)\n+            Time the channel closes. The transaction will fail if the expiration\n+            times does not satisfy the SettleDelay constraints.\n+\n+    PaymentChannelClaim\n+\n+        Place a claim against an existing channel. The parameters are:\n+        Channel\n+            The 256-bit ID of the channel.\n+        Balance (optional)\n+            The total amount of XRP delivered after this claim is processed (optional, not\n+            needed if just closing).\n+        Amount (optional)\n+            The amount of XRP the signature is for (not needed if equal to Balance or just\n+            closing the line).\n+        Signature (optional)\n+            Authorization for the balance above, signed by the owner (optional,\n+            not needed if closing or owner is performing the transaction). The\n+            signature if for the following message: CLM\\0 followed by the\n+            256-bit channel ID, and a 64-bit integer drops.\n+        PublicKey (optional)\n+           The public key that made the signature (optional, required if a signature\n+           is present)\n+        Flags\n+            tfCloseChannel\n+                Request that the channel be closed\n+            tfRenewChannel\n+                Request that the channel's expiration be reset. Only the owner\n+                may renew a channel.\n+\n+*/\n+\n+//------------------------------------------------------------------------------\n+\n+static\n+TER\n+closeChannel (\n+    std::shared_ptr<SLE> const& slep,\n+    ApplyView& view,\n+    uint256 const& key,\n+    beast::Journal j)\n+{\n+    AccountID const src = (*slep)[sfAccount];\n+    // Remove PayChan from owner directory\n+    {\n+        auto const page = (*slep)[sfOwnerNode];\n+        TER const ter = dirDelete (view, true, page, keylet::ownerDir (src).key,\n+            key, false, page == 0, j);\n+        if (!isTesSuccess (ter))\n+            return ter;\n+    }\n+\n+    // Transfer amount back to owner, decrement owner count\n+    auto const sle = view.peek (keylet::account (src));\n+    if (!sle)","path":"src/ripple/app/tx/impl/PayChan.cpp","position":136,"original_position":136,"commit_id":"d6afe96315e8fba516410876aa12a3222422d4b5","original_commit_id":"b537d3e967c86b987eaead3ce723b8df3d2cbcb1","user":{"login":"nbougalis","id":5085415,"avatar_url":"https://avatars.githubusercontent.com/u/5085415?v=3","gravatar_id":"","url":"https://api.github.com/users/nbougalis","html_url":"https://github.com/nbougalis","followers_url":"https://api.github.com/users/nbougalis/followers","following_url":"https://api.github.com/users/nbougalis/following{/other_user}","gists_url":"https://api.github.com/users/nbougalis/gists{/gist_id}","starred_url":"https://api.github.com/users/nbougalis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nbougalis/subscriptions","organizations_url":"https://api.github.com/users/nbougalis/orgs","repos_url":"https://api.github.com/users/nbougalis/repos","events_url":"https://api.github.com/users/nbougalis/events{/privacy}","received_events_url":"https://api.github.com/users/nbougalis/received_events","type":"User","site_admin":false},"body":"Under which condition is this possible?","created_at":"2016-07-27T17:40:22Z","updated_at":"2016-07-27T17:40:22Z","html_url":"https://github.com/ripple/rippled/pull/1781#discussion_r72486447","pull_request_url":"https://api.github.com/repos/ripple/rippled/pulls/1781","_links":{"self":{"href":"https://api.github.com/repos/ripple/rippled/pulls/comments/72486447"},"html":{"href":"https://github.com/ripple/rippled/pull/1781#discussion_r72486447"},"pull_request":{"href":"https://api.github.com/repos/ripple/rippled/pulls/1781"}}},"pull_request":{"url":"https://api.github.com/repos/ripple/rippled/pulls/1781","id":78157646,"html_url":"https://github.com/ripple/rippled/pull/1781","diff_url":"https://github.com/ripple/rippled/pull/1781.diff","patch_url":"https://github.com/ripple/rippled/pull/1781.patch","issue_url":"https://api.github.com/repos/ripple/rippled/issues/1781","number":1781,"state":"open","locked":false,"title":"Payment Channels (RIPD-1224)","user":{"login":"seelabs","id":5853458,"avatar_url":"https://avatars.githubusercontent.com/u/5853458?v=3","gravatar_id":"","url":"https://api.github.com/users/seelabs","html_url":"https://github.com/seelabs","followers_url":"https://api.github.com/users/seelabs/followers","following_url":"https://api.github.com/users/seelabs/following{/other_user}","gists_url":"https://api.github.com/users/seelabs/gists{/gist_id}","starred_url":"https://api.github.com/users/seelabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seelabs/subscriptions","organizations_url":"https://api.github.com/users/seelabs/orgs","repos_url":"https://api.github.com/users/seelabs/repos","events_url":"https://api.github.com/users/seelabs/events{/privacy}","received_events_url":"https://api.github.com/users/seelabs/received_events","type":"User","site_admin":false},"body":"This PR add unidirectional payment channels.\r\n\r\nPayment channels permit off-ledger checkpoints of XRP payments flowing in a single direction. A channel sequesters the owner's XRP in its own ledger entry. The owner can authorize the recipient to claim up to a given balance by giving the receiver a signed message (off-ledger). The recipient can use this signed message to claim any unpaid balance while the channel remains open. The owner can top off the line as needed. If the channel has not paid out all its funds, the owner must wait out a delay to close the channel to give the recipient a chance to supply any claims. The recipient can close the channel at any time. Any transaction that touches the channel after the expiration time will close the channel. The total amount paid increases monotonically as newer claims are issued. When the channel is closed any remaining balance is returned to the owner. Channels are intended to permit intermittent off-ledger settlement of ILP trust lines as balances get substantial. For bidirectional channels, a payment channel can be used in each direction.\r\n\r\nThere are three new transactions (See the `PayChan.cpp` file for documentation on these Txs):\r\n* PaymentChannelCreate\r\n* PaymentChannelFund\r\n* PaymentChannelClaim\r\n\r\nThere are three new RPC commands:\r\n* account_channels queries the ledger for channels (much like account_lines)\r\n* channel_authorize signs authorizations\r\n* channel_verify verifying authorizations\r\n","created_at":"2016-07-20T14:32:17Z","updated_at":"2016-07-27T17:40:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a2e36e1b9d491dce7544fed1232720a503ae8951","assignee":{"login":"miguelportilla","id":1524671,"avatar_url":"https://avatars.githubusercontent.com/u/1524671?v=3","gravatar_id":"","url":"https://api.github.com/users/miguelportilla","html_url":"https://github.com/miguelportilla","followers_url":"https://api.github.com/users/miguelportilla/followers","following_url":"https://api.github.com/users/miguelportilla/following{/other_user}","gists_url":"https://api.github.com/users/miguelportilla/gists{/gist_id}","starred_url":"https://api.github.com/users/miguelportilla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/miguelportilla/subscriptions","organizations_url":"https://api.github.com/users/miguelportilla/orgs","repos_url":"https://api.github.com/users/miguelportilla/repos","events_url":"https://api.github.com/users/miguelportilla/events{/privacy}","received_events_url":"https://api.github.com/users/miguelportilla/received_events","type":"User","site_admin":false},"assignees":[{"login":"miguelportilla","id":1524671,"avatar_url":"https://avatars.githubusercontent.com/u/1524671?v=3","gravatar_id":"","url":"https://api.github.com/users/miguelportilla","html_url":"https://github.com/miguelportilla","followers_url":"https://api.github.com/users/miguelportilla/followers","following_url":"https://api.github.com/users/miguelportilla/following{/other_user}","gists_url":"https://api.github.com/users/miguelportilla/gists{/gist_id}","starred_url":"https://api.github.com/users/miguelportilla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/miguelportilla/subscriptions","organizations_url":"https://api.github.com/users/miguelportilla/orgs","repos_url":"https://api.github.com/users/miguelportilla/repos","events_url":"https://api.github.com/users/miguelportilla/events{/privacy}","received_events_url":"https://api.github.com/users/miguelportilla/received_events","type":"User","site_admin":false},{"login":"nbougalis","id":5085415,"avatar_url":"https://avatars.githubusercontent.com/u/5085415?v=3","gravatar_id":"","url":"https://api.github.com/users/nbougalis","html_url":"https://github.com/nbougalis","followers_url":"https://api.github.com/users/nbougalis/followers","following_url":"https://api.github.com/users/nbougalis/following{/other_user}","gists_url":"https://api.github.com/users/nbougalis/gists{/gist_id}","starred_url":"https://api.github.com/users/nbougalis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nbougalis/subscriptions","organizations_url":"https://api.github.com/users/nbougalis/orgs","repos_url":"https://api.github.com/users/nbougalis/repos","events_url":"https://api.github.com/users/nbougalis/events{/privacy}","received_events_url":"https://api.github.com/users/nbougalis/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ripple/rippled/pulls/1781/commits","review_comments_url":"https://api.github.com/repos/ripple/rippled/pulls/1781/comments","review_comment_url":"https://api.github.com/repos/ripple/rippled/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ripple/rippled/issues/1781/comments","statuses_url":"https://api.github.com/repos/ripple/rippled/statuses/d6afe96315e8fba516410876aa12a3222422d4b5","head":{"label":"seelabs:sux","ref":"sux","sha":"d6afe96315e8fba516410876aa12a3222422d4b5","user":{"login":"seelabs","id":5853458,"avatar_url":"https://avatars.githubusercontent.com/u/5853458?v=3","gravatar_id":"","url":"https://api.github.com/users/seelabs","html_url":"https://github.com/seelabs","followers_url":"https://api.github.com/users/seelabs/followers","following_url":"https://api.github.com/users/seelabs/following{/other_user}","gists_url":"https://api.github.com/users/seelabs/gists{/gist_id}","starred_url":"https://api.github.com/users/seelabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seelabs/subscriptions","organizations_url":"https://api.github.com/users/seelabs/orgs","repos_url":"https://api.github.com/users/seelabs/repos","events_url":"https://api.github.com/users/seelabs/events{/privacy}","received_events_url":"https://api.github.com/users/seelabs/received_events","type":"User","site_admin":false},"repo":{"id":28865026,"name":"rippled","full_name":"seelabs/rippled","owner":{"login":"seelabs","id":5853458,"avatar_url":"https://avatars.githubusercontent.com/u/5853458?v=3","gravatar_id":"","url":"https://api.github.com/users/seelabs","html_url":"https://github.com/seelabs","followers_url":"https://api.github.com/users/seelabs/followers","following_url":"https://api.github.com/users/seelabs/following{/other_user}","gists_url":"https://api.github.com/users/seelabs/gists{/gist_id}","starred_url":"https://api.github.com/users/seelabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seelabs/subscriptions","organizations_url":"https://api.github.com/users/seelabs/orgs","repos_url":"https://api.github.com/users/seelabs/repos","events_url":"https://api.github.com/users/seelabs/events{/privacy}","received_events_url":"https://api.github.com/users/seelabs/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/seelabs/rippled","description":"Ripple peer-to-peer network daemon","fork":true,"url":"https://api.github.com/repos/seelabs/rippled","forks_url":"https://api.github.com/repos/seelabs/rippled/forks","keys_url":"https://api.github.com/repos/seelabs/rippled/keys{/key_id}","collaborators_url":"https://api.github.com/repos/seelabs/rippled/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/seelabs/rippled/teams","hooks_url":"https://api.github.com/repos/seelabs/rippled/hooks","issue_events_url":"https://api.github.com/repos/seelabs/rippled/issues/events{/number}","events_url":"https://api.github.com/repos/seelabs/rippled/events","assignees_url":"https://api.github.com/repos/seelabs/rippled/assignees{/user}","branches_url":"https://api.github.com/repos/seelabs/rippled/branches{/branch}","tags_url":"https://api.github.com/repos/seelabs/rippled/tags","blobs_url":"https://api.github.com/repos/seelabs/rippled/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/seelabs/rippled/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/seelabs/rippled/git/refs{/sha}","trees_url":"https://api.github.com/repos/seelabs/rippled/git/trees{/sha}","statuses_url":"https://api.github.com/repos/seelabs/rippled/statuses/{sha}","languages_url":"https://api.github.com/repos/seelabs/rippled/languages","stargazers_url":"https://api.github.com/repos/seelabs/rippled/stargazers","contributors_url":"https://api.github.com/repos/seelabs/rippled/contributors","subscribers_url":"https://api.github.com/repos/seelabs/rippled/subscribers","subscription_url":"https://api.github.com/repos/seelabs/rippled/subscription","commits_url":"https://api.github.com/repos/seelabs/rippled/commits{/sha}","git_commits_url":"https://api.github.com/repos/seelabs/rippled/git/commits{/sha}","comments_url":"https://api.github.com/repos/seelabs/rippled/comments{/number}","issue_comment_url":"https://api.github.com/repos/seelabs/rippled/issues/comments{/number}","contents_url":"https://api.github.com/repos/seelabs/rippled/contents/{+path}","compare_url":"https://api.github.com/repos/seelabs/rippled/compare/{base}...{head}","merges_url":"https://api.github.com/repos/seelabs/rippled/merges","archive_url":"https://api.github.com/repos/seelabs/rippled/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/seelabs/rippled/downloads","issues_url":"https://api.github.com/repos/seelabs/rippled/issues{/number}","pulls_url":"https://api.github.com/repos/seelabs/rippled/pulls{/number}","milestones_url":"https://api.github.com/repos/seelabs/rippled/milestones{/number}","notifications_url":"https://api.github.com/repos/seelabs/rippled/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/seelabs/rippled/labels{/name}","releases_url":"https://api.github.com/repos/seelabs/rippled/releases{/id}","deployments_url":"https://api.github.com/repos/seelabs/rippled/deployments","created_at":"2015-01-06T13:36:16Z","updated_at":"2016-01-13T15:43:53Z","pushed_at":"2016-07-21T18:36:26Z","git_url":"git://github.com/seelabs/rippled.git","ssh_url":"git@github.com:seelabs/rippled.git","clone_url":"https://github.com/seelabs/rippled.git","svn_url":"https://github.com/seelabs/rippled","homepage":"https://ripple.com","size":63097,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"ripple:develop","ref":"develop","sha":"cb7d0b508d1aa2996bb66f3d5a579c6a3ebf1baa","user":{"login":"ripple","id":3165523,"avatar_url":"https://avatars.githubusercontent.com/u/3165523?v=3","gravatar_id":"","url":"https://api.github.com/users/ripple","html_url":"https://github.com/ripple","followers_url":"https://api.github.com/users/ripple/followers","following_url":"https://api.github.com/users/ripple/following{/other_user}","gists_url":"https://api.github.com/users/ripple/gists{/gist_id}","starred_url":"https://api.github.com/users/ripple/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ripple/subscriptions","organizations_url":"https://api.github.com/users/ripple/orgs","repos_url":"https://api.github.com/users/ripple/repos","events_url":"https://api.github.com/users/ripple/events{/privacy}","received_events_url":"https://api.github.com/users/ripple/received_events","type":"Organization","site_admin":false},"repo":{"id":2724167,"name":"rippled","full_name":"ripple/rippled","owner":{"login":"ripple","id":3165523,"avatar_url":"https://avatars.githubusercontent.com/u/3165523?v=3","gravatar_id":"","url":"https://api.github.com/users/ripple","html_url":"https://github.com/ripple","followers_url":"https://api.github.com/users/ripple/followers","following_url":"https://api.github.com/users/ripple/following{/other_user}","gists_url":"https://api.github.com/users/ripple/gists{/gist_id}","starred_url":"https://api.github.com/users/ripple/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ripple/subscriptions","organizations_url":"https://api.github.com/users/ripple/orgs","repos_url":"https://api.github.com/users/ripple/repos","events_url":"https://api.github.com/users/ripple/events{/privacy}","received_events_url":"https://api.github.com/users/ripple/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ripple/rippled","description":"Ripple peer-to-peer network daemon","fork":false,"url":"https://api.github.com/repos/ripple/rippled","forks_url":"https://api.github.com/repos/ripple/rippled/forks","keys_url":"https://api.github.com/repos/ripple/rippled/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ripple/rippled/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ripple/rippled/teams","hooks_url":"https://api.github.com/repos/ripple/rippled/hooks","issue_events_url":"https://api.github.com/repos/ripple/rippled/issues/events{/number}","events_url":"https://api.github.com/repos/ripple/rippled/events","assignees_url":"https://api.github.com/repos/ripple/rippled/assignees{/user}","branches_url":"https://api.github.com/repos/ripple/rippled/branches{/branch}","tags_url":"https://api.github.com/repos/ripple/rippled/tags","blobs_url":"https://api.github.com/repos/ripple/rippled/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ripple/rippled/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ripple/rippled/git/refs{/sha}","trees_url":"https://api.github.com/repos/ripple/rippled/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ripple/rippled/statuses/{sha}","languages_url":"https://api.github.com/repos/ripple/rippled/languages","stargazers_url":"https://api.github.com/repos/ripple/rippled/stargazers","contributors_url":"https://api.github.com/repos/ripple/rippled/contributors","subscribers_url":"https://api.github.com/repos/ripple/rippled/subscribers","subscription_url":"https://api.github.com/repos/ripple/rippled/subscription","commits_url":"https://api.github.com/repos/ripple/rippled/commits{/sha}","git_commits_url":"https://api.github.com/repos/ripple/rippled/git/commits{/sha}","comments_url":"https://api.github.com/repos/ripple/rippled/comments{/number}","issue_comment_url":"https://api.github.com/repos/ripple/rippled/issues/comments{/number}","contents_url":"https://api.github.com/repos/ripple/rippled/contents/{+path}","compare_url":"https://api.github.com/repos/ripple/rippled/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ripple/rippled/merges","archive_url":"https://api.github.com/repos/ripple/rippled/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ripple/rippled/downloads","issues_url":"https://api.github.com/repos/ripple/rippled/issues{/number}","pulls_url":"https://api.github.com/repos/ripple/rippled/pulls{/number}","milestones_url":"https://api.github.com/repos/ripple/rippled/milestones{/number}","notifications_url":"https://api.github.com/repos/ripple/rippled/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ripple/rippled/labels{/name}","releases_url":"https://api.github.com/repos/ripple/rippled/releases{/id}","deployments_url":"https://api.github.com/repos/ripple/rippled/deployments","created_at":"2011-11-07T04:40:15Z","updated_at":"2016-07-27T11:20:08Z","pushed_at":"2016-07-27T17:07:25Z","git_url":"git://github.com/ripple/rippled.git","ssh_url":"git@github.com:ripple/rippled.git","clone_url":"https://github.com/ripple/rippled.git","svn_url":"https://github.com/ripple/rippled","homepage":"https://ripple.com","size":114229,"stargazers_count":1119,"watchers_count":1119,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":337,"mirror_url":null,"open_issues_count":128,"forks":337,"open_issues":128,"watchers":1119,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/ripple/rippled/pulls/1781"},"html":{"href":"https://github.com/ripple/rippled/pull/1781"},"issue":{"href":"https://api.github.com/repos/ripple/rippled/issues/1781"},"comments":{"href":"https://api.github.com/repos/ripple/rippled/issues/1781/comments"},"review_comments":{"href":"https://api.github.com/repos/ripple/rippled/pulls/1781/comments"},"review_comment":{"href":"https://api.github.com/repos/ripple/rippled/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ripple/rippled/pulls/1781/commits"},"statuses":{"href":"https://api.github.com/repos/ripple/rippled/statuses/d6afe96315e8fba516410876aa12a3222422d4b5"}}}}
{"actor":{"display_login":"nbougalis"}}