{"action":"created","comment":{"url":"https://api.github.com/repos/lightningnetwork/lnd/pulls/comments/229587563","pull_request_review_id":170120488,"id":229587563,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyOTU4NzU2Mw==","diff_hunk":"@@ -557,6 +557,300 @@ func (n *TxNotifier) dispatchConfDetails(\n \treturn nil\n }\n \n+// RegisterSpend handles a new spend notification request. The client will be\n+// notified once the outpoint is detected as spent within the chain.\n+//\n+// The registration succeeds if no error is returned. If the returned\n+// HistoricalSpendDisaptch is non-nil, the caller is responsible for attempting\n+// to determine whether the outpoint has been spent between the start and end\n+// heights.\n+//\n+// NOTE: If the outpoint has already been spent within the chain before the\n+// notifier's current tip, the spend details must be provided with the\n+// UpdateSpendDetails method, otherwise we will wait for the outpoint to\n+// be spent at tip, even though it already has.\n+func (n *TxNotifier) RegisterSpend(ntfn *SpendNtfn) (*HistoricalSpendDispatch, error) {\n+\tselect {\n+\tcase <-n.quit:\n+\t\treturn nil, ErrTxNotifierExiting\n+\tdefault:\n+\t}\n+\n+\t// Before proceeding to register the notification, we'll query our spend\n+\t// hint cache to determine whether a better one exists.\n+\tstartHeight := ntfn.HeightHint\n+\thint, err := n.spendHintCache.QuerySpendHint(ntfn.OutPoint)\n+\tif err == nil {\n+\t\tif hint > startHeight {","path":"chainntnfs/txnotifier.go","position":598,"original_position":28,"commit_id":"e6b1a27cd732ff8bb644bba71f4bb27ca3a8abef","original_commit_id":"716db043a151aafff2f2a0fdeb53eb05f0df506d","user":{"login":"halseth","id":3765732,"node_id":"MDQ6VXNlcjM3NjU3MzI=","avatar_url":"https://avatars1.githubusercontent.com/u/3765732?v=4","gravatar_id":"","url":"https://api.github.com/users/halseth","html_url":"https://github.com/halseth","followers_url":"https://api.github.com/users/halseth/followers","following_url":"https://api.github.com/users/halseth/following{/other_user}","gists_url":"https://api.github.com/users/halseth/gists{/gist_id}","starred_url":"https://api.github.com/users/halseth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/halseth/subscriptions","organizations_url":"https://api.github.com/users/halseth/orgs","repos_url":"https://api.github.com/users/halseth/repos","events_url":"https://api.github.com/users/halseth/events{/privacy}","received_events_url":"https://api.github.com/users/halseth/received_events","type":"User","site_admin":false},"body":"In this case it would be equivalent since the `else if` would only be hit in the case `err != nil`, but this is fine.","created_at":"2018-10-31T07:34:39Z","updated_at":"2018-10-31T07:34:39Z","html_url":"https://github.com/lightningnetwork/lnd/pull/2004#discussion_r229587563","pull_request_url":"https://api.github.com/repos/lightningnetwork/lnd/pulls/2004","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/lightningnetwork/lnd/pulls/comments/229587563"},"html":{"href":"https://github.com/lightningnetwork/lnd/pull/2004#discussion_r229587563"},"pull_request":{"href":"https://api.github.com/repos/lightningnetwork/lnd/pulls/2004"}},"in_reply_to_id":228884667},"pull_request":{"url":"https://api.github.com/repos/lightningnetwork/lnd/pulls/2004","id":220235838,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIwMjM1ODM4","html_url":"https://github.com/lightningnetwork/lnd/pull/2004","diff_url":"https://github.com/lightningnetwork/lnd/pull/2004.diff","patch_url":"https://github.com/lightningnetwork/lnd/pull/2004.patch","issue_url":"https://api.github.com/repos/lightningnetwork/lnd/issues/2004","number":2004,"state":"closed","locked":false,"title":"chainntnfs: handle spend notifications within TxConfNotifier","user":{"login":"wpaulino","id":9447167,"node_id":"MDQ6VXNlcjk0NDcxNjc=","avatar_url":"https://avatars0.githubusercontent.com/u/9447167?v=4","gravatar_id":"","url":"https://api.github.com/users/wpaulino","html_url":"https://github.com/wpaulino","followers_url":"https://api.github.com/users/wpaulino/followers","following_url":"https://api.github.com/users/wpaulino/following{/other_user}","gists_url":"https://api.github.com/users/wpaulino/gists{/gist_id}","starred_url":"https://api.github.com/users/wpaulino/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wpaulino/subscriptions","organizations_url":"https://api.github.com/users/wpaulino/orgs","repos_url":"https://api.github.com/users/wpaulino/repos","events_url":"https://api.github.com/users/wpaulino/events{/privacy}","received_events_url":"https://api.github.com/users/wpaulino/received_events","type":"User","site_admin":false},"body":"In this PR, we overhaul the `TxConfNotifier` struct to also track spend notifications. This introduces a number of benefits, such as: removing duplicate spend notification logic within the different `ChainNotifier` implementations, spend reorg detection, and many other minor optimizations. This will serve as a stepping stone for re-enabling the height hint cache, as it previously had issues under reorgs. Details for the most important commits can be found inline, explaining what each one does and why.\r\n\r\nDepends on #1787.","created_at":"2018-10-04T02:58:11Z","updated_at":"2018-10-31T07:34:39Z","closed_at":"2018-10-31T03:24:18Z","merged_at":"2018-10-31T03:24:18Z","merge_commit_sha":"9f0b008773f881265b6eecbf969ac358df19e75c","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":990013318,"node_id":"MDU6TGFiZWw5OTAwMTMzMTg=","url":"https://api.github.com/repos/lightningnetwork/lnd/labels/P2","name":"P2","color":"fbca04","default":false},{"id":833751432,"node_id":"MDU6TGFiZWw4MzM3NTE0MzI=","url":"https://api.github.com/repos/lightningnetwork/lnd/labels/backend","name":"backend","color":"7e62ba","default":false},{"id":487071754,"node_id":"MDU6TGFiZWw0ODcwNzE3NTQ=","url":"https://api.github.com/repos/lightningnetwork/lnd/labels/notifications","name":"notifications","color":"bfdadc","default":false}],"milestone":{"url":"https://api.github.com/repos/lightningnetwork/lnd/milestones/8","html_url":"https://github.com/lightningnetwork/lnd/milestone/8","labels_url":"https://api.github.com/repos/lightningnetwork/lnd/milestones/8/labels","id":3538310,"node_id":"MDk6TWlsZXN0b25lMzUzODMxMA==","number":8,"title":"0.5.1","description":"","creator":{"login":"Roasbeef","id":998190,"node_id":"MDQ6VXNlcjk5ODE5MA==","avatar_url":"https://avatars3.githubusercontent.com/u/998190?v=4","gravatar_id":"","url":"https://api.github.com/users/Roasbeef","html_url":"https://github.com/Roasbeef","followers_url":"https://api.github.com/users/Roasbeef/followers","following_url":"https://api.github.com/users/Roasbeef/following{/other_user}","gists_url":"https://api.github.com/users/Roasbeef/gists{/gist_id}","starred_url":"https://api.github.com/users/Roasbeef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Roasbeef/subscriptions","organizations_url":"https://api.github.com/users/Roasbeef/orgs","repos_url":"https://api.github.com/users/Roasbeef/repos","events_url":"https://api.github.com/users/Roasbeef/events{/privacy}","received_events_url":"https://api.github.com/users/Roasbeef/received_events","type":"User","site_admin":false},"open_issues":5,"closed_issues":21,"state":"open","created_at":"2018-08-01T07:31:44Z","updated_at":"2018-10-31T03:26:23Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/lightningnetwork/lnd/pulls/2004/commits","review_comments_url":"https://api.github.com/repos/lightningnetwork/lnd/pulls/2004/comments","review_comment_url":"https://api.github.com/repos/lightningnetwork/lnd/pulls/comments{/number}","comments_url":"https://api.github.com/repos/lightningnetwork/lnd/issues/2004/comments","statuses_url":"https://api.github.com/repos/lightningnetwork/lnd/statuses/e6b1a27cd732ff8bb644bba71f4bb27ca3a8abef","head":{"label":"wpaulino:spend-tx-notifier","ref":"spend-tx-notifier","sha":"e6b1a27cd732ff8bb644bba71f4bb27ca3a8abef","user":{"login":"wpaulino","id":9447167,"node_id":"MDQ6VXNlcjk0NDcxNjc=","avatar_url":"https://avatars0.githubusercontent.com/u/9447167?v=4","gravatar_id":"","url":"https://api.github.com/users/wpaulino","html_url":"https://github.com/wpaulino","followers_url":"https://api.github.com/users/wpaulino/followers","following_url":"https://api.github.com/users/wpaulino/following{/other_user}","gists_url":"https://api.github.com/users/wpaulino/gists{/gist_id}","starred_url":"https://api.github.com/users/wpaulino/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wpaulino/subscriptions","organizations_url":"https://api.github.com/users/wpaulino/orgs","repos_url":"https://api.github.com/users/wpaulino/repos","events_url":"https://api.github.com/users/wpaulino/events{/privacy}","received_events_url":"https://api.github.com/users/wpaulino/received_events","type":"User","site_admin":false},"repo":{"id":115386014,"node_id":"MDEwOlJlcG9zaXRvcnkxMTUzODYwMTQ=","name":"lnd","full_name":"wpaulino/lnd","private":false,"owner":{"login":"wpaulino","id":9447167,"node_id":"MDQ6VXNlcjk0NDcxNjc=","avatar_url":"https://avatars0.githubusercontent.com/u/9447167?v=4","gravatar_id":"","url":"https://api.github.com/users/wpaulino","html_url":"https://github.com/wpaulino","followers_url":"https://api.github.com/users/wpaulino/followers","following_url":"https://api.github.com/users/wpaulino/following{/other_user}","gists_url":"https://api.github.com/users/wpaulino/gists{/gist_id}","starred_url":"https://api.github.com/users/wpaulino/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wpaulino/subscriptions","organizations_url":"https://api.github.com/users/wpaulino/orgs","repos_url":"https://api.github.com/users/wpaulino/repos","events_url":"https://api.github.com/users/wpaulino/events{/privacy}","received_events_url":"https://api.github.com/users/wpaulino/received_events","type":"User","site_admin":false},"html_url":"https://github.com/wpaulino/lnd","description":"Lightning Network Daemon ⚡️","fork":true,"url":"https://api.github.com/repos/wpaulino/lnd","forks_url":"https://api.github.com/repos/wpaulino/lnd/forks","keys_url":"https://api.github.com/repos/wpaulino/lnd/keys{/key_id}","collaborators_url":"https://api.github.com/repos/wpaulino/lnd/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/wpaulino/lnd/teams","hooks_url":"https://api.github.com/repos/wpaulino/lnd/hooks","issue_events_url":"https://api.github.com/repos/wpaulino/lnd/issues/events{/number}","events_url":"https://api.github.com/repos/wpaulino/lnd/events","assignees_url":"https://api.github.com/repos/wpaulino/lnd/assignees{/user}","branches_url":"https://api.github.com/repos/wpaulino/lnd/branches{/branch}","tags_url":"https://api.github.com/repos/wpaulino/lnd/tags","blobs_url":"https://api.github.com/repos/wpaulino/lnd/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/wpaulino/lnd/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/wpaulino/lnd/git/refs{/sha}","trees_url":"https://api.github.com/repos/wpaulino/lnd/git/trees{/sha}","statuses_url":"https://api.github.com/repos/wpaulino/lnd/statuses/{sha}","languages_url":"https://api.github.com/repos/wpaulino/lnd/languages","stargazers_url":"https://api.github.com/repos/wpaulino/lnd/stargazers","contributors_url":"https://api.github.com/repos/wpaulino/lnd/contributors","subscribers_url":"https://api.github.com/repos/wpaulino/lnd/subscribers","subscription_url":"https://api.github.com/repos/wpaulino/lnd/subscription","commits_url":"https://api.github.com/repos/wpaulino/lnd/commits{/sha}","git_commits_url":"https://api.github.com/repos/wpaulino/lnd/git/commits{/sha}","comments_url":"https://api.github.com/repos/wpaulino/lnd/comments{/number}","issue_comment_url":"https://api.github.com/repos/wpaulino/lnd/issues/comments{/number}","contents_url":"https://api.github.com/repos/wpaulino/lnd/contents/{+path}","compare_url":"https://api.github.com/repos/wpaulino/lnd/compare/{base}...{head}","merges_url":"https://api.github.com/repos/wpaulino/lnd/merges","archive_url":"https://api.github.com/repos/wpaulino/lnd/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/wpaulino/lnd/downloads","issues_url":"https://api.github.com/repos/wpaulino/lnd/issues{/number}","pulls_url":"https://api.github.com/repos/wpaulino/lnd/pulls{/number}","milestones_url":"https://api.github.com/repos/wpaulino/lnd/milestones{/number}","notifications_url":"https://api.github.com/repos/wpaulino/lnd/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/wpaulino/lnd/labels{/name}","releases_url":"https://api.github.com/repos/wpaulino/lnd/releases{/id}","deployments_url":"https://api.github.com/repos/wpaulino/lnd/deployments","created_at":"2017-12-26T04:40:40Z","updated_at":"2018-10-31T00:24:19Z","pushed_at":"2018-10-31T03:39:30Z","git_url":"git://github.com/wpaulino/lnd.git","ssh_url":"git@github.com:wpaulino/lnd.git","clone_url":"https://github.com/wpaulino/lnd.git","svn_url":"https://github.com/wpaulino/lnd","homepage":"","size":21797,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"lightningnetwork:master","ref":"master","sha":"832bd8101c889efb9ace39bd1f4364d34900f351","user":{"login":"lightningnetwork","id":13424735,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNDI0NzM1","avatar_url":"https://avatars0.githubusercontent.com/u/13424735?v=4","gravatar_id":"","url":"https://api.github.com/users/lightningnetwork","html_url":"https://github.com/lightningnetwork","followers_url":"https://api.github.com/users/lightningnetwork/followers","following_url":"https://api.github.com/users/lightningnetwork/following{/other_user}","gists_url":"https://api.github.com/users/lightningnetwork/gists{/gist_id}","starred_url":"https://api.github.com/users/lightningnetwork/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lightningnetwork/subscriptions","organizations_url":"https://api.github.com/users/lightningnetwork/orgs","repos_url":"https://api.github.com/users/lightningnetwork/repos","events_url":"https://api.github.com/users/lightningnetwork/events{/privacy}","received_events_url":"https://api.github.com/users/lightningnetwork/received_events","type":"Organization","site_admin":false},"repo":{"id":49765480,"node_id":"MDEwOlJlcG9zaXRvcnk0OTc2NTQ4MA==","name":"lnd","full_name":"lightningnetwork/lnd","private":false,"owner":{"login":"lightningnetwork","id":13424735,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNDI0NzM1","avatar_url":"https://avatars0.githubusercontent.com/u/13424735?v=4","gravatar_id":"","url":"https://api.github.com/users/lightningnetwork","html_url":"https://github.com/lightningnetwork","followers_url":"https://api.github.com/users/lightningnetwork/followers","following_url":"https://api.github.com/users/lightningnetwork/following{/other_user}","gists_url":"https://api.github.com/users/lightningnetwork/gists{/gist_id}","starred_url":"https://api.github.com/users/lightningnetwork/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lightningnetwork/subscriptions","organizations_url":"https://api.github.com/users/lightningnetwork/orgs","repos_url":"https://api.github.com/users/lightningnetwork/repos","events_url":"https://api.github.com/users/lightningnetwork/events{/privacy}","received_events_url":"https://api.github.com/users/lightningnetwork/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/lightningnetwork/lnd","description":"Lightning Network Daemon ⚡️","fork":false,"url":"https://api.github.com/repos/lightningnetwork/lnd","forks_url":"https://api.github.com/repos/lightningnetwork/lnd/forks","keys_url":"https://api.github.com/repos/lightningnetwork/lnd/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lightningnetwork/lnd/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lightningnetwork/lnd/teams","hooks_url":"https://api.github.com/repos/lightningnetwork/lnd/hooks","issue_events_url":"https://api.github.com/repos/lightningnetwork/lnd/issues/events{/number}","events_url":"https://api.github.com/repos/lightningnetwork/lnd/events","assignees_url":"https://api.github.com/repos/lightningnetwork/lnd/assignees{/user}","branches_url":"https://api.github.com/repos/lightningnetwork/lnd/branches{/branch}","tags_url":"https://api.github.com/repos/lightningnetwork/lnd/tags","blobs_url":"https://api.github.com/repos/lightningnetwork/lnd/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lightningnetwork/lnd/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lightningnetwork/lnd/git/refs{/sha}","trees_url":"https://api.github.com/repos/lightningnetwork/lnd/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lightningnetwork/lnd/statuses/{sha}","languages_url":"https://api.github.com/repos/lightningnetwork/lnd/languages","stargazers_url":"https://api.github.com/repos/lightningnetwork/lnd/stargazers","contributors_url":"https://api.github.com/repos/lightningnetwork/lnd/contributors","subscribers_url":"https://api.github.com/repos/lightningnetwork/lnd/subscribers","subscription_url":"https://api.github.com/repos/lightningnetwork/lnd/subscription","commits_url":"https://api.github.com/repos/lightningnetwork/lnd/commits{/sha}","git_commits_url":"https://api.github.com/repos/lightningnetwork/lnd/git/commits{/sha}","comments_url":"https://api.github.com/repos/lightningnetwork/lnd/comments{/number}","issue_comment_url":"https://api.github.com/repos/lightningnetwork/lnd/issues/comments{/number}","contents_url":"https://api.github.com/repos/lightningnetwork/lnd/contents/{+path}","compare_url":"https://api.github.com/repos/lightningnetwork/lnd/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lightningnetwork/lnd/merges","archive_url":"https://api.github.com/repos/lightningnetwork/lnd/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lightningnetwork/lnd/downloads","issues_url":"https://api.github.com/repos/lightningnetwork/lnd/issues{/number}","pulls_url":"https://api.github.com/repos/lightningnetwork/lnd/pulls{/number}","milestones_url":"https://api.github.com/repos/lightningnetwork/lnd/milestones{/number}","notifications_url":"https://api.github.com/repos/lightningnetwork/lnd/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lightningnetwork/lnd/labels{/name}","releases_url":"https://api.github.com/repos/lightningnetwork/lnd/releases{/id}","deployments_url":"https://api.github.com/repos/lightningnetwork/lnd/deployments","created_at":"2016-01-16T08:19:33Z","updated_at":"2018-10-31T07:27:19Z","pushed_at":"2018-10-31T07:26:57Z","git_url":"git://github.com/lightningnetwork/lnd.git","ssh_url":"git@github.com:lightningnetwork/lnd.git","clone_url":"https://github.com/lightningnetwork/lnd.git","svn_url":"https://github.com/lightningnetwork/lnd","homepage":"","size":21472,"stargazers_count":3165,"watchers_count":3165,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":803,"mirror_url":null,"archived":false,"open_issues_count":294,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":803,"open_issues":294,"watchers":3165,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/lightningnetwork/lnd/pulls/2004"},"html":{"href":"https://github.com/lightningnetwork/lnd/pull/2004"},"issue":{"href":"https://api.github.com/repos/lightningnetwork/lnd/issues/2004"},"comments":{"href":"https://api.github.com/repos/lightningnetwork/lnd/issues/2004/comments"},"review_comments":{"href":"https://api.github.com/repos/lightningnetwork/lnd/pulls/2004/comments"},"review_comment":{"href":"https://api.github.com/repos/lightningnetwork/lnd/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/lightningnetwork/lnd/pulls/2004/commits"},"statuses":{"href":"https://api.github.com/repos/lightningnetwork/lnd/statuses/e6b1a27cd732ff8bb644bba71f4bb27ca3a8abef"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"halseth"}}