{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":236685850,"defaultBranch":"master","name":"btcd","ownerLogin":"kcalvinalvin","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2020-01-28T08:07:14.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/37185887?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1714913034.0","currentOid":""},"activityList":{"items":[{"before":null,"after":"5fbd6e6c4c056f96b91a5bf0c9a315ce478a7b3a","ref":"refs/heads/2024-05-05-add-rpccalls-for-invalidate-and-reconsiderblock","pushedAt":"2024-05-05T12:43:54.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"rpcclient, integration: Add invalidateblock and reconsiderblock\n\ninvalidateblock and reconsiderblock are added to the rpcclient package\nand an integration test is added to test the added functions.","shortMessageHtmlLink":"rpcclient, integration: Add invalidateblock and reconsiderblock"}},{"before":null,"after":"d65999e4a18171bde2be9c015ba68ed3e9c175d9","ref":"refs/heads/2024-05-01-fix-logs","pushedAt":"2024-05-01T09:02:20.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"main: add logging if the node is pruned\n\nFor debug purposes down the road, log that the node is pruned if it's\nset to pruned.","shortMessageHtmlLink":"main: add logging if the node is pruned"}},{"before":null,"after":"7c04bd86ac54fbe404e1085e569a35d83ea370e2","ref":"refs/heads/2024-04-30-add-reconsiderblock","pushedAt":"2024-04-30T10:49:53.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: Add ReconsiderBlock to BlockChain\n\nReconsiderBlock reconsiders the validity of the block for the passed\nin blockhash. The behavior of the function mimics that of Bitcoin Core.\n\nThe invalid status of the block nodes are reset and if the chaintip that\nis being reconsidered has more cumulative work, then we'll validate the\nblocks and reorganize to it. If the cumulative work is lesser than the\ncurrent active chain tip, then nothing else will be done.","shortMessageHtmlLink":"blockchain: Add ReconsiderBlock to BlockChain"}},{"before":"fa7e3d867b902f05348f64742d5923e665e33d95","after":"635ae689578399e2d6e867468f93188fdc52a368","ref":"refs/heads/2024-04-02-invalidate-block","pushedAt":"2024-04-30T08:13:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: Add InvalidateBlock() method to BlockChain\n\nInvalidateBlock() invalidates a given block and marks all its\ndescendents as invalid as well. The active chain tip changes if the\ninvalidated block is part of the best chain.","shortMessageHtmlLink":"blockchain: Add InvalidateBlock() method to BlockChain"}},{"before":"2960f40ceb04821253ed44c4a21e11ff23ea5d3e","after":"fa7e3d867b902f05348f64742d5923e665e33d95","ref":"refs/heads/2024-04-02-invalidate-block","pushedAt":"2024-04-30T07:30:31.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: Add InvalidateBlock() method to BlockChain\n\nInvalidateBlock() invalidates a given block and marks all its\ndescendents as invalid as well. The active chain tip changes if the\ninvalidated block is part of the best chain.","shortMessageHtmlLink":"blockchain: Add InvalidateBlock() method to BlockChain"}},{"before":null,"after":"c8add355ea1926d813033b3acd3a480f47c7194d","ref":"refs/heads/2024-04-23-update-dnsseeds","pushedAt":"2024-04-22T18:59:36.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"chaincfg: add dnsseed from wiz\n\nIt's the same infrastructure that mempool . space runs on and has been\nreliable. The same seed is also included in Bitcoin Core as well.","shortMessageHtmlLink":"chaincfg: add dnsseed from wiz"}},{"before":null,"after":"390052bd2783afa0e159aed2d3cc0a1036be7c93","ref":"refs/heads/2024-04-23-add-darwin-arm","pushedAt":"2024-04-22T18:39:10.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"release: add darwin-arm64 to target binaries\n\nAll currently released Apple computers have arm architecture and it's\ngood to release something native for these computers.","shortMessageHtmlLink":"release: add darwin-arm64 to target binaries"}},{"before":"7e9b7968b36b9b4ed1cedc1d6bed3f0c1092f2cf","after":"2960f40ceb04821253ed44c4a21e11ff23ea5d3e","ref":"refs/heads/2024-04-02-invalidate-block","pushedAt":"2024-04-22T17:53:04.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: Add InvalidateBlock() method to BlockChain\n\nInvalidateBlock() invalidates a given block and marks all its\ndescendents as invalid as well. The active chain tip changes if the\ninvalidated block is part of the best chain.","shortMessageHtmlLink":"blockchain: Add InvalidateBlock() method to BlockChain"}},{"before":"6b3238e0e33057f164982d1bfd9c9ec3e72f3074","after":"7e9b7968b36b9b4ed1cedc1d6bed3f0c1092f2cf","ref":"refs/heads/2024-04-02-invalidate-block","pushedAt":"2024-04-22T17:19:04.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: Add InvalidateBlock() method to BlockChain\n\nInvalidateBlock() invalidates a given block and marks all its\ndescendents as invalid as well. The active chain tip changes if the\ninvalidated block is part of the best chain.","shortMessageHtmlLink":"blockchain: Add InvalidateBlock() method to BlockChain"}},{"before":"f565afdea32f10c7428dd1c573267940b6a81843","after":"6b3238e0e33057f164982d1bfd9c9ec3e72f3074","ref":"refs/heads/2024-04-02-invalidate-block","pushedAt":"2024-04-22T13:05:23.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: Add InvalidateBlock() method to BlockChain\n\nInvalidateBlock() invalidates a given block and marks all its\ndescendents as invalid as well. The active chain tip changes if the\ninvalidated block is part of the best chain.","shortMessageHtmlLink":"blockchain: Add InvalidateBlock() method to BlockChain"}},{"before":"89ec64efc82b4e51ab84688ec0ac9d8de61b173a","after":"bc6396ddfd097f93e2eaf0d1346ab80735eaa169","ref":"refs/heads/2024-04-02-add-is-ancestor","pushedAt":"2024-04-08T08:47:36.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: Add IsAncestor method to blockNode\n\nIsAncestor() provides functionality for testing if a block node is\nan ancestor of anther block node.","shortMessageHtmlLink":"blockchain: Add IsAncestor method to blockNode"}},{"before":null,"after":"f565afdea32f10c7428dd1c573267940b6a81843","ref":"refs/heads/2024-04-02-invalidate-block","pushedAt":"2024-04-02T08:59:16.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: Add InvalidateBlock() method to BlockChain\n\nInvalidateBlock() invalidates a given block and marks all its\ndescendents as invalid as well. The active chain tip changes if the\ninvalidated block is part of the best chain.","shortMessageHtmlLink":"blockchain: Add InvalidateBlock() method to BlockChain"}},{"before":null,"after":"89ec64efc82b4e51ab84688ec0ac9d8de61b173a","ref":"refs/heads/2024-04-02-add-is-ancestor","pushedAt":"2024-04-02T05:20:50.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: Add IsAncestor method to blockNode\n\nIsAncestor() provides functionality for testing if a block node is\nan ancestor of anther block node.","shortMessageHtmlLink":"blockchain: Add IsAncestor method to blockNode"}},{"before":null,"after":"1c1e3231b33988f51ec9835945d4d72418e3483c","ref":"refs/heads/2024-01-15-save-what-i-havew-1","pushedAt":"2024-04-01T15:52:44.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"extra","shortMessageHtmlLink":"extra"}},{"before":null,"after":"059a668e888fd1d9a06d1c53d91117997ca51c4d","ref":"refs/heads/2024-03-07-make-duplicate-entries-on-mapslice-impossible","pushedAt":"2024-03-07T06:44:58.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: check all the maps first before adding an entry\n\nWhen attempting to insert an entry to the mapslice, we check all the\nunderlying maps to ensure that the entry doesn't exist.","shortMessageHtmlLink":"blockchain: check all the maps first before adding an entry"}},{"before":"99846b08055b018eb83a489c679621bcedac4a56","after":"078815bcbccf34a43e6f92ca1644459cbac7e1b8","ref":"refs/heads/2024-02-15-no-utxocache-loading-on-reorgs","pushedAt":"2024-03-07T06:44:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: remove utxoview from the argument in connectBlock\n\nSince no code is now depending on accepting new blocks without the\ncache, we get rid of the option to do so.","shortMessageHtmlLink":"blockchain: remove utxoview from the argument in connectBlock"}},{"before":"a254998bc5e348a227cdb454ffca0e9e3857c4a1","after":"99846b08055b018eb83a489c679621bcedac4a56","ref":"refs/heads/2024-02-15-no-utxocache-loading-on-reorgs","pushedAt":"2024-03-05T17:45:16.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: remove unused fetchUtxosMain()","shortMessageHtmlLink":"blockchain: remove unused fetchUtxosMain()"}},{"before":"f76a887eb6ae3a8e10d1ad7ac63921ade5400209","after":"a254998bc5e348a227cdb454ffca0e9e3857c4a1","ref":"refs/heads/2024-02-15-no-utxocache-loading-on-reorgs","pushedAt":"2024-03-05T17:41:17.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: change reorg utxo cache behavior\n\nThe assumption in the previous code was incorrect in that we were\nassuming that the chainLock is held throughout the entire chain reorg.\nThis is not the case since the chainLock is let go of during the\ncallback to the subscribers.\n\nBecause of this, we need to ensure that the utxo set is consistent on\neach block disconnect. To achieve this, additional flushes are added\nduring block disconnects.\n\nAlso the utxocache is no longer avoided during block connects and when\nwe're checking for the validity of the block connects and disconnects as\nwe can just use the cache instead of trying to avoid it.","shortMessageHtmlLink":"blockchain: change reorg utxo cache behavior"}},{"before":"7ff38e734081c5f5b49322072ca723c0d6028b01","after":"f2caa8fadcb21ab7656975f750f51c4222d64e41","ref":"refs/heads/2024-02-15-dont-rely-on-height-fetching","pushedAt":"2024-03-05T17:15:58.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: don't rely on BlockHeightByHash for prune height\ncalculations\n\nSince BlockHeightByHash only returns the heights for blocks that are in\nthe main chain, when a block that is stale gets pruned, this will cause\nan error in the block height lookup and cause an error in block\nprocessing.\n\nLook up the node directly from the index and if the node isn't found,\njust skip that node. For utxoCache.lastFlushHash, if that isn't found,\njust force a flush.","shortMessageHtmlLink":"blockchain: don't rely on BlockHeightByHash for prune height"}},{"before":"609ed8b6c942120ddcb112ba9acd31545eda2c96","after":"f9da3387f1766a5c8e30662710b48915f3549bda","ref":"refs/heads/2024-03-05-fix-intermittent-addrmgr-bug","pushedAt":"2024-03-05T07:33:16.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"addrmgr: fix intermittent addrmanager_internal_test bug\n\nSometimes the tests in the addrmanager_internal_test will fail with:\n\"addrmanager_internal_test.go: expected to find 5 addresses, found 4\"\n\nThis is because the generated address with randAddr() may not always\ngenerate an address that's routable. If the address is not routable,\nthat address will not be added to the manager when calling AddAddress().\n\nThis bug is fixed by creating a new function routableRandAddr() that\nalways creates a routable random address.","shortMessageHtmlLink":"addrmgr: fix intermittent addrmanager_internal_test bug"}},{"before":"a40dda055df05521b0410ced898752689443d114","after":"609ed8b6c942120ddcb112ba9acd31545eda2c96","ref":"refs/heads/2024-03-05-fix-intermittent-addrmgr-bug","pushedAt":"2024-03-05T07:32:29.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"addrmgr: fix intermittent addrmanager_internal_test bug\n\nSometimes the tests in the addrmanager_internal_test will fail with:\n\"addrmanager_internal_test.go: expected to find 5 addresses, found 4\"\n\nThis is because the generated address with randAddr() may not always\ngenerate an address that's routable. If the address is not routable,\nthat address will not be added to the manager when calling AddAddress().\n\nThis bug is fixed by creating a new function routableRandAddr() that\nalways creates a routable random address.","shortMessageHtmlLink":"addrmgr: fix intermittent addrmanager_internal_test bug"}},{"before":null,"after":"a40dda055df05521b0410ced898752689443d114","ref":"refs/heads/2024-03-05-fix-intermittent-addrmgr-bug","pushedAt":"2024-03-05T07:31:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"addrmgr: fix intermittent addrmanager_internal_test bug\n\nSometimes the tests in the addrmanager_internal_test will fail with:\n\"addrmanager_internal_test.go: expected to find 5 addresses, found 4\"\n\nThis is because the generated address with randAddr() may not always\ngenerate an address that's routable. If the address is not routable,\nthat address will not be added to the manager when calling AddAddress().\n\nThis bug is fixed by creating a new function routableRandAddr() that\nalways creates a routable random address.","shortMessageHtmlLink":"addrmgr: fix intermittent addrmanager_internal_test bug"}},{"before":null,"after":"3d1150a1a853ea57059ca1ad41c558d5343a31bd","ref":"refs/heads/2024-02-27-no-panic-for-subscription-callback-errors","pushedAt":"2024-02-27T05:38:09.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: always relock chainLock for subscription callbacks\n\nFor various b.sendNotifcation() callbacks, if a runtime panic happens,\nwe don't get any useful debugging information since the error that\nhappens first is the \"unlock of unlocked mutex\" error.\n\nThis is because we temporarily unlock the chainLock for callbacks and\nthen relock them. However, since the relocking code is executed after\nthe completion of the callback, if an error happens during that\ncallback, we never relock the chainLock.\n\nSwitching to an anonymous function and having the unlock code as a\ndefer will ensure that the lock always relocks.","shortMessageHtmlLink":"blockchain: always relock chainLock for subscription callbacks"}},{"before":"42f313cc4bd513084ad8df80f10a9221d0076f69","after":"7ff38e734081c5f5b49322072ca723c0d6028b01","ref":"refs/heads/2024-02-15-dont-rely-on-height-fetching","pushedAt":"2024-02-21T13:54:45.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: don't rely on BlockHeightByHash for prune height\ncalculations\n\nSince BlockHeightByHash only returns the heights for blocks that are in\nthe main chain, when a block that is stale gets pruned, this will cause\nan error in the block height lookup and cause an error in block\nprocessing.\n\nLook up the node directly from the index and if the node isn't found,\njust skip that node. For utxoCache.lastFlushHash, if that isn't found,\njust force a flush.","shortMessageHtmlLink":"blockchain: don't rely on BlockHeightByHash for prune height"}},{"before":"65ecf4a25386c0edbe9a9621c504fdf799b285f8","after":"f76a887eb6ae3a8e10d1ad7ac63921ade5400209","ref":"refs/heads/2024-02-15-no-utxocache-loading-on-reorgs","pushedAt":"2024-02-21T10:09:09.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: change reorg utxo cache behavior\n\nThe assumption in the previous code was incorrect in that we were\nassuming that the chainLock is held throughout the entire chain reorg.\nThis is not the case since the chainLock is let go of during the\ncallback to the subscribers.\n\nBecause of this, we need to ensure that the utxo set is consistent on\neach block disconnect. To achieve this, additional flushes are added\nduring block disconnects.\n\nAlso the utxocache is no longer avoided during block connects and when\nwe're checking for the validity of the block connects and disconnects as\nwe can just use the cache instead of trying to avoid it.","shortMessageHtmlLink":"blockchain: change reorg utxo cache behavior"}},{"before":"de1be7d66fc292ed3c8a9ec2352f70a0c5e7ca69","after":"65ecf4a25386c0edbe9a9621c504fdf799b285f8","ref":"refs/heads/2024-02-15-no-utxocache-loading-on-reorgs","pushedAt":"2024-02-21T09:17:11.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: change reorg utxo cache behavior\n\nThe assumption in the previous code was incorrect in that we were\nassuming that the chainLock is held throughout the entire chain reorg.\nThis is not the case since the chainLock is let go of during the\ncallback to the subscribers.\n\nBecause of this, we need to ensure that the utxo set is consistent on\neach block disconnect. To achieve this, additional flushes are added\nduring block disconnects.\n\nAlso the utxocache is no longer avoided during block connects and when\nwe're checking for the validity of the block connects and disconnects as\nwe can just use the cache instead of trying to avoid it.","shortMessageHtmlLink":"blockchain: change reorg utxo cache behavior"}},{"before":null,"after":"65ecf4a25386c0edbe9a9621c504fdf799b285f8","ref":"refs/heads/2024-02-20-fix-utxocache-inconsistency","pushedAt":"2024-02-21T09:16:08.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: change reorg utxo cache behavior\n\nThe assumption in the previous code was incorrect in that we were\nassuming that the chainLock is held throughout the entire chain reorg.\nThis is not the case since the chainLock is let go of during the\ncallback to the subscribers.\n\nBecause of this, we need to ensure that the utxo set is consistent on\neach block disconnect. To achieve this, additional flushes are added\nduring block disconnects.\n\nAlso the utxocache is no longer avoided during block connects and when\nwe're checking for the validity of the block connects and disconnects as\nwe can just use the cache instead of trying to avoid it.","shortMessageHtmlLink":"blockchain: change reorg utxo cache behavior"}},{"before":null,"after":"de1be7d66fc292ed3c8a9ec2352f70a0c5e7ca69","ref":"refs/heads/2024-02-15-no-utxocache-loading-on-reorgs","pushedAt":"2024-02-16T18:29:05.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: fix inconsistent utxocache and database on reorg","shortMessageHtmlLink":"blockchain: fix inconsistent utxocache and database on reorg"}},{"before":"17837af8304155e4afce66fc9a262c347d414ed8","after":"42f313cc4bd513084ad8df80f10a9221d0076f69","ref":"refs/heads/2024-02-15-dont-rely-on-height-fetching","pushedAt":"2024-02-16T07:17:48.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: don't rely on BlockHeightByHash for prune height\ncalculations\n\nSince BlockHeightByHash only returns the heights for blocks that are in\nthe main chain, when a block that is stale gets pruned, this will cause\nan error in the block height lookup and cause an error in block\nprocessing.\n\nLook up the node directly from the index and if the node isn't found,\njust skip that node. For utxoCache.lastFlushHash, if that isn't found,\njust force a flush.","shortMessageHtmlLink":"blockchain: don't rely on BlockHeightByHash for prune height"}},{"before":"52a6f6231c0f1da352bd58a59a397258ba229fed","after":"17837af8304155e4afce66fc9a262c347d414ed8","ref":"refs/heads/2024-02-15-dont-rely-on-height-fetching","pushedAt":"2024-02-16T06:51:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kcalvinalvin","name":"Calvin Kim","path":"/kcalvinalvin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/37185887?s=80&v=4"},"commit":{"message":"blockchain: add case for pruning stale blocks\n\nPruning stale blocks will make the block validation fail for the block\nthat the prune was triggered on as BlockHeightByHash will not return the\nheight for blocks that are not in the main chain.\n\nWe add a test case to ensure that the test fails in the above case.","shortMessageHtmlLink":"blockchain: add case for pruning stale blocks"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEQdYCBQA","startCursor":null,"endCursor":null}},"title":"Activity ยท kcalvinalvin/btcd"}