CINXE.COM
History for src/validation.cpp - bitcoin/bitcoin · GitHub
<!DOCTYPE html> <html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system" data-a11y-link-underlines="true" > <head> <meta charset="utf-8"> <link rel="dns-prefetch" href="https://github.githubassets.com"> <link rel="dns-prefetch" href="https://avatars.githubusercontent.com"> <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> <link rel="preconnect" href="https://github.githubassets.com" crossorigin> <link rel="preconnect" href="https://avatars.githubusercontent.com"> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-7aa84bb7e11e.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-f65db3e8d171.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-a8258e3c6dda.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-7e97d834719c.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-01d869f460be.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-534f3e971240.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-a8cc7d138001.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-35e9dfdc4f9f.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-cf4cc5f62dfe.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-d9abecd14f1e.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-93aded0ee8a1.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-8bed0685a4b5.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-15d4b28ab680.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-4fce88777fa8.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-0210be90f4d3.css" /> <script type="application/json" id="client-env">{"locale":"en","featureFlags":["a11y_quote_reply_fix","copilot_immersive_file_preview","copilot_new_references_ui","copilot_personal_instructions","copilot_personal_instructions_templates","copilot_chat_repo_custom_instructions_preview","copilot_chat_immersive_subthreading","copilot_chat_retry_on_error","copilot_chat_persist_submitted_input","copilot_conversational_ux_history_refs","copilot_chat_shared_chat_input","copilot_editor_upsells","copilot_implicit_context","copilot_no_floating_button","copilot_smell_icebreaker_ux","copilot_read_shared_conversation","dotcom_chat_client_side_skills","experimentation_azure_variant_endpoint","failbot_handle_non_errors","geojson_azure_maps","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","github_models_o3_mini_streaming","hide_billing_usage_filters","hovercard_accessibility","insert_before_patch","issues_advanced_search_custom_queries","issues_react_remove_placeholders","issues_react_blur_item_picker_on_close","issues_react_include_bots_in_pickers","marketing_pages_search_explore_provider","remove_child_patch","sample_network_conn_type","swp_enterprise_contact_form","site_copilot_extensions_ga","site_copilot_extensions_hero","site_copilot_vscode_link_update","site_proxima_australia_update","issues_react_create_milestone","issues_react_cache_fix_workaround","lifecycle_label_name_updates"]}</script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-b73f4ebc2b59.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover_js-9da652f58479.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_arianotify-polyfill_ariaNotify-polyfill_js-node_modules_github_mi-3abb8f-d7e6bc799724.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-4600dbf2d60a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-f04cb2a9fc8c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_index_mjs-0dbb79f97f8f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-f690fd9ae3d5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_relative-time-element_dist_index_js-f6da4b3fa34c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-8e9f78-a74b4e0a8a6b.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_text-expander-element_dist_index_js-78748950cb0c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b5f1d7-a1760ffda83d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_markdown-toolbar-element_dist_index_js-ceef33f593fa.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_primer_view-co-c44a69-8094ee2ecc5e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-c5fd390b3ba0.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-b91e8c7aa0b9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_braintree_browser-detection_dist_browser-detection_js-node_modules_githu-bb80ec-72267f4e3ff9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-be8cb88f481b.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_morphdom_dist_morphdom-e-7c534c-a4a1922eb55f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_turbo_dist_turbo_es2017-esm_js-e3cbe28f1638.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-893f9f-6cf3320416b8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_color-convert_index_js-e3180fe3bcb3.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_session-resume_-69cfcc-bc42a18e77d5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-a1563f62660e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_sso_ts-ui_packages-900dde-035d0557f18e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-3e000c5d31a9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_include-87a4ae-97019968d380.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-e429cff6ceb1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-8ac983183615.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-f6223d90c7ba.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-01e85cd1be94.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_virtualized-list_es_index_js-node_modules_github_template-parts_lib_index_js-94dc7a2157c1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-3eebbd-0763620ad7bf.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_delegated-events_di-e161aa-9d41fb1b6c9e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_remote--3c9c82-7238cfcdaa51.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_ref-selector_ts-3e9d848bab5f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repositories-7a0dbaa42c57.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/primer-react-9a5713772ca5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-core-d0cc61cb9985.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-f1bca44e0926.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/octicons-react-611691cca2f6.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_emotion_is-prop-valid_dist_emotion-is-prop-valid_esm_js-node_modules_emo-62da9f-2df2f32ec596.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-e7dcdd-f7cc96ebae76.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-55fea94174bf.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_dompurify_dist_purify_js-b89b98661809.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lodash-es__Stack_js-node_modules_lodash-es__Uint8Array_js-node_modules_l-4faaa6-4a736fde5c2f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_date-fns_format_mjs-6e4d0f904632.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_date-fns_addWeeks_mjs-node_modules_date-fns_addYears_mjs-node_modules_da-827f4f-cf37cd06c24f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_react-relay_index_js-3e4c69718bad.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_focus-visible_dist_focus-visible_js-node_modules_fzy_js_index_js-node_mo-39e45c-b992ce5622d4.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryObserver_js-node_modules_tanstack_-defd52-843b41414e0e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_hotkey_dist_index_js-node_modules_date-fns_getDaysInMonth_mjs-nod-70c11b-75afe0f5c344.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lodash-es__baseIsEqual_js-8929eb9718d5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_combobox-nav_dist_index_js-node_modules_github_g-emoji-element_di-cff384-b7d3c96e5f18.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_react-relay_hooks_js-node_modules_color2k_dist_index_exports_import_es_m-05025c-dd04247c9c77.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_react-query_build_modern_useMutation_js-node_modules_tanstack_r-8c7f45-61a93e5806f6.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_hydro-analytics-33e0f9-c254e4a7f3e5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_aria-live_aria-live_ts-ui_packages_promise-with-resolvers-polyfill_promise-with-r-17c672-d6b5ea82572a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_paths_index_ts-8b8414d250a8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ui-commands_ui-commands_ts-97496b0f52ba.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_list-view_src_ListItem_ListItem_tsx-ui_packages_list-view_src_ListItem_Title_tsx--68e5b9-2bc29a0628ce.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_date-picker_date-picker_ts-ui_packages_github-avatar_GitHubAvatar_tsx-df9548397fca.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_item-picker_constants_labels_ts-ui_packages_item-picker_constants_values_ts-ui_pa-163a9a-5949c2b63962.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_item-picker_components_RepositoryPicker_tsx-fed97f53635f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_comment-box_api_file-upload_ts-ui_packages_comment-box_api_preview_ts-ui_packages-630ec3-082d3cc19579.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_issue-create_dialog_CreateIssueDialogEntry_tsx-928cec6d6ddf.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ref-selector_RefSelector_tsx-7496afc3784d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_code-view-shared_utilities_web-worker_ts-ui_packages_diff-file-header_diff-file-h-8f6e15-5f5415e20b41.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_code-view-shared_worker-jobs_debounced-worker-manager_ts-ui_packages_commit-attri-a6ddb4-3e35b26a503b.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/commits-c37dee2124b3.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.2b41f48ec06f29182cb4.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/commits.70d59188961353ce1e96.module.css" /> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-4a07d5e6bdd6.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.2b41f48ec06f29182cb4.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css" /> <title>History for src/validation.cpp - bitcoin/bitcoin · GitHub</title> <meta name="route-pattern" content="/:user_id/:repository/commits(/*name)" data-turbo-transient> <meta name="route-controller" content="commits" data-turbo-transient> <meta name="route-action" content="show" data-turbo-transient> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> <meta name="request-id" content="E3F6:1ECED3:F09EF:111C97:67BFD516" data-pjax-transient="true"/><meta name="html-safe-nonce" content="bf1902eb204f354bcfd2f562c2b9c507f2b27c0ca1e1ecf651eb8df1cf80a062" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFM0Y2OjFFQ0VEMzpGMDlFRjoxMTFDOTc6NjdCRkQ1MTYiLCJ2aXNpdG9yX2lkIjoiNTY0MTczNTIwMTk5NTM0NzIyMiIsInJlZ2lvbl9lZGdlIjoic291dGhlYXN0YXNpYSIsInJlZ2lvbl9yZW5kZXIiOiJzb3V0aGVhc3Rhc2lhIn0=" data-pjax-transient="true"/><meta name="visitor-hmac" content="fa340c54795fefb85c0cb265cf1299cc53e9bda31aaf3853c6740dcf9acfa093" data-pjax-transient="true"/> <meta name="hovercard-subject-tag" content="repository:1181927" data-turbo-transient> <meta name="github-keyboard-shortcuts" content="repository,commit-list,copilot" data-turbo-transient="true" /> <meta name="selected-link" value="/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp" data-turbo-transient> <link rel="assets" href="https://github.githubassets.com/"> <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I"> <meta name="octolytics-url" content="https://collector.github.com/github/collect" /> <meta name="analytics-location" content="/<user-name>/<repo-name>/commits/show" data-turbo-transient="true" /> <meta name="user-login" content=""> <meta name="viewport" content="width=device-width"> <meta name="description" content="Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub."> <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> <meta property="fb:app_id" content="1401488693436528"> <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp" /> <meta name="twitter:image" content="https://opengraph.githubassets.com/2dced5f2a310a87edceb868373982c3c3295be7bab2691a0fd44945301e25f84/bitcoin/bitcoin" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="History for src/validation.cpp - bitcoin/bitcoin" /><meta name="twitter:description" content="Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub." /> <meta property="og:image" content="https://opengraph.githubassets.com/2dced5f2a310a87edceb868373982c3c3295be7bab2691a0fd44945301e25f84/bitcoin/bitcoin" /><meta property="og:image:alt" content="Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub." /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="History for src/validation.cpp - bitcoin/bitcoin" /><meta property="og:url" content="https://github.com/bitcoin/bitcoin" /><meta property="og:description" content="Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub." /> <meta name="hostname" content="github.com"> <meta name="expected-hostname" content="github.com"> <meta http-equiv="x-pjax-version" content="19ce5e9d3b8db63d64afa203a5ff1a7f08c32c6883f1da90f5af44a196541cb5" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="ace39c3b6632770952207593607e6e0be0db363435a8b877b1f96abe6430f345" data-turbo-track="reload"> <meta http-equiv="x-pjax-css-version" content="249d206a8cd18f10036cb45c470746438fc2c46dae40dbaa0f80bb8c4539b047" data-turbo-track="reload"> <meta http-equiv="x-pjax-js-version" content="dd3593079b5f5c9a95640f89c04b7c1839c6841825057a8186e4c1d4017fed03" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> <meta name="turbo-cache-control" content="no-cache" data-turbo-transient> <meta name="go-import" content="github.com/bitcoin/bitcoin git https://github.com/bitcoin/bitcoin.git"> <meta name="octolytics-dimension-user_id" content="528860" /><meta name="octolytics-dimension-user_login" content="bitcoin" /><meta name="octolytics-dimension-repository_id" content="1181927" /><meta name="octolytics-dimension-repository_nwo" content="bitcoin/bitcoin" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="1181927" /><meta name="octolytics-dimension-repository_network_root_nwo" content="bitcoin/bitcoin" /> <meta name="turbo-body-classes" content="logged-out env-production page-responsive"> <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png"> <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon"> <meta name="theme-color" content="#1e2327"> <meta name="color-scheme" content="light dark" /> <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> </head> <body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div class="position-relative header-wrapper js-header-wrapper "> <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a> <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full"> <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> </span> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-c79a97a16b04.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.2b41f48ec06f29182cb4.module.css" /> <react-partial partial-name="keyboard-shortcuts-dialog" data-ssr="false" data-attempted-ssr="false" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script> <div data-target="react-partial.reactRoot"></div> </react-partial> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-56e2d9924e94.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/sessions-730dca81d0a2.js"></script> <header class="HeaderMktg header-logged-out js-details-container js-header Details f4 py-3" role="banner" data-is-top="true" data-color-mode=light data-light-theme=light data-dark-theme=dark> <h2 class="sr-only">Navigation Menu</h2> <button type="button" class="HeaderMktg-backdrop d-lg-none border-0 position-fixed top-0 left-0 width-full height-full js-details-target" aria-label="Toggle navigation"> <span class="d-none">Toggle navigation</span> </button> <div class="d-flex flex-column flex-lg-row flex-items-center px-3 px-md-4 px-lg-5 height-full position-relative z-1"> <div class="d-flex flex-justify-between flex-items-center width-full width-lg-auto"> <div class="flex-1"> <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="js-details-target js-nav-padding-recalculate js-header-menu-toggle Button--link Button--medium Button d-lg-none color-fg-inherit p-1"> <span class="Button-content"> <span class="Button-label"><div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div></span> </span> </button> </div> <a class="mr-lg-3 color-fg-inherit flex-order-2 js-prevent-focus-on-mobile-nav" href="/" aria-label="Homepage" data-analytics-event="{"category":"Marketing nav","action":"click to go to homepage","label":"ref_page:Marketing;ref_cta:Logomark;ref_loc:Header"}"> <svg height="32" aria-hidden="true" viewBox="0 0 24 24" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path> </svg> </a> <div class="flex-1 flex-order-2 text-right"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2Fbitcoin%2Fbitcoin%2Fcommits%2F332c6134bb15384e5b91c631e821fe52a591d3bc%2Fsrc%2Fvalidation.cpp" class="HeaderMenu-link HeaderMenu-button d-inline-flex d-lg-none flex-order-1 f5 no-underline border color-border-default rounded-2 px-2 py-1 color-fg-inherit js-prevent-focus-on-mobile-nav" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp","user_id":null}}" data-hydro-click-hmac="217fd54682a472cd3ca96069f1afc40e9c2ff96b415ebfd5debb6cdc8c6c896c" data-analytics-event="{"category":"Marketing nav","action":"click to Sign in","label":"ref_page:Marketing;ref_cta:Sign in;ref_loc:Header"}" > Sign in </a> </div> </div> <div class="HeaderMenu js-header-menu height-fit position-lg-relative d-lg-flex flex-column flex-auto top-0"> <div class="HeaderMenu-wrapper d-flex flex-column flex-self-start flex-lg-row flex-auto rounded rounded-lg-0"> <nav class="HeaderMenu-nav" aria-label="Global"> <ul class="d-lg-flex list-style-none"> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Product <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"github_copilot","context":"product","tag":"link","label":"github_copilot_link_product_navbar"}" href="https://github.com/features/copilot"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Copilot</div> Write better code with AI </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"security","context":"product","tag":"link","label":"security_link_product_navbar"}" href="https://github.com/features/security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">Security</div> Find and fix vulnerabilities </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"actions","context":"product","tag":"link","label":"actions_link_product_navbar"}" href="https://github.com/features/actions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-workflow color-fg-subtle mr-3"> <path d="M1 3a2 2 0 0 1 2-2h6.5a2 2 0 0 1 2 2v6.5a2 2 0 0 1-2 2H7v4.063C7 16.355 7.644 17 8.438 17H12.5v-2.5a2 2 0 0 1 2-2H21a2 2 0 0 1 2 2V21a2 2 0 0 1-2 2h-6.5a2 2 0 0 1-2-2v-2.5H8.437A2.939 2.939 0 0 1 5.5 15.562V11.5H3a2 2 0 0 1-2-2Zm2-.5a.5.5 0 0 0-.5.5v6.5a.5.5 0 0 0 .5.5h6.5a.5.5 0 0 0 .5-.5V3a.5.5 0 0 0-.5-.5ZM14.5 14a.5.5 0 0 0-.5.5V21a.5.5 0 0 0 .5.5H21a.5.5 0 0 0 .5-.5v-6.5a.5.5 0 0 0-.5-.5Z"></path> </svg> <div> <div class="color-fg-default h4">Actions</div> Automate any workflow </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"codespaces","context":"product","tag":"link","label":"codespaces_link_product_navbar"}" href="https://github.com/features/codespaces"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-codespaces color-fg-subtle mr-3"> <path d="M3.5 3.75C3.5 2.784 4.284 2 5.25 2h13.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 18.75 13H5.25a1.75 1.75 0 0 1-1.75-1.75Zm-2 12c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v4a1.75 1.75 0 0 1-1.75 1.75H3.25a1.75 1.75 0 0 1-1.75-1.75ZM5.25 3.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h13.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Zm-2 12a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h17.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25Z"></path><path d="M10 17.75a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> <div> <div class="color-fg-default h4">Codespaces</div> Instant dev environments </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"issues","context":"product","tag":"link","label":"issues_link_product_navbar"}" href="https://github.com/features/issues"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-issue-opened color-fg-subtle mr-3"> <path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Zm9.5 2a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 14Z"></path> </svg> <div> <div class="color-fg-default h4">Issues</div> Plan and track work </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"code_review","context":"product","tag":"link","label":"code_review_link_product_navbar"}" href="https://github.com/features/code-review"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-review color-fg-subtle mr-3"> <path d="M10.3 6.74a.75.75 0 0 1-.04 1.06l-2.908 2.7 2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M1.5 4.25c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v12.5a1.75 1.75 0 0 1-1.75 1.75h-9.69l-3.573 3.573A1.458 1.458 0 0 1 5 21.043V18.5H3.25a1.75 1.75 0 0 1-1.75-1.75ZM3.25 4a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 .75.75v3.19l3.72-3.72a.749.749 0 0 1 .53-.22h10a.25.25 0 0 0 .25-.25V4.25a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Review</div> Manage code changes </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"discussions","context":"product","tag":"link","label":"discussions_link_product_navbar"}" href="https://github.com/features/discussions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Discussions</div> Collaborate outside of code </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"code_search","context":"product","tag":"link","label":"code_search_link_product_navbar"}" href="https://github.com/features/code-search"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-square color-fg-subtle mr-3"> <path d="M10.3 8.24a.75.75 0 0 1-.04 1.06L7.352 12l2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M2 3.75C2 2.784 2.784 2 3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0 1 20.25 22H3.75A1.75 1.75 0 0 1 2 20.25Zm1.75-.25a.25.25 0 0 0-.25.25v16.5c0 .138.112.25.25.25h16.5a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Search</div> Find more, search less </div> </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="product-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="product-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"all_features","context":"product","tag":"link","label":"all_features_link_product_navbar"}" href="https://github.com/features"> All features </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"documentation","context":"product","tag":"link","label":"documentation_link_product_navbar"}" href="https://docs.github.com"> Documentation <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"github_skills","context":"product","tag":"link","label":"github_skills_link_product_navbar"}" href="https://skills.github.com"> GitHub Skills <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"blog","context":"product","tag":"link","label":"blog_link_product_navbar"}" href="https://github.blog"> Blog <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Solutions <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 pb-lg-3 mb-3 mb-lg-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-company-size-heading">By company size</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-company-size-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"enterprises","context":"solutions","tag":"link","label":"enterprises_link_solutions_navbar"}" href="https://github.com/enterprise"> Enterprises </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"small_and_medium_teams","context":"solutions","tag":"link","label":"small_and_medium_teams_link_solutions_navbar"}" href="https://github.com/team"> Small and medium teams </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"startups","context":"solutions","tag":"link","label":"startups_link_solutions_navbar"}" href="https://github.com/enterprise/startups"> Startups </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"nonprofits","context":"solutions","tag":"link","label":"nonprofits_link_solutions_navbar"}" href="/solutions/industry/nonprofits"> Nonprofits </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-use-case-heading">By use case</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-use-case-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devsecops","context":"solutions","tag":"link","label":"devsecops_link_solutions_navbar"}" href="/solutions/use-case/devsecops"> DevSecOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"solutions","tag":"link","label":"devops_link_solutions_navbar"}" href="/solutions/use-case/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ci_cd","context":"solutions","tag":"link","label":"ci_cd_link_solutions_navbar"}" href="/solutions/use-case/ci-cd"> CI/CD </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all_use_cases","context":"solutions","tag":"link","label":"view_all_use_cases_link_solutions_navbar"}" href="/solutions/use-case"> View all use cases </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-industry-heading">By industry</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-industry-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"healthcare","context":"solutions","tag":"link","label":"healthcare_link_solutions_navbar"}" href="/solutions/industry/healthcare"> Healthcare </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"financial_services","context":"solutions","tag":"link","label":"financial_services_link_solutions_navbar"}" href="/solutions/industry/financial-services"> Financial services </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"manufacturing","context":"solutions","tag":"link","label":"manufacturing_link_solutions_navbar"}" href="/solutions/industry/manufacturing"> Manufacturing </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"government","context":"solutions","tag":"link","label":"government_link_solutions_navbar"}" href="/solutions/industry/government"> Government </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all_industries","context":"solutions","tag":"link","label":"view_all_industries_link_solutions_navbar"}" href="/solutions/industry"> View all industries </a></li> </ul> </div> </div> <div class="HeaderMenu-trailing-link rounded-bottom-2 flex-shrink-0 mt-lg-4 px-lg-4 py-4 py-lg-3 f5 text-semibold"> <a href="/solutions"> View all solutions <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-right HeaderMenu-trailing-link-icon"> <path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path> </svg> </a> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Resources <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-topics-heading">Topics</span> <ul class="list-style-none f5" aria-labelledby="resources-topics-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ai","context":"resources","tag":"link","label":"ai_link_resources_navbar"}" href="/resources/articles/ai"> AI </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"resources","tag":"link","label":"devops_link_resources_navbar"}" href="/resources/articles/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"security","context":"resources","tag":"link","label":"security_link_resources_navbar"}" href="/resources/articles/security"> Security </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"software_development","context":"resources","tag":"link","label":"software_development_link_resources_navbar"}" href="/resources/articles/software-development"> Software Development </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all","context":"resources","tag":"link","label":"view_all_link_resources_navbar"}" href="/resources/articles"> View all </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="resources-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"learning_pathways","context":"resources","tag":"link","label":"learning_pathways_link_resources_navbar"}" href="https://resources.github.com/learn/pathways"> Learning Pathways <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"events_amp_webinars","context":"resources","tag":"link","label":"events_amp_webinars_link_resources_navbar"}" href="https://resources.github.com"> Events & Webinars <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ebooks_amp_whitepapers","context":"resources","tag":"link","label":"ebooks_amp_whitepapers_link_resources_navbar"}" href="https://github.com/resources/whitepapers"> Ebooks & Whitepapers </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"customer_stories","context":"resources","tag":"link","label":"customer_stories_link_resources_navbar"}" href="https://github.com/customer-stories"> Customer Stories </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"partners","context":"resources","tag":"link","label":"partners_link_resources_navbar"}" href="https://partner.github.com"> Partners <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"executive_insights","context":"resources","tag":"link","label":"executive_insights_link_resources_navbar"}" href="https://github.com/solutions/executive-insights"> Executive Insights </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Open Source <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"github_sponsors","context":"open_source","tag":"link","label":"github_sponsors_link_open_source_navbar"}" href="/sponsors"> <div> <div class="color-fg-default h4">GitHub Sponsors</div> Fund open source developers </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"the_readme_project","context":"open_source","tag":"link","label":"the_readme_project_link_open_source_navbar"}" href="https://github.com/readme"> <div> <div class="color-fg-default h4">The ReadME Project</div> GitHub community articles </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="open-source-repositories-heading">Repositories</span> <ul class="list-style-none f5" aria-labelledby="open-source-repositories-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"topics","context":"open_source","tag":"link","label":"topics_link_open_source_navbar"}" href="https://github.com/topics"> Topics </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"trending","context":"open_source","tag":"link","label":"trending_link_open_source_navbar"}" href="https://github.com/trending"> Trending </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"collections","context":"open_source","tag":"link","label":"collections_link_open_source_navbar"}" href="https://github.com/collections"> Collections </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Enterprise <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"enterprise_platform","context":"enterprise","tag":"link","label":"enterprise_platform_link_enterprise_navbar"}" href="/enterprise"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-stack color-fg-subtle mr-3"> <path d="M11.063 1.456a1.749 1.749 0 0 1 1.874 0l8.383 5.316a1.751 1.751 0 0 1 0 2.956l-8.383 5.316a1.749 1.749 0 0 1-1.874 0L2.68 9.728a1.751 1.751 0 0 1 0-2.956Zm1.071 1.267a.25.25 0 0 0-.268 0L3.483 8.039a.25.25 0 0 0 0 .422l8.383 5.316a.25.25 0 0 0 .268 0l8.383-5.316a.25.25 0 0 0 0-.422Z"></path><path d="M1.867 12.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path><path d="M1.867 16.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path> </svg> <div> <div class="color-fg-default h4">Enterprise platform</div> AI-powered developer platform </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="enterprise-available-add-ons-heading">Available add-ons</span> <ul class="list-style-none f5" aria-labelledby="enterprise-available-add-ons-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"advanced_security","context":"enterprise","tag":"link","label":"advanced_security_link_enterprise_navbar"}" href="https://github.com/enterprise/advanced-security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">Advanced Security</div> Enterprise-grade security features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"github_copilot","context":"enterprise","tag":"link","label":"github_copilot_link_enterprise_navbar"}" href="/features/copilot#enterprise"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Copilot</div> Enterprise-grade AI features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"premium_support","context":"enterprise","tag":"link","label":"premium_support_link_enterprise_navbar"}" href="/premium-support"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Premium Support</div> Enterprise-grade 24/7 support </div> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <a class="HeaderMenu-link no-underline px-0 px-lg-2 py-3 py-lg-2 d-block d-lg-inline-block" data-analytics-event="{"location":"navbar","action":"pricing","context":"global","tag":"link","label":"pricing_link_global_navbar"}" href="https://github.com/pricing">Pricing</a> </li> </ul> </nav> <div class="d-flex flex-column flex-lg-row width-full flex-justify-end flex-lg-items-center text-center mt-3 mt-lg-0 text-lg-left ml-lg-3"> <qbsearch-input class="search-input" data-scope="repo:bitcoin/bitcoin" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="59r9ucKpbVxQ09w676QiU7xg0DVgHOukbb5Btg8LbPn2EacTNCK6gfVai_PlTsz9cyDVMdSXCNNTiN3CfwPSRw" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="bitcoin/bitcoin" data-current-org="bitcoin" data-current-owner="" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> <div class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center mr-4 rounded" data-action="click:qbsearch-input#searchInputContainerClicked" > <button type="button" class="header-search-button placeholder input-button form-control d-flex flex-1 flex-self-stretch flex-items-center no-wrap width-full py-0 pl-2 pr-0 text-left border-0 box-shadow-none" data-target="qbsearch-input.inputButton" aria-label="Search or jump to…" aria-haspopup="dialog" placeholder="Search or jump to..." data-hotkey=s,/ autocapitalize="off" data-analytics-event="{"location":"navbar","action":"searchbar","context":"global","tag":"input","label":"searchbar_input_global_navbar"}" data-action="click:qbsearch-input#handleExpand" > <div class="mr-2 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </div> <span class="flex-1" data-target="qbsearch-input.inputButtonText">Search or jump to...</span> <div class="d-flex" data-target="qbsearch-input.hotkeyIndicator"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="20" aria-hidden="true" class="mr-1"><path fill="none" stroke="#979A9C" opacity=".4" d="M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z"></path><path fill="#979A9C" d="M11.8 6L8 15.1h-.9L10.8 6h1z"></path></svg> </div> </button> <input type="hidden" name="type" class="js-site-search-type-field"> <div class="Overlay--hidden " data-modal-dialog-overlay> <modal-dialog data-action="close:qbsearch-input#handleClose cancel:qbsearch-input#handleClose" data-target="qbsearch-input.searchSuggestionsDialog" role="dialog" id="search-suggestions-dialog" aria-modal="true" aria-labelledby="search-suggestions-dialog-header" data-view-component="true" class="Overlay Overlay--width-large Overlay--height-auto"> <h1 id="search-suggestions-dialog-header" class="sr-only">Search code, repositories, users, issues, pull requests...</h1> <div class="Overlay-body Overlay-body--paddingNone"> <div data-view-component="true"> <div class="search-suggestions position-fixed width-full color-shadow-large border color-fg-default color-bg-default overflow-hidden d-flex flex-column query-builder-container" style="border-radius: 12px;" data-target="qbsearch-input.queryBuilderContainer" hidden > <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="query-builder-test-form" action="" accept-charset="UTF-8" method="get"> <query-builder data-target="qbsearch-input.queryBuilder" id="query-builder-query-builder-test" data-filter-key=":" data-view-component="true" class="QueryBuilder search-query-builder"> <div class="FormControl FormControl--fullWidth"> <label id="query-builder-test-label" for="query-builder-test" class="FormControl-label sr-only"> Search </label> <div class="QueryBuilder-StyledInput width-fit " data-target="query-builder.styledInput" > <span id="query-builder-test-leadingvisual-wrap" class="FormControl-input-leadingVisualWrap QueryBuilder-leadingVisualWrap"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search FormControl-input-leadingVisual"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </span> <div data-target="query-builder.styledInputContainer" class="QueryBuilder-StyledInputContainer"> <div aria-hidden="true" class="QueryBuilder-StyledInputContent" data-target="query-builder.styledInputContent" ></div> <div class="QueryBuilder-InputWrapper"> <div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"></div> <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-3365f122-2ac6-4abc-b2a2-06102b57a808" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown focus:query-builder#inputFocus " data-view-component="true" class="FormControl-input QueryBuilder-Input FormControl-medium" /> </div> </div> <span class="sr-only" id="query-builder-test-clear">Clear</span> <button role="button" id="query-builder-test-clear-button" aria-labelledby="query-builder-test-clear query-builder-test-label" data-target="query-builder.clearButton" data-action=" click:query-builder#clear focus:query-builder#clearButtonFocus blur:query-builder#clearButtonBlur " variant="small" hidden="hidden" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium mr-1 px-2 py-0 d-flex flex-items-center rounded-1 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill Button-visual"> <path d="M2.343 13.657A8 8 0 1 1 13.658 2.343 8 8 0 0 1 2.343 13.657ZM6.03 4.97a.751.751 0 0 0-1.042.018.751.751 0 0 0-.018 1.042L6.94 8 4.97 9.97a.749.749 0 0 0 .326 1.275.749.749 0 0 0 .734-.215L8 9.06l1.97 1.97a.749.749 0 0 0 1.275-.326.749.749 0 0 0-.215-.734L9.06 8l1.97-1.97a.749.749 0 0 0-.326-1.275.749.749 0 0 0-.734.215L8 6.94Z"></path> </svg> </button> </div> <template id="search-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </template> <template id="code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="file-code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-file-code"> <path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path> </svg> </template> <template id="history-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-history"> <path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path> </svg> </template> <template id="repo-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> </template> <template id="bookmark-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bookmark"> <path d="M3 2.75C3 1.784 3.784 1 4.75 1h6.5c.966 0 1.75.784 1.75 1.75v11.5a.75.75 0 0 1-1.227.579L8 11.722l-3.773 3.107A.751.751 0 0 1 3 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.91l3.023-2.489a.75.75 0 0 1 .954 0l3.023 2.49V2.75a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="plus-circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus-circle"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm7.25-3.25v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> </template> <template id="trash-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash"> <path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"></path> </svg> </template> <template id="team-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-people"> <path d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z"></path> </svg> </template> <template id="project-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project"> <path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z"></path> </svg> </template> <template id="pencil-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil"> <path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"></path> </svg> </template> <template id="copilot-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot"> <path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="copilot-error-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot-error"> <path d="M16 11.24c0 .112-.072.274-.21.467L13 9.688V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-.198 0-.388-.009-.571-.029L6.833 5.226a4.01 4.01 0 0 0 .17-.782c.117-.935-.037-1.395-.241-1.614-.193-.206-.637-.413-1.682-.297-.683.076-1.115.231-1.395.415l-1.257-.91c.579-.564 1.413-.877 2.485-.996 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095Zm-5.083-8.707c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Zm2.511 11.074c-1.393.776-3.272 1.428-5.43 1.428-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.18-.455-.241-.963-.252-1.475L.31 4.107A.747.747 0 0 1 0 3.509V3.49a.748.748 0 0 1 .625-.73c.156-.026.306.047.435.139l14.667 10.578a.592.592 0 0 1 .227.264.752.752 0 0 1 .046.249v.022a.75.75 0 0 1-1.19.596Zm-1.367-.991L5.635 7.964a5.128 5.128 0 0 1-.889.073c-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433 1.539 0 3.089-.505 4.063-.934Z"></path> </svg> </template> <template id="workflow-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-workflow"> <path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="book-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> </template> <template id="code-review-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-review"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 13H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25v-8.5C0 1.784.784 1 1.75 1ZM1.5 2.75v8.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm5.28 1.72a.75.75 0 0 1 0 1.06L5.31 7l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.75.75 0 0 1 1.06 0Zm2.44 0a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L10.69 7 9.22 5.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="codespaces-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-codespaces"> <path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> </template> <template id="comment-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="comment-discussion-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> </template> <template id="organization-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-organization"> <path d="M1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.749.749 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.766.766 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75Zm-.25-1.75c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM3.75 6h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75Zm4 3A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75ZM7.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75ZM7.75 9h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="rocket-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-rocket"> <path d="M14.064 0h.186C15.216 0 16 .784 16 1.75v.186a8.752 8.752 0 0 1-2.564 6.186l-.458.459c-.314.314-.641.616-.979.904v3.207c0 .608-.315 1.172-.833 1.49l-2.774 1.707a.749.749 0 0 1-1.11-.418l-.954-3.102a1.214 1.214 0 0 1-.145-.125L3.754 9.816a1.218 1.218 0 0 1-.124-.145L.528 8.717a.749.749 0 0 1-.418-1.11l1.71-2.774A1.748 1.748 0 0 1 3.31 4h3.204c.288-.338.59-.665.904-.979l.459-.458A8.749 8.749 0 0 1 14.064 0ZM8.938 3.623h-.002l-.458.458c-.76.76-1.437 1.598-2.02 2.5l-1.5 2.317 2.143 2.143 2.317-1.5c.902-.583 1.74-1.26 2.499-2.02l.459-.458a7.25 7.25 0 0 0 2.123-5.127V1.75a.25.25 0 0 0-.25-.25h-.186a7.249 7.249 0 0 0-5.125 2.123ZM3.56 14.56c-.732.732-2.334 1.045-3.005 1.148a.234.234 0 0 1-.201-.064.234.234 0 0 1-.064-.201c.103-.671.416-2.273 1.15-3.003a1.502 1.502 0 1 1 2.12 2.12Zm6.94-3.935c-.088.06-.177.118-.266.175l-2.35 1.521.548 1.783 1.949-1.2a.25.25 0 0 0 .119-.213ZM3.678 8.116 5.2 5.766c.058-.09.117-.178.176-.266H3.309a.25.25 0 0 0-.213.119l-1.2 1.95ZM12 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </template> <template id="shield-check-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield-check"> <path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="heart-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart"> <path d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z"></path> </svg> </template> <template id="server-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-server"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v4c0 .372-.116.717-.314 1 .198.283.314.628.314 1v4a1.75 1.75 0 0 1-1.75 1.75H1.75A1.75 1.75 0 0 1 0 12.75v-4c0-.358.109-.707.314-1a1.739 1.739 0 0 1-.314-1v-4C0 1.784.784 1 1.75 1ZM1.5 2.75v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm.25 5.75a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25ZM7 4.75A.75.75 0 0 1 7.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5A.75.75 0 0 1 7 4.75ZM7.75 10h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM3 4.75A.75.75 0 0 1 3.75 4h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 4.75ZM3.75 10h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="globe-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-globe"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"></path> </svg> </template> <template id="issue-opened-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </template> <template id="device-mobile-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile"> <path d="M3.75 0h8.5C13.216 0 14 .784 14 1.75v12.5A1.75 1.75 0 0 1 12.25 16h-8.5A1.75 1.75 0 0 1 2 14.25V1.75C2 .784 2.784 0 3.75 0ZM3.5 1.75v12.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM8 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> </template> <template id="package-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-package"> <path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"></path> </svg> </template> <template id="credit-card-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-credit-card"> <path d="M10.75 9a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path><path d="M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25ZM14.5 6.5h-13v5.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Zm0-2.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25V5h13Z"></path> </svg> </template> <template id="play-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </template> <template id="gift-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gift"> <path d="M2 2.75A2.75 2.75 0 0 1 4.75 0c.983 0 1.873.42 2.57 1.232.268.318.497.668.68 1.042.183-.375.411-.725.68-1.044C9.376.42 10.266 0 11.25 0a2.75 2.75 0 0 1 2.45 4h.55c.966 0 1.75.784 1.75 1.75v2c0 .698-.409 1.301-1 1.582v4.918A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25V9.332C.409 9.05 0 8.448 0 7.75v-2C0 4.784.784 4 1.75 4h.55c-.192-.375-.3-.8-.3-1.25ZM7.25 9.5H2.5v4.75c0 .138.112.25.25.25h4.5Zm1.5 0v5h4.5a.25.25 0 0 0 .25-.25V9.5Zm0-4V8h5.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25Zm-7 0a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h5.5V5.5h-5.5Zm3-4a1.25 1.25 0 0 0 0 2.5h2.309c-.233-.818-.542-1.401-.878-1.793-.43-.502-.915-.707-1.431-.707ZM8.941 4h2.309a1.25 1.25 0 0 0 0-2.5c-.516 0-1 .205-1.43.707-.337.392-.646.975-.879 1.793Z"></path> </svg> </template> <template id="code-square-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="device-desktop-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-desktop"> <path d="M14.25 1c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 14.25 12h-3.727c.099 1.041.52 1.872 1.292 2.757A.752.752 0 0 1 11.25 16h-6.5a.75.75 0 0 1-.565-1.243c.772-.885 1.192-1.716 1.292-2.757H1.75A1.75 1.75 0 0 1 0 10.25v-7.5C0 1.784.784 1 1.75 1ZM1.75 2.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25ZM9.018 12H6.982a5.72 5.72 0 0 1-.765 2.5h3.566a5.72 5.72 0 0 1-.765-2.5Z"></path> </svg> </template> <div class="position-relative"> <ul role="listbox" class="ActionListWrap QueryBuilder-ListWrap" aria-label="Suggestions" data-action=" combobox-commit:query-builder#comboboxCommit mousedown:query-builder#resultsMousedown " data-target="query-builder.resultsList" data-persist-list=false id="query-builder-test-results" ></ul> </div> <div class="FormControl-inlineValidation" id="validation-3365f122-2ac6-4abc-b2a2-06102b57a808" hidden="hidden"> <span class="FormControl-inlineValidation--visual"> <svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill"> <path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path> </svg> </span> <span></span> </div> </div> <div data-target="query-builder.screenReaderFeedback" aria-live="polite" aria-atomic="true" class="sr-only"></div> </query-builder></form> <div class="d-flex flex-row color-fg-muted px-3 text-small color-bg-default search-feedback-prompt"> <a target="_blank" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax" data-view-component="true" class="Link color-fg-accent text-normal ml-2">Search syntax tips</a> <div class="d-flex flex-1"></div> </div> </div> </div> </div> </modal-dialog></div> </div> <div data-action="click:qbsearch-input#retract" class="dark-backdrop position-fixed" hidden data-target="qbsearch-input.darkBackdrop"></div> <div class="color-fg-default"> <dialog-helper> <dialog data-target="qbsearch-input.feedbackDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="feedback-dialog" aria-modal="true" aria-labelledby="feedback-dialog-title" aria-describedby="feedback-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="feedback-dialog-title"> Provide feedback </h1> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="feedback-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="feedback-dialog-title"> <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="Qk8v4EQYuhpj8kOaejkGqREEelLyD4LsXbM8YjAL+6CSJxjbJqMQgumuV1PrJB9CQjaHWeYwbJklGzQJ7h3kGw==" /> <p>We read every piece of feedback, and take your input very seriously.</p> <textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea> <input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox"> <label for="include_email" style="font-weight: normal">Include my email address so I can be contacted</label> </form></div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd"> <button data-close-dialog-id="feedback-dialog" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="code-search-feedback-form" data-action="click:qbsearch-input#submitFeedback" type="submit" data-view-component="true" class="btn-primary btn"> Submit feedback </button> </div> </dialog></dialog-helper> <custom-scopes data-target="qbsearch-input.customScopesManager"> <dialog-helper> <dialog data-target="custom-scopes.customScopesModalDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="custom-scopes-dialog" aria-modal="true" aria-labelledby="custom-scopes-dialog-title" aria-describedby="custom-scopes-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header Overlay-header--divided"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="custom-scopes-dialog-title"> Saved searches </h1> <h2 id="custom-scopes-dialog-description" class="Overlay-description">Use saved searches to filter your results more quickly</h2> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="custom-scopes-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="custom-scopes-dialog-title"> <div data-view-component="true" class="Overlay-body"> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <div hidden class="create-custom-scope-form" data-target="custom-scopes.createCustomScopeForm"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="I8kWhwhhJ850JmaIqQpicO80yB+jehK9Ktj3pLP8tnmMpM8nPeSBodXg46lBpXkeKpFbSVgpmdnhrbbjn9q71Q==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> <div class="form-group"> <label for="custom_scope_name">Name</label> <auto-check src="/search/custom_scopes/check_name" required only-validate-on-blur="false"> <input type="text" name="custom_scope_name" id="custom_scope_name" data-target="custom-scopes.customScopesNameField" class="form-control" autocomplete="off" placeholder="github-ruby" required maxlength="50"> <input type="hidden" data-csrf="true" value="Ofm3wj8c4pYyQ0FRRnevvqLeJTksLUONdp1UGFXGHbX8j4gunLTX3lnLGZUTNWZs3xPjwH6JSKA1gD+fwckxLQ==" /> </auto-check> </div> <div class="form-group"> <label for="custom_scope_query">Query</label> <input type="text" name="custom_scope_query" id="custom_scope_query" data-target="custom-scopes.customScopesQueryField" class="form-control" autocomplete="off" placeholder="(repo:mona/a OR repo:mona/b) AND lang:python" required maxlength="500"> </div> <p class="text-small color-fg-muted"> To see all available qualifiers, see our <a class="Link--inTextBlock" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax">documentation</a>. </p> </form> </div> <div data-target="custom-scopes.manageCustomScopesForm"> <div data-target="custom-scopes.list"></div> </div> </div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd Overlay-footer--divided"> <button data-action="click:custom-scopes#customScopesCancel" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="custom-scopes-dialog-form" data-action="click:custom-scopes#customScopesSubmit" data-target="custom-scopes.customScopesSubmitButton" type="submit" data-view-component="true" class="btn-primary btn"> Create saved search </button> </div> </dialog></dialog-helper> </custom-scopes> </div> </qbsearch-input> <div class="position-relative HeaderMenu-link-wrap d-lg-inline-block"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2Fbitcoin%2Fbitcoin%2Fcommits%2F332c6134bb15384e5b91c631e821fe52a591d3bc%2Fsrc%2Fvalidation.cpp" class="HeaderMenu-link HeaderMenu-link--sign-in HeaderMenu-button flex-shrink-0 no-underline d-none d-lg-inline-flex border border-lg-0 rounded rounded-lg-0 px-2 py-1" style="margin-left: 12px;" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp","user_id":null}}" data-hydro-click-hmac="217fd54682a472cd3ca96069f1afc40e9c2ff96b415ebfd5debb6cdc8c6c896c" data-analytics-event="{"category":"Marketing nav","action":"click to go to homepage","label":"ref_page:Marketing;ref_cta:Sign in;ref_loc:Header"}" > Sign in </a> </div> <a href="/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fcommits%2Fshow&source=header-repo&source_repo=bitcoin%2Fbitcoin" class="HeaderMenu-link HeaderMenu-link--sign-up HeaderMenu-button flex-shrink-0 d-flex d-lg-inline-flex no-underline border color-border-default rounded px-2 py-1" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp","user_id":null}}" data-hydro-click-hmac="217fd54682a472cd3ca96069f1afc40e9c2ff96b415ebfd5debb6cdc8c6c896c" data-analytics-event="{"category":"Sign up","action":"click to sign up for account","label":"ref_page:/<user-name>/<repo-name>/commits/show;ref_cta:Sign up;ref_loc:header logged out"}" > Sign up </a> <button type="button" class="sr-only js-header-menu-focus-trap d-block d-lg-none">Reseting focus</button> </div> </div> </div> </div> </header> <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <button id="icon-button-e66abf96-6e81-49fe-a98a-88c387e5e9d1" aria-labelledby="tooltip-746c9411-c851-4f5f-a20e-8160dc70949b" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button><tool-tip id="tooltip-746c9411-c851-4f5f-a20e-8160dc70949b" for="icon-button-e66abf96-6e81-49fe-a98a-88c387e5e9d1" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> </div> </div> <div id="start-of-content" class="show-on-focus"></div> <div id="js-flash-container" class="flash-container" data-turbo-replace> <template class="js-flash-template"> <div class="flash flash-full {{ className }}"> <div > <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div aria-atomic="true" role="alert" class="js-flash-alert"> <div>{{ message }}</div> </div> </div> </div> </template> </div> <div class="application-main " data-commit-hovercards-enabled data-discussion-hovercards-enabled data-issue-and-pr-hovercards-enabled data-project-hovercards-enabled > <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> <main id="js-repo-pjax-container" > <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace> <div class="d-flex flex-nowrap flex-justify-end mb-3 px-3 px-lg-5" style="gap: 1rem;"> <div class="flex-auto min-width-0 width-fit"> <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> <span class="author flex-self-stretch" itemprop="author"> <a class="url fn" rel="author" data-hovercard-type="organization" data-hovercard-url="/orgs/bitcoin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/bitcoin"> bitcoin </a> </span> <span class="mx-1 flex-self-stretch color-fg-muted">/</span> <strong itemprop="name" class="mr-2 flex-self-stretch"> <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/bitcoin/bitcoin">bitcoin</a> </strong> <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span> </div> </div> <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;"> <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;"> <li> <a href="/login?return_to=%2Fbitcoin%2Fbitcoin" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"notification subscription menu watch","repository_id":null,"auth_type":"LOG_IN","originating_url":"https://github.com/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp","user_id":null}}" data-hydro-click-hmac="865bd099988d1e085b3ceff33503434da067df287bcdd8b0f24c31c7caf977bf" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2"> <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path> </svg>Notifications </a> <tool-tip id="tooltip-c04bf58d-5c3f-4de8-812f-056359498fa1" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip> </li> <li> <a icon="repo-forked" id="fork-button" href="/login?return_to=%2Fbitcoin%2Fbitcoin" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"repo details fork button","repository_id":1181927,"auth_type":"LOG_IN","originating_url":"https://github.com/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp","user_id":null}}" data-hydro-click-hmac="e533715701c091b8f9620a5e0f97f3a3899a872a52b87f3e56140ed661894a90" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg>Fork <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="36,843" data-view-component="true" class="Counter">36.8k</span> </a> </li> <li> <div data-view-component="true" class="BtnGroup d-flex"> <a href="/login?return_to=%2Fbitcoin%2Fbitcoin" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"star button","repository_id":1181927,"auth_type":"LOG_IN","originating_url":"https://github.com/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp","user_id":null}}" data-hydro-click-hmac="1c1ee84985c89e37960fbbd341ed79db46284c21b486e21bacfe761f96915934" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg><span data-view-component="true" class="d-inline"> Star </span> <span id="repo-stars-counter-star" aria-label="82204 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="82,204" data-view-component="true" class="Counter js-social-count">82.2k</span> </a></div> </li> </ul> </div> </div> <div id="responsive-meta-container" data-turbo-replace> </div> <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5"> <ul data-view-component="true" class="UnderlineNav-body list-style-none"> <li data-view-component="true" class="d-inline-flex"> <a id="code-tab" href="/bitcoin/bitcoin" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /bitcoin/bitcoin" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Code","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> <span data-content="Code">Code</span> <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="issues-tab" href="/bitcoin/bitcoin/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /bitcoin/bitcoin/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Issues","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> <span data-content="Issues">Issues</span> <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="389" data-view-component="true" class="Counter">389</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="pull-requests-tab" href="/bitcoin/bitcoin/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /bitcoin/bitcoin/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Pull requests","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> <span data-content="Pull requests">Pull requests</span> <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="276" data-view-component="true" class="Counter">276</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="actions-tab" href="/bitcoin/bitcoin/actions" data-tab-item="i3actions-tab" data-selected-links="repo_actions /bitcoin/bitcoin/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Actions","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> <span data-content="Actions">Actions</span> <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="projects-tab" href="/bitcoin/bitcoin/projects" data-tab-item="i4projects-tab" data-selected-links="repo_projects new_repo_project repo_project /bitcoin/bitcoin/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Projects","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> <span data-content="Projects">Projects</span> <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="5" data-view-component="true" class="Counter">5</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="security-tab" href="/bitcoin/bitcoin/security" data-tab-item="i5security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /bitcoin/bitcoin/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Security","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span data-content="Security">Security</span> <include-fragment src="/bitcoin/bitcoin/security/overall-count" accept="text/fragment+html"></include-fragment> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="insights-tab" href="/bitcoin/bitcoin/pulse" data-tab-item="i6insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /bitcoin/bitcoin/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Insights","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> <span data-content="Insights">Insights</span> <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> </ul> <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <action-menu data-select-variant="none" data-view-component="true"> <focus-group direction="vertical" mnemonics retain> <button id="action-menu-cd2171e5-a1b7-4784-93e6-5e729bbbf10f-button" popovertarget="action-menu-cd2171e5-a1b7-4784-93e6-5e729bbbf10f-overlay" aria-controls="action-menu-cd2171e5-a1b7-4784-93e6-5e729bbbf10f-list" aria-haspopup="true" aria-labelledby="tooltip-cc886b8a-3426-4d77-8c00-41e9eaae942d" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual"> <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path> </svg> </button><tool-tip id="tooltip-cc886b8a-3426-4d77-8c00-41e9eaae942d" for="action-menu-cd2171e5-a1b7-4784-93e6-5e729bbbf10f-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip> <anchored-position data-target="action-menu.overlay" id="action-menu-cd2171e5-a1b7-4784-93e6-5e729bbbf10f-overlay" anchor="action-menu-cd2171e5-a1b7-4784-93e6-5e729bbbf10f-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true"> <div data-view-component="true" class="Overlay Overlay--size-auto"> <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone"> <action-list> <div data-view-component="true"> <ul aria-labelledby="action-menu-cd2171e5-a1b7-4784-93e6-5e729bbbf10f-button" id="action-menu-cd2171e5-a1b7-4784-93e6-5e729bbbf10f-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap"> <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-64292849-81c1-4a0b-b9b3-a39ba3891cd7" href="/bitcoin/bitcoin" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Code </span> </a> </li> <li hidden="hidden" data-menu-item="i1issues-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-c78b3164-c7f6-4e94-a9f1-be4ddda246a0" href="/bitcoin/bitcoin/issues" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Issues </span> </a> </li> <li hidden="hidden" data-menu-item="i2pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-1836fe5c-89c3-4531-b3ee-c8d5e9b4889e" href="/bitcoin/bitcoin/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Pull requests </span> </a> </li> <li hidden="hidden" data-menu-item="i3actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-11ffcb08-ce79-4c39-97fa-82b6659cb4f7" href="/bitcoin/bitcoin/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Actions </span> </a> </li> <li hidden="hidden" data-menu-item="i4projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-433ce547-bc02-4302-b572-0feb375beb3c" href="/bitcoin/bitcoin/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Projects </span> </a> </li> <li hidden="hidden" data-menu-item="i5security-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-7e743d9d-5e0e-447a-ba60-8494d4ba7eda" href="/bitcoin/bitcoin/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Security </span> </a> </li> <li hidden="hidden" data-menu-item="i6insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-3867f511-4678-4865-81bf-00cbb734e3f9" href="/bitcoin/bitcoin/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Insights </span> </a> </li> </ul> </div></action-list> </div> </div></anchored-position> </focus-group> </action-menu></div> </nav> </div> <turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class=""> <div id="repo-content-pjax-container" class="repository-content " > <react-app app-name="commits" initial-path="/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp" style="display: block; min-height: calc(100vh - 64px);" data-attempted-ssr="true" data-ssr="true" data-lazy="false" data-alternate="false" data-data-router-enabled="false" > <script type="application/json" data-target="react-app.embeddedData">{"payload":{"commitGroups":[{"title":"Jun 19, 2019","commits":[{"oid":"f724f31401b963c75bd64f5e2c5b9d9561a9a9dd","url":"/bitcoin/bitcoin/commit/f724f31401b963c75bd64f5e2c5b9d9561a9a9dd","authoredDate":"2019-04-30T20:16:45.000+03:00","committedDate":"2019-06-19T19:22:34.000+03:00","shortMessage":"Make AbortNode() aware of MSG_NOPREFIX flag","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Make AbortNode() aware of MSG_NOPREFIX flag\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/f724f31401b963c75bd64f5e2c5b9d9561a9a9dd\"\u003eMake AbortNode() aware of MSG_NOPREFIX flag\u003c/a\u003e","bodyMessageHtml":"","authors":[{"login":"hebasto","displayName":"Hennadii Stepanov","avatarUrl":"https://avatars.githubusercontent.com/u/32963518?v=4","path":"/hebasto","isGitHub":false}],"committerAttribution":false,"committer":{"login":"hebasto","displayName":"Hennadii Stepanov","avatarUrl":"https://avatars.githubusercontent.com/u/32963518?v=4","path":"/hebasto","isGitHub":false}}]},{"title":"Jun 18, 2019","commits":[{"oid":"0b68fca700713e8e4c843c982b6047dc04410bc0","url":"/bitcoin/bitcoin/commit/0b68fca700713e8e4c843c982b6047dc04410bc0","authoredDate":"2019-06-18T15:59:40.000-04:00","committedDate":"2019-06-18T15:59:53.000-04:00","shortMessage":"Merge #16092: Don't use global (external) symbols for symbols that are used in only one translation unit","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Merge #16092: Don't use global (external) symbols for symbols that are used in only one translation unit\n\n0959d37e3e Don't use global (external) symbols for symbols that are used in only one translation unit (practicalswift)\n\nPull request description:\n\n Don't use global (external) symbols for symbols that are used in only one translation unit.\n\n Before:\n\n ```\n $ for SYMBOL in $(nm src/bitcoind | grep -E ' [BD] ' | c++filt | cut -f3- -d' ' | grep -v @ | grep -v : | sort | grep '[a-z]' | sort -u | grep -vE '(^_|typeinfo|vtable)'); do\n REFERENCES=$(git grep -lE \u0026quot;([^a-zA-Z]|^)${SYMBOL}([^a-zA-Z]|\\$)\u0026quot; -- \u0026quot;*.cpp\u0026quot; \u0026quot;*.h\u0026quot;)\n N_REFERENCES=$(wc -l \u0026lt;\u0026lt;\u0026lt; \u0026quot;${REFERENCES}\u0026quot;)\n if [[ ${N_REFERENCES} \u0026gt; 1 ]]; then\n continue\n fi\n echo \u0026quot;Global symbol ${SYMBOL} is used in only one translation unit: ${REFERENCES}\u0026quot;\n done\n Global symbol g_chainstate is used in only one translation unit: src/validation.cpp\n Global symbol g_ui_signals is used in only one translation unit: src/ui_interface.cpp\n Global symbol instance_of_cmaincleanup is used in only one translation unit: src/validation.cpp\n Global symbol instance_of_cnetcleanup is used in only one translation unit: src/net.cpp\n Global symbol instance_of_cnetprocessingcleanup is used in only one translation unit: src/net_processing.cpp\n Global symbol pindexBestForkBase is used in only one translation unit: src/validation.cpp\n Global symbol pindexBestForkTip is used in only one translation unit: src/validation.cpp\n $\n ```\n\n After:\n\n ```\n $ for SYMBOL in $(nm src/bitcoind | grep -E ' [BD] ' | c++filt | cut -f3- -d' ' | grep -v @ | grep -v : | sort | grep '[a-z]' | sort -u | grep -vE '(^_|typeinfo|vtable)'); do\n REFERENCES=$(git grep -lE \u0026quot;([^a-zA-Z]|^)${SYMBOL}([^a-zA-Z]|\\$)\u0026quot; -- \u0026quot;*.cpp\u0026quot; \u0026quot;*.h\u0026quot;)\n N_REFERENCES=$(wc -l \u0026lt;\u0026lt;\u0026lt; \u0026quot;${REFERENCES}\u0026quot;)\n if [[ ${N_REFERENCES} \u0026gt; 1 ]]; then\n continue\n fi\n echo \u0026quot;Global symbol ${SYMBOL} is used in only one translation unit: ${REFERENCES}\u0026quot;\n done\n $\n ```\n\n ♻️ Think about future generations: save the global namespace from unnecessary pollution! ♻️\n\nACKs for commit 0959d3:\n Empact:\n ACK https://github.com/bitcoin/bitcoin/pull/16092/commits/0959d37e3e0f80010a78d175e3846dabf5d35919\n MarcoFalke:\n ACK 0959d37e3e0f80010a78d175e3846dabf5d35919\n hebasto:\n ACK 0959d37e3e0f80010a78d175e3846dabf5d35919\n promag:\n ACK 0959d37.\n\nTree-SHA512: 722f66bb50450f19b57e8a8fbe949f30cd651eb8564e5787cbb772a539bf3a288c048dc49e655fd73ece6a46f6dafade515ec4004729bf2b3ab83117b7c5d153\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/0b68fca700713e8e4c843c982b6047dc04410bc0\"\u003eMerge\u003c/a\u003e \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"448546178\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/16092\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/bitcoin/bitcoin/pull/16092/hovercard\" href=\"https://github.com/bitcoin/bitcoin/pull/16092\"\u003e#16092\u003c/a\u003e\u003ca data-pjax=\"true\" title=\"Merge #16092: Don't use global (external) symbols for symbols that are used in only one translation unit\n\n0959d37e3e Don't use global (external) symbols for symbols that are used in only one translation unit (practicalswift)\n\nPull request description:\n\n Don't use global (external) symbols for symbols that are used in only one translation unit.\n\n Before:\n\n ```\n $ for SYMBOL in $(nm src/bitcoind | grep -E ' [BD] ' | c++filt | cut -f3- -d' ' | grep -v @ | grep -v : | sort | grep '[a-z]' | sort -u | grep -vE '(^_|typeinfo|vtable)'); do\n REFERENCES=$(git grep -lE \u0026quot;([^a-zA-Z]|^)${SYMBOL}([^a-zA-Z]|\\$)\u0026quot; -- \u0026quot;*.cpp\u0026quot; \u0026quot;*.h\u0026quot;)\n N_REFERENCES=$(wc -l \u0026lt;\u0026lt;\u0026lt; \u0026quot;${REFERENCES}\u0026quot;)\n if [[ ${N_REFERENCES} \u0026gt; 1 ]]; then\n continue\n fi\n echo \u0026quot;Global symbol ${SYMBOL} is used in only one translation unit: ${REFERENCES}\u0026quot;\n done\n Global symbol g_chainstate is used in only one translation unit: src/validation.cpp\n Global symbol g_ui_signals is used in only one translation unit: src/ui_interface.cpp\n Global symbol instance_of_cmaincleanup is used in only one translation unit: src/validation.cpp\n Global symbol instance_of_cnetcleanup is used in only one translation unit: src/net.cpp\n Global symbol instance_of_cnetprocessingcleanup is used in only one translation unit: src/net_processing.cpp\n Global symbol pindexBestForkBase is used in only one translation unit: src/validation.cpp\n Global symbol pindexBestForkTip is used in only one translation unit: src/validation.cpp\n $\n ```\n\n After:\n\n ```\n $ for SYMBOL in $(nm src/bitcoind | grep -E ' [BD] ' | c++filt | cut -f3- -d' ' | grep -v @ | grep -v : | sort | grep '[a-z]' | sort -u | grep -vE '(^_|typeinfo|vtable)'); do\n REFERENCES=$(git grep -lE \u0026quot;([^a-zA-Z]|^)${SYMBOL}([^a-zA-Z]|\\$)\u0026quot; -- \u0026quot;*.cpp\u0026quot; \u0026quot;*.h\u0026quot;)\n N_REFERENCES=$(wc -l \u0026lt;\u0026lt;\u0026lt; \u0026quot;${REFERENCES}\u0026quot;)\n if [[ ${N_REFERENCES} \u0026gt; 1 ]]; then\n continue\n fi\n echo \u0026quot;Global symbol ${SYMBOL} is used in only one translation unit: ${REFERENCES}\u0026quot;\n done\n $\n ```\n\n ♻️ Think about future generations: save the global namespace from unnecessary pollution! ♻️\n\nACKs for commit 0959d3:\n Empact:\n ACK https://github.com/bitcoin/bitcoin/pull/16092/commits/0959d37e3e0f80010a78d175e3846dabf5d35919\n MarcoFalke:\n ACK 0959d37e3e0f80010a78d175e3846dabf5d35919\n hebasto:\n ACK 0959d37e3e0f80010a78d175e3846dabf5d35919\n promag:\n ACK 0959d37.\n\nTree-SHA512: 722f66bb50450f19b57e8a8fbe949f30cd651eb8564e5787cbb772a539bf3a288c048dc49e655fd73ece6a46f6dafade515ec4004729bf2b3ab83117b7c5d153\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/0b68fca700713e8e4c843c982b6047dc04410bc0\"\u003e: Don't use global (external) symbols for symbols that are used in only one translation unit\u003c/a\u003e","bodyMessageHtml":"\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919\"\u003e\u003ctt\u003e0959d37\u003c/tt\u003e\u003c/a\u003e Don't use global (external) symbols for symbols that are used in only one translation unit (practicalswift)\n\nPull request description:\n\n Don't use global (external) symbols for symbols that are used in only one translation unit.\n\n Before:\n\n ```\n $ for SYMBOL in $(nm src/bitcoind | grep -E ' [BD] ' | c++filt | cut -f3- -d' ' | grep -v @ | grep -v : | sort | grep '[a-z]' | sort -u | grep -vE '(^_|typeinfo|vtable)'); do\n REFERENCES=$(git grep -lE \"([^a-zA-Z]|^)${SYMBOL}([^a-zA-Z]|\\$)\" -- \"*.cpp\" \"*.h\")\n N_REFERENCES=$(wc -l \u0026lt;\u0026lt;\u0026lt; \"${REFERENCES}\")\n if [[ ${N_REFERENCES} \u0026gt; 1 ]]; then\n continue\n fi\n echo \"Global symbol ${SYMBOL} is used in only one translation unit: ${REFERENCES}\"\n done\n Global symbol g_chainstate is used in only one translation unit: src/validation.cpp\n Global symbol g_ui_signals is used in only one translation unit: src/ui_interface.cpp\n Global symbol instance_of_cmaincleanup is used in only one translation unit: src/validation.cpp\n Global symbol instance_of_cnetcleanup is used in only one translation unit: src/net.cpp\n Global symbol instance_of_cnetprocessingcleanup is used in only one translation unit: src/net_processing.cpp\n Global symbol pindexBestForkBase is used in only one translation unit: src/validation.cpp\n Global symbol pindexBestForkTip is used in only one translation unit: src/validation.cpp\n $\n ```\n\n After:\n\n ```\n $ for SYMBOL in $(nm src/bitcoind | grep -E ' [BD] ' | c++filt | cut -f3- -d' ' | grep -v @ | grep -v : | sort | grep '[a-z]' | sort -u | grep -vE '(^_|typeinfo|vtable)'); do\n REFERENCES=$(git grep -lE \"([^a-zA-Z]|^)${SYMBOL}([^a-zA-Z]|\\$)\" -- \"*.cpp\" \"*.h\")\n N_REFERENCES=$(wc -l \u0026lt;\u0026lt;\u0026lt; \"${REFERENCES}\")\n if [[ ${N_REFERENCES} \u0026gt; 1 ]]; then\n continue\n fi\n echo \"Global symbol ${SYMBOL} is used in only one translation unit: ${REFERENCES}\"\n done\n $\n ```\n\n ♻️ Think about future generations: save the global namespace from unnecessary pollution! ♻️\n\nACKs for commit 0959d3:\n Empact:\n ACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919\"\u003e\u003ctt\u003e0959d37\u003c/tt\u003e\u003c/a\u003e\n MarcoFalke:\n ACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919\"\u003e\u003ctt\u003e0959d37\u003c/tt\u003e\u003c/a\u003e\n hebasto:\n ACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919\"\u003e\u003ctt\u003e0959d37\u003c/tt\u003e\u003c/a\u003e\n promag:\n ACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919\"\u003e\u003ctt\u003e0959d37\u003c/tt\u003e\u003c/a\u003e.\n\nTree-SHA512: 722f66bb50450f19b57e8a8fbe949f30cd651eb8564e5787cbb772a539bf3a288c048dc49e655fd73ece6a46f6dafade515ec4004729bf2b3ab83117b7c5d153","authors":[{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}],"committerAttribution":false,"committer":{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}}]},{"title":"Jun 8, 2019","commits":[{"oid":"8053e5cdade87550f0381d51feab81dedfec6c46","url":"/bitcoin/bitcoin/commit/8053e5cdade87550f0381d51feab81dedfec6c46","authoredDate":"2019-06-08T08:58:46.000-04:00","committedDate":"2019-06-08T09:32:33.000-04:00","shortMessage":"Remove -mempoolreplacement to prevent needless block prop slowness.","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Remove -mempoolreplacement to prevent needless block prop slowness.\n\nAt this point there is no reasonable excuse to disable opt-in RBF,\nand, unlike when this option was added, there are now significant\nissues created when disabling it (in the form of compact block\nreconstruction failures). Further, it breaks a lot of modern wallet\nbehavior.\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/8053e5cdade87550f0381d51feab81dedfec6c46\"\u003eRemove -mempoolreplacement to prevent needless block prop slowness.\u003c/a\u003e","bodyMessageHtml":"At this point there is no reasonable excuse to disable opt-in RBF,\nand, unlike when this option was added, there are now significant\nissues created when disabling it (in the form of compact block\nreconstruction failures). Further, it breaks a lot of modern wallet\nbehavior.","authors":[{"login":"TheBlueMatt","displayName":"Matt Corallo","avatarUrl":"https://avatars.githubusercontent.com/u/649246?v=4","path":"/TheBlueMatt","isGitHub":false}],"committerAttribution":false,"committer":{"login":"TheBlueMatt","displayName":"Matt Corallo","avatarUrl":"https://avatars.githubusercontent.com/u/649246?v=4","path":"/TheBlueMatt","isGitHub":false}}]},{"title":"Jun 6, 2019","commits":[{"oid":"d0f81a96d9c158a9226dc946bdd61d48c4d42959","url":"/bitcoin/bitcoin/commit/d0f81a96d9c158a9226dc946bdd61d48c4d42959","authoredDate":"2019-06-06T16:41:24.000+02:00","committedDate":"2019-06-06T16:41:40.000+02:00","shortMessage":"Merge #16129: refactor: Remove unused includes","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Merge #16129: refactor: Remove unused includes\n\n67f4e9c522 Include core_io.h from core_read.cpp (practicalswift)\neca9767673 Make reasoning about dependencies easier by not including unused dependencies (practicalswift)\n\nPull request description:\n\n Make reasoning about dependencies easier by not including unused dependencies.\n\n Please note that the removed headers are _not_ \u0026quot;transitively included\u0026quot; by other still included headers. Thus the removals are real.\n\n As an added bonus this change means less work for the preprocessor/compiler. At least 51 393 lines of code no longer needs to be processed:\n\n ```\n $ git diff -u HEAD~1 | grep -E '^\\-#include ' | cut -f2 -d\u0026quot;\u0026lt;\u0026quot; | cut -f1 -d\u0026quot;\u0026gt;\u0026quot; | \\\n sed 's%^%src/%g' | xargs cat | wc -l\n 51393\n ```\n\n Note that 51 393 is the lower bound: the real number is likely much higher when taking into account transitively included headers :-)\n\nACKs for commit 67f4e9:\n\nTree-SHA512: 0c8868aac59813f099ce53d5307eed7962dd6f2ff3546768ef9e5c4508b87f8210f1a22c7e826c3c06bebbf28bdbfcf1628ed354c2d0fdb9a31a42cefb8fdf13\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/d0f81a96d9c158a9226dc946bdd61d48c4d42959\"\u003eMerge\u003c/a\u003e \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"450844186\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/16129\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/bitcoin/bitcoin/pull/16129/hovercard\" href=\"https://github.com/bitcoin/bitcoin/pull/16129\"\u003e#16129\u003c/a\u003e\u003ca data-pjax=\"true\" title=\"Merge #16129: refactor: Remove unused includes\n\n67f4e9c522 Include core_io.h from core_read.cpp (practicalswift)\neca9767673 Make reasoning about dependencies easier by not including unused dependencies (practicalswift)\n\nPull request description:\n\n Make reasoning about dependencies easier by not including unused dependencies.\n\n Please note that the removed headers are _not_ \u0026quot;transitively included\u0026quot; by other still included headers. Thus the removals are real.\n\n As an added bonus this change means less work for the preprocessor/compiler. At least 51 393 lines of code no longer needs to be processed:\n\n ```\n $ git diff -u HEAD~1 | grep -E '^\\-#include ' | cut -f2 -d\u0026quot;\u0026lt;\u0026quot; | cut -f1 -d\u0026quot;\u0026gt;\u0026quot; | \\\n sed 's%^%src/%g' | xargs cat | wc -l\n 51393\n ```\n\n Note that 51 393 is the lower bound: the real number is likely much higher when taking into account transitively included headers :-)\n\nACKs for commit 67f4e9:\n\nTree-SHA512: 0c8868aac59813f099ce53d5307eed7962dd6f2ff3546768ef9e5c4508b87f8210f1a22c7e826c3c06bebbf28bdbfcf1628ed354c2d0fdb9a31a42cefb8fdf13\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/d0f81a96d9c158a9226dc946bdd61d48c4d42959\"\u003e: refactor: Remove unused includes\u003c/a\u003e","bodyMessageHtml":"\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/67f4e9c52270f9ddf8f7e83f0906af5e6743b33a/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/67f4e9c52270f9ddf8f7e83f0906af5e6743b33a\"\u003e\u003ctt\u003e67f4e9c\u003c/tt\u003e\u003c/a\u003e Include core_io.h from core_read.cpp (practicalswift)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/eca97676737174ac6ff775c60e3798c69fb67f4a/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/eca97676737174ac6ff775c60e3798c69fb67f4a\"\u003e\u003ctt\u003eeca9767\u003c/tt\u003e\u003c/a\u003e Make reasoning about dependencies easier by not including unused dependencies (practicalswift)\n\nPull request description:\n\n Make reasoning about dependencies easier by not including unused dependencies.\n\n Please note that the removed headers are _not_ \"transitively included\" by other still included headers. Thus the removals are real.\n\n As an added bonus this change means less work for the preprocessor/compiler. At least 51 393 lines of code no longer needs to be processed:\n\n ```\n $ git diff -u HEAD~1 | grep -E '^\\-#include ' | cut -f2 -d\"\u0026lt;\" | cut -f1 -d\"\u0026gt;\" | \\\n sed 's%^%src/%g' | xargs cat | wc -l\n 51393\n ```\n\n Note that 51 393 is the lower bound: the real number is likely much higher when taking into account transitively included headers :-)\n\nACKs for commit 67f4e9:\n\nTree-SHA512: 0c8868aac59813f099ce53d5307eed7962dd6f2ff3546768ef9e5c4508b87f8210f1a22c7e826c3c06bebbf28bdbfcf1628ed354c2d0fdb9a31a42cefb8fdf13","authors":[{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}],"committerAttribution":false,"committer":{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}},{"oid":"0959d37e3e0f80010a78d175e3846dabf5d35919","url":"/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919","authoredDate":"2019-05-26T11:01:58.000+02:00","committedDate":"2019-06-06T07:45:56.000+02:00","shortMessage":"Don't use global (external) symbols for symbols that are used in only one translation unit","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Don\u0026#39;t use global (external) symbols for symbols that are used in only one translation unit\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919\"\u003eDon't use global (external) symbols for symbols that are used in only one translation unit\u003c/a\u003e","bodyMessageHtml":"","authors":[{"login":"practicalswift","displayName":"practicalswift","avatarUrl":"https://avatars.githubusercontent.com/u/7826565?v=4","path":"/practicalswift","isGitHub":false}],"committerAttribution":false,"committer":{"login":"practicalswift","displayName":"practicalswift","avatarUrl":"https://avatars.githubusercontent.com/u/7826565?v=4","path":"/practicalswift","isGitHub":false}}]},{"title":"Jun 5, 2019","commits":[{"oid":"5d37c1bde01a7c43ed7ac1ab50cc41ff7d849ca9","url":"/bitcoin/bitcoin/commit/5d37c1bde01a7c43ed7ac1ab50cc41ff7d849ca9","authoredDate":"2019-06-05T11:41:42.000+02:00","committedDate":"2019-06-05T11:56:23.000+02:00","shortMessage":"Merge #15976: refactor: move methods under CChainState (pt. 1)","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Merge #15976: refactor: move methods under CChainState (pt. 1)\n\n403e677c9 refactoring: IsInitialBlockDownload -\u0026gt; CChainState (James O'Beirne)\n3ccbc376d refactoring: FlushStateToDisk -\u0026gt; CChainState (James O'Beirne)\n4d6688603 refactoring: introduce ChainstateActive() (James O'Beirne)\nd7c97edee move-only: make the CChainState interface public (James O'Beirne)\n\nPull request description:\n\n This is part of the [assumeutxo project](https://github.com/bitcoin/bitcoin/projects/11):\n\n Parent PR: #15606\n Issue: #15605\n Specification: https://github.com/jamesob/assumeutxo-docs/tree/2019-04-proposal/proposal\n\n ---\n\n This changeset starts moving functionality intimately related to CChainState into methods. Parameterizing these functions by a particular CChainState is necessary for the use of multiple chainstates simultaneously (e.g. for asynchronous background validation).\n\n In this change, we\n - make the CChainState interface public - since other units will start to invoke its methods directly,\n - introduce `::ChainstateActive()`, the CChainState equivalent for `::ChainActive()`,\n - and move `IsInitialBlockDownload()` and `FlushStateToDisk()` into methods on CChainState.\n\n Independent of assumeutxo, these changes better encapsulate chainstate behavior and allow easier use from a testing context.\n\n There are more methods that we'll move in the future, but they require other substantial changes (i.e. moving ownership of the `CCoinsView*` hierarchy into CChainState) so we'll save them for future PRs.\n\n ---\n\n The first move-only commit is most easily reviewed with `git diff ... --color-moved=dimmed_zebra`.\n\nACKs for commit 403e67:\n Empact:\n utACK https://github.com/bitcoin/bitcoin/pull/15976/commits/403e677c9ebbf9744733010e6b0c2d1b182ee850 no need to address my nits herein\n Sjors:\n utACK 403e677\n ryanofsky:\n utACK 403e677c9ebbf9744733010e6b0c2d1b182ee850. Only change since previous review is removing global state comment as suggested.\n MarcoFalke:\n utACK 403e677c9e, though the diff still seems a bit bloated with some unnecessary changes in the second commit.\n promag:\n utACK 403e677 and rebased with current [master](c7cfd20a7).\n\nTree-SHA512: 6fcf260bb2dc201361170c0b4547405366f5f331fcc3a2bac29b24442814b7b244ca1b58aac5af716885f9a130c343b544590dff780da0bf835c7c5b3ccb2257\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/5d37c1bde01a7c43ed7ac1ab50cc41ff7d849ca9\"\u003eMerge\u003c/a\u003e \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"441393785\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/15976\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/bitcoin/bitcoin/pull/15976/hovercard\" href=\"https://github.com/bitcoin/bitcoin/pull/15976\"\u003e#15976\u003c/a\u003e\u003ca data-pjax=\"true\" title=\"Merge #15976: refactor: move methods under CChainState (pt. 1)\n\n403e677c9 refactoring: IsInitialBlockDownload -\u0026gt; CChainState (James O'Beirne)\n3ccbc376d refactoring: FlushStateToDisk -\u0026gt; CChainState (James O'Beirne)\n4d6688603 refactoring: introduce ChainstateActive() (James O'Beirne)\nd7c97edee move-only: make the CChainState interface public (James O'Beirne)\n\nPull request description:\n\n This is part of the [assumeutxo project](https://github.com/bitcoin/bitcoin/projects/11):\n\n Parent PR: #15606\n Issue: #15605\n Specification: https://github.com/jamesob/assumeutxo-docs/tree/2019-04-proposal/proposal\n\n ---\n\n This changeset starts moving functionality intimately related to CChainState into methods. Parameterizing these functions by a particular CChainState is necessary for the use of multiple chainstates simultaneously (e.g. for asynchronous background validation).\n\n In this change, we\n - make the CChainState interface public - since other units will start to invoke its methods directly,\n - introduce `::ChainstateActive()`, the CChainState equivalent for `::ChainActive()`,\n - and move `IsInitialBlockDownload()` and `FlushStateToDisk()` into methods on CChainState.\n\n Independent of assumeutxo, these changes better encapsulate chainstate behavior and allow easier use from a testing context.\n\n There are more methods that we'll move in the future, but they require other substantial changes (i.e. moving ownership of the `CCoinsView*` hierarchy into CChainState) so we'll save them for future PRs.\n\n ---\n\n The first move-only commit is most easily reviewed with `git diff ... --color-moved=dimmed_zebra`.\n\nACKs for commit 403e67:\n Empact:\n utACK https://github.com/bitcoin/bitcoin/pull/15976/commits/403e677c9ebbf9744733010e6b0c2d1b182ee850 no need to address my nits herein\n Sjors:\n utACK 403e677\n ryanofsky:\n utACK 403e677c9ebbf9744733010e6b0c2d1b182ee850. Only change since previous review is removing global state comment as suggested.\n MarcoFalke:\n utACK 403e677c9e, though the diff still seems a bit bloated with some unnecessary changes in the second commit.\n promag:\n utACK 403e677 and rebased with current [master](c7cfd20a7).\n\nTree-SHA512: 6fcf260bb2dc201361170c0b4547405366f5f331fcc3a2bac29b24442814b7b244ca1b58aac5af716885f9a130c343b544590dff780da0bf835c7c5b3ccb2257\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/5d37c1bde01a7c43ed7ac1ab50cc41ff7d849ca9\"\u003e: refactor: move methods under CChainState (pt. 1)\u003c/a\u003e","bodyMessageHtml":"\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850\"\u003e\u003ctt\u003e403e677\u003c/tt\u003e\u003c/a\u003e refactoring: IsInitialBlockDownload -\u0026gt; CChainState (James O'Beirne)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/3ccbc376dd313fb7666471f24f6d9370914d00f3/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/3ccbc376dd313fb7666471f24f6d9370914d00f3\"\u003e\u003ctt\u003e3ccbc37\u003c/tt\u003e\u003c/a\u003e refactoring: FlushStateToDisk -\u0026gt; CChainState (James O'Beirne)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/4d6688603b8c8df854d52df464e157d0a6e7bde6/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/4d6688603b8c8df854d52df464e157d0a6e7bde6\"\u003e\u003ctt\u003e4d66886\u003c/tt\u003e\u003c/a\u003e refactoring: introduce ChainstateActive() (James O'Beirne)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/d7c97edeea8cee10ad9da1f940d39d5073ac142d/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/d7c97edeea8cee10ad9da1f940d39d5073ac142d\"\u003e\u003ctt\u003ed7c97ed\u003c/tt\u003e\u003c/a\u003e move-only: make the CChainState interface public (James O'Beirne)\n\nPull request description:\n\n This is part of the [assumeutxo project](\u003ca href=\"https://github.com/bitcoin/bitcoin/projects/11\"\u003ehttps://github.com/bitcoin/bitcoin/projects/11\u003c/a\u003e):\n\n Parent PR: \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"421531882\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/15606\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/bitcoin/bitcoin/pull/15606/hovercard\" href=\"https://github.com/bitcoin/bitcoin/pull/15606\"\u003e#15606\u003c/a\u003e\n Issue: \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"421527231\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/15605\" data-hovercard-type=\"issue\" data-hovercard-url=\"/bitcoin/bitcoin/issues/15605/hovercard\" href=\"https://github.com/bitcoin/bitcoin/issues/15605\"\u003e#15605\u003c/a\u003e\n Specification: \u003ca href=\"https://github.com/jamesob/assumeutxo-docs/tree/2019-04-proposal/proposal\"\u003ehttps://github.com/jamesob/assumeutxo-docs/tree/2019-04-proposal/proposal\u003c/a\u003e\n\n ---\n\n This changeset starts moving functionality intimately related to CChainState into methods. Parameterizing these functions by a particular CChainState is necessary for the use of multiple chainstates simultaneously (e.g. for asynchronous background validation).\n\n In this change, we\n - make the CChainState interface public - since other units will start to invoke its methods directly,\n - introduce `::ChainstateActive()`, the CChainState equivalent for `::ChainActive()`,\n - and move `IsInitialBlockDownload()` and `FlushStateToDisk()` into methods on CChainState.\n\n Independent of assumeutxo, these changes better encapsulate chainstate behavior and allow easier use from a testing context.\n\n There are more methods that we'll move in the future, but they require other substantial changes (i.e. moving ownership of the `CCoinsView*` hierarchy into CChainState) so we'll save them for future PRs.\n\n ---\n\n The first move-only commit is most easily reviewed with `git diff ... --color-moved=dimmed_zebra`.\n\nACKs for commit 403e67:\n Empact:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850\"\u003e\u003ctt\u003e403e677\u003c/tt\u003e\u003c/a\u003e no need to address my nits herein\n Sjors:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850\"\u003e\u003ctt\u003e403e677\u003c/tt\u003e\u003c/a\u003e\n ryanofsky:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850\"\u003e\u003ctt\u003e403e677\u003c/tt\u003e\u003c/a\u003e. Only change since previous review is removing global state comment as suggested.\n MarcoFalke:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850\"\u003e\u003ctt\u003e403e677\u003c/tt\u003e\u003c/a\u003e, though the diff still seems a bit bloated with some unnecessary changes in the second commit.\n promag:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850\"\u003e\u003ctt\u003e403e677\u003c/tt\u003e\u003c/a\u003e and rebased with current [master](\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/c7cfd20a77ce57d200b3b9e5e0dfb0d63818abdc/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/c7cfd20a77ce57d200b3b9e5e0dfb0d63818abdc\"\u003e\u003ctt\u003ec7cfd20\u003c/tt\u003e\u003c/a\u003e).\n\nTree-SHA512: 6fcf260bb2dc201361170c0b4547405366f5f331fcc3a2bac29b24442814b7b244ca1b58aac5af716885f9a130c343b544590dff780da0bf835c7c5b3ccb2257","authors":[{"login":"laanwj","displayName":"Wladimir J. van der Laan","avatarUrl":"https://avatars.githubusercontent.com/u/126646?v=4","path":"/laanwj","isGitHub":false}],"committerAttribution":false,"committer":{"login":"laanwj","displayName":"Wladimir J. van der Laan","avatarUrl":"https://avatars.githubusercontent.com/u/126646?v=4","path":"/laanwj","isGitHub":false}}]},{"title":"Jun 2, 2019","commits":[{"oid":"eca97676737174ac6ff775c60e3798c69fb67f4a","url":"/bitcoin/bitcoin/commit/eca97676737174ac6ff775c60e3798c69fb67f4a","authoredDate":"2019-06-01T14:25:09.000+02:00","committedDate":"2019-06-02T17:15:23.000+02:00","shortMessage":"Make reasoning about dependencies easier by not including unused dependencies","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Make reasoning about dependencies easier by not including unused dependencies\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/eca97676737174ac6ff775c60e3798c69fb67f4a\"\u003eMake reasoning about dependencies easier by not including unused dependencies\u003c/a\u003e","bodyMessageHtml":"","authors":[{"login":"practicalswift","displayName":"practicalswift","avatarUrl":"https://avatars.githubusercontent.com/u/7826565?v=4","path":"/practicalswift","isGitHub":false}],"committerAttribution":false,"committer":{"login":"practicalswift","displayName":"practicalswift","avatarUrl":"https://avatars.githubusercontent.com/u/7826565?v=4","path":"/practicalswift","isGitHub":false}}]},{"title":"May 22, 2019","commits":[{"oid":"1c177c3a004f91eca743bb3a0dd9534a544026d5","url":"/bitcoin/bitcoin/commit/1c177c3a004f91eca743bb3a0dd9534a544026d5","authoredDate":"2019-05-22T08:17:46.000-04:00","committedDate":"2019-05-22T08:17:48.000-04:00","shortMessage":"Merge #16015: validation: Hold cs_main when reading chainActive in RewindBlockIndex","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Merge #16015: validation: Hold cs_main when reading chainActive in RewindBlockIndex\n\n1609809fb2 validation: Hold cs_main when reading chainActive in RewindBlockIndex (practicalswift)\n\nPull request description:\n\n Fixes #15980.\n\n Hold `cs_main` when reading `chainActive` (via `::ChainActive()`) in `RewindBlockIndex`.\n\nACKs for commit 160980:\n MarcoFalke:\n utACK 1609809fb2a4c2ec15b7c26dc328e2e666bd5d57\n\nTree-SHA512: 54f180ab391f92f04950735c2bb337f0b7495826d2096f7a0f9a2da50bc29d08747f404a0495e33ca4edd4c842efbab4c4730d5e1a8b9da3e1249cf884268f4b\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/1c177c3a004f91eca743bb3a0dd9534a544026d5\"\u003eMerge\u003c/a\u003e \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"443140702\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/16015\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/bitcoin/bitcoin/pull/16015/hovercard\" href=\"https://github.com/bitcoin/bitcoin/pull/16015\"\u003e#16015\u003c/a\u003e\u003ca data-pjax=\"true\" title=\"Merge #16015: validation: Hold cs_main when reading chainActive in RewindBlockIndex\n\n1609809fb2 validation: Hold cs_main when reading chainActive in RewindBlockIndex (practicalswift)\n\nPull request description:\n\n Fixes #15980.\n\n Hold `cs_main` when reading `chainActive` (via `::ChainActive()`) in `RewindBlockIndex`.\n\nACKs for commit 160980:\n MarcoFalke:\n utACK 1609809fb2a4c2ec15b7c26dc328e2e666bd5d57\n\nTree-SHA512: 54f180ab391f92f04950735c2bb337f0b7495826d2096f7a0f9a2da50bc29d08747f404a0495e33ca4edd4c842efbab4c4730d5e1a8b9da3e1249cf884268f4b\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/1c177c3a004f91eca743bb3a0dd9534a544026d5\"\u003e: validation: Hold cs_main when reading chainActive in RewindBlockIndex\u003c/a\u003e","bodyMessageHtml":"\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/1609809fb2a4c2ec15b7c26dc328e2e666bd5d57/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/1609809fb2a4c2ec15b7c26dc328e2e666bd5d57\"\u003e\u003ctt\u003e1609809\u003c/tt\u003e\u003c/a\u003e validation: Hold cs_main when reading chainActive in RewindBlockIndex (practicalswift)\n\nPull request description:\n\n \u003cspan class=\"issue-keyword tooltipped tooltipped-se\" aria-label=\"This commit closes issue #15980.\"\u003eFixes\u003c/span\u003e \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"441612538\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/15980\" data-hovercard-type=\"issue\" data-hovercard-url=\"/bitcoin/bitcoin/issues/15980/hovercard\" href=\"https://github.com/bitcoin/bitcoin/issues/15980\"\u003e#15980\u003c/a\u003e.\n\n Hold `cs_main` when reading `chainActive` (via `::ChainActive()`) in `RewindBlockIndex`.\n\nACKs for commit 160980:\n MarcoFalke:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/1609809fb2a4c2ec15b7c26dc328e2e666bd5d57/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/1609809fb2a4c2ec15b7c26dc328e2e666bd5d57\"\u003e\u003ctt\u003e1609809\u003c/tt\u003e\u003c/a\u003e\n\nTree-SHA512: 54f180ab391f92f04950735c2bb337f0b7495826d2096f7a0f9a2da50bc29d08747f404a0495e33ca4edd4c842efbab4c4730d5e1a8b9da3e1249cf884268f4b","authors":[{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}],"committerAttribution":false,"committer":{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}}]},{"title":"May 19, 2019","commits":[{"oid":"7110d455eb51e78e09f43fabf0b1630ae997d898","url":"/bitcoin/bitcoin/commit/7110d455eb51e78e09f43fabf0b1630ae997d898","authoredDate":"2019-05-19T10:43:13.000+02:00","committedDate":"2019-05-19T10:43:32.000+02:00","shortMessage":"Merge #12980: Allow quicker shutdowns during LoadBlockIndex()","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Merge #12980: Allow quicker shutdowns during LoadBlockIndex()\n\naf5fa82b6 Allow quicker shutdowns during LoadBlockIndex() (Jonas Schnelli)\n\nPull request description:\n\nACKs for commit af5fa8:\n promag:\n utACK af5fa82b676a36e60eda080ca0a946bdfffefd49.\n practicalswift:\n utACK af5fa82b676a36e60eda080ca0a946bdfffefd49\n\nTree-SHA512: 1c64dcc5d8a9d3411553257cd5a598dcd29be981660e5bca9283c1d957dc56798abcf41d9969cd573088137597a23e48e62a8c476c463d3f176b86a10048f47b\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/7110d455eb51e78e09f43fabf0b1630ae997d898\"\u003eMerge\u003c/a\u003e \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"314224366\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/12980\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/bitcoin/bitcoin/pull/12980/hovercard\" href=\"https://github.com/bitcoin/bitcoin/pull/12980\"\u003e#12980\u003c/a\u003e\u003ca data-pjax=\"true\" title=\"Merge #12980: Allow quicker shutdowns during LoadBlockIndex()\n\naf5fa82b6 Allow quicker shutdowns during LoadBlockIndex() (Jonas Schnelli)\n\nPull request description:\n\nACKs for commit af5fa8:\n promag:\n utACK af5fa82b676a36e60eda080ca0a946bdfffefd49.\n practicalswift:\n utACK af5fa82b676a36e60eda080ca0a946bdfffefd49\n\nTree-SHA512: 1c64dcc5d8a9d3411553257cd5a598dcd29be981660e5bca9283c1d957dc56798abcf41d9969cd573088137597a23e48e62a8c476c463d3f176b86a10048f47b\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/7110d455eb51e78e09f43fabf0b1630ae997d898\"\u003e: Allow quicker shutdowns during LoadBlockIndex()\u003c/a\u003e","bodyMessageHtml":"\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/af5fa82b676a36e60eda080ca0a946bdfffefd49/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/af5fa82b676a36e60eda080ca0a946bdfffefd49\"\u003e\u003ctt\u003eaf5fa82\u003c/tt\u003e\u003c/a\u003e Allow quicker shutdowns during LoadBlockIndex() (Jonas Schnelli)\n\nPull request description:\n\nACKs for commit af5fa8:\n promag:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/af5fa82b676a36e60eda080ca0a946bdfffefd49/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/af5fa82b676a36e60eda080ca0a946bdfffefd49\"\u003e\u003ctt\u003eaf5fa82\u003c/tt\u003e\u003c/a\u003e.\n practicalswift:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/af5fa82b676a36e60eda080ca0a946bdfffefd49/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/af5fa82b676a36e60eda080ca0a946bdfffefd49\"\u003e\u003ctt\u003eaf5fa82\u003c/tt\u003e\u003c/a\u003e\n\nTree-SHA512: 1c64dcc5d8a9d3411553257cd5a598dcd29be981660e5bca9283c1d957dc56798abcf41d9969cd573088137597a23e48e62a8c476c463d3f176b86a10048f47b","authors":[{"login":"jonasschnelli","displayName":"Jonas Schnelli","avatarUrl":"https://avatars.githubusercontent.com/u/178464?v=4","path":"/jonasschnelli","isGitHub":false}],"committerAttribution":false,"committer":{"login":"jonasschnelli","displayName":"Jonas Schnelli","avatarUrl":"https://avatars.githubusercontent.com/u/178464?v=4","path":"/jonasschnelli","isGitHub":false}}]},{"title":"May 17, 2019","commits":[{"oid":"a822a0e4f6317f98cde6f0d5abe952b4e8992ac9","url":"/bitcoin/bitcoin/commit/a822a0e4f6317f98cde6f0d5abe952b4e8992ac9","authoredDate":"2019-05-17T07:22:48.000-04:00","committedDate":"2019-05-17T07:22:52.000-04:00","shortMessage":"Merge #15999: init: Remove dead code in LoadChainTip","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Merge #15999: init: Remove dead code in LoadChainTip\n\nfa86c8aec6 init: Remove dead code in LoadChainTip (MarcoFalke)\n\nPull request description:\n\n `LoadChainTip` sets `::ChainActive()` based on `pcoinsTip`'s best block. `LoadChainTip` is never called when that block is null, so we can remove all code from within that method that is only executed when that block is null.\n\n Fixes #15967 Inconsistent locking behavior in LoadChainTip\n\nACKs for commit fa86c8:\n promag:\n utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d.\n practicalswift:\n utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\n Empact:\n utACK https://github.com/bitcoin/bitcoin/pull/15999/commits/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\n laanwj:\n utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\n ryanofsky:\n utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d. LoadChainTip isn't called currently when pcoinsTip best block is null due to this line:\n jamesob:\n utACK https://github.com/bitcoin/bitcoin/pull/15999/commits/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\n\nTree-SHA512: 8961c0e579800a52038ac5655478468852faac055299b64d6cfdf0c213d3bf09669c4889467d09d93457f6c8b073967bb0475a137f77ddd3a3a3c03ad90001c4\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/a822a0e4f6317f98cde6f0d5abe952b4e8992ac9\"\u003eMerge\u003c/a\u003e \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"442452714\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/15999\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/bitcoin/bitcoin/pull/15999/hovercard\" href=\"https://github.com/bitcoin/bitcoin/pull/15999\"\u003e#15999\u003c/a\u003e\u003ca data-pjax=\"true\" title=\"Merge #15999: init: Remove dead code in LoadChainTip\n\nfa86c8aec6 init: Remove dead code in LoadChainTip (MarcoFalke)\n\nPull request description:\n\n `LoadChainTip` sets `::ChainActive()` based on `pcoinsTip`'s best block. `LoadChainTip` is never called when that block is null, so we can remove all code from within that method that is only executed when that block is null.\n\n Fixes #15967 Inconsistent locking behavior in LoadChainTip\n\nACKs for commit fa86c8:\n promag:\n utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d.\n practicalswift:\n utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\n Empact:\n utACK https://github.com/bitcoin/bitcoin/pull/15999/commits/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\n laanwj:\n utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\n ryanofsky:\n utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d. LoadChainTip isn't called currently when pcoinsTip best block is null due to this line:\n jamesob:\n utACK https://github.com/bitcoin/bitcoin/pull/15999/commits/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\n\nTree-SHA512: 8961c0e579800a52038ac5655478468852faac055299b64d6cfdf0c213d3bf09669c4889467d09d93457f6c8b073967bb0475a137f77ddd3a3a3c03ad90001c4\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/a822a0e4f6317f98cde6f0d5abe952b4e8992ac9\"\u003e: init: Remove dead code in LoadChainTip\u003c/a\u003e","bodyMessageHtml":"\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\"\u003e\u003ctt\u003efa86c8a\u003c/tt\u003e\u003c/a\u003e init: Remove dead code in LoadChainTip (MarcoFalke)\n\nPull request description:\n\n `LoadChainTip` sets `::ChainActive()` based on `pcoinsTip`'s best block. `LoadChainTip` is never called when that block is null, so we can remove all code from within that method that is only executed when that block is null.\n\n \u003cspan class=\"issue-keyword tooltipped tooltipped-se\" aria-label=\"This commit closes issue #15967.\"\u003eFixes\u003c/span\u003e \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"440929549\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/15967\" data-hovercard-type=\"issue\" data-hovercard-url=\"/bitcoin/bitcoin/issues/15967/hovercard\" href=\"https://github.com/bitcoin/bitcoin/issues/15967\"\u003e#15967\u003c/a\u003e Inconsistent locking behavior in LoadChainTip\n\nACKs for commit fa86c8:\n promag:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\"\u003e\u003ctt\u003efa86c8a\u003c/tt\u003e\u003c/a\u003e.\n practicalswift:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\"\u003e\u003ctt\u003efa86c8a\u003c/tt\u003e\u003c/a\u003e\n Empact:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\"\u003e\u003ctt\u003efa86c8a\u003c/tt\u003e\u003c/a\u003e\n laanwj:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\"\u003e\u003ctt\u003efa86c8a\u003c/tt\u003e\u003c/a\u003e\n ryanofsky:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\"\u003e\u003ctt\u003efa86c8a\u003c/tt\u003e\u003c/a\u003e. LoadChainTip isn't called currently when pcoinsTip best block is null due to this line:\n jamesob:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\"\u003e\u003ctt\u003efa86c8a\u003c/tt\u003e\u003c/a\u003e\n\nTree-SHA512: 8961c0e579800a52038ac5655478468852faac055299b64d6cfdf0c213d3bf09669c4889467d09d93457f6c8b073967bb0475a137f77ddd3a3a3c03ad90001c4","authors":[{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}],"committerAttribution":false,"committer":{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}}]},{"title":"May 16, 2019","commits":[{"oid":"403e677c9ebbf9744733010e6b0c2d1b182ee850","url":"/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850","authoredDate":"2019-03-27T12:21:50.000-04:00","committedDate":"2019-05-16T09:06:54.000-04:00","shortMessage":"refactoring: IsInitialBlockDownload -\u003e CChainState","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"refactoring: IsInitialBlockDownload -\u0026gt; CChainState\n\nWe introduce CChainState.m_cached_finished_ibd because the static state it\nreplaces would\u0026#39;ve been shared across all CChainState instances.\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850\"\u003erefactoring: IsInitialBlockDownload -\u0026gt; CChainState\u003c/a\u003e","bodyMessageHtml":"We introduce CChainState.m_cached_finished_ibd because the static state it\nreplaces would've been shared across all CChainState instances.","authors":[{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}],"committerAttribution":false,"committer":{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}},{"oid":"3ccbc376dd313fb7666471f24f6d9370914d00f3","url":"/bitcoin/bitcoin/commit/3ccbc376dd313fb7666471f24f6d9370914d00f3","authoredDate":"2019-03-27T12:07:52.000-04:00","committedDate":"2019-05-16T09:06:54.000-04:00","shortMessage":"refactoring: FlushStateToDisk -\u003e CChainState","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"refactoring: FlushStateToDisk -\u0026gt; CChainState\n\nAlso renames global methods for clarity:\n\n- ::FlushStateToDisk() -\u0026gt; CChainState::ForceFlushStateToDisk()\n - This performs an unconditional flush.\n\n- ::PruneAndFlush() -\u0026gt; CChainState::PruneAndFlush()\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/3ccbc376dd313fb7666471f24f6d9370914d00f3\"\u003erefactoring: FlushStateToDisk -\u0026gt; CChainState\u003c/a\u003e","bodyMessageHtml":"Also renames global methods for clarity:\n\n- ::FlushStateToDisk() -\u0026gt; CChainState::ForceFlushStateToDisk()\n - This performs an unconditional flush.\n\n- ::PruneAndFlush() -\u0026gt; CChainState::PruneAndFlush()","authors":[{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}],"committerAttribution":false,"committer":{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}},{"oid":"4d6688603b8c8df854d52df464e157d0a6e7bde6","url":"/bitcoin/bitcoin/commit/4d6688603b8c8df854d52df464e157d0a6e7bde6","authoredDate":"2019-03-27T11:53:31.000-04:00","committedDate":"2019-05-16T09:06:54.000-04:00","shortMessage":"refactoring: introduce ChainstateActive()","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"refactoring: introduce ChainstateActive()\n\nTo be used once we move global functions (e.g. FlushStateToDisk()) into\nCChainState methods.\n\nThanks to Marco Falke for suggestions\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/4d6688603b8c8df854d52df464e157d0a6e7bde6\"\u003erefactoring: introduce ChainstateActive()\u003c/a\u003e","bodyMessageHtml":"To be used once we move global functions (e.g. FlushStateToDisk()) into\nCChainState methods.\n\nThanks to Marco Falke for suggestions","authors":[{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}],"committerAttribution":false,"committer":{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}},{"oid":"d7c97edeea8cee10ad9da1f940d39d5073ac142d","url":"/bitcoin/bitcoin/commit/d7c97edeea8cee10ad9da1f940d39d5073ac142d","authoredDate":"2019-03-27T10:20:41.000-04:00","committedDate":"2019-05-16T09:05:07.000-04:00","shortMessage":"move-only: make the CChainState interface public","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"move-only: make the CChainState interface public\n\nalong with DisconnectResult, and CBlockIndexWorkComparator.\n\nThe CChainState interface needs to be known to the rest of the system because\nmany global functions will move to CChainState methods. This is to allow\nother parts of the system to be parameterized per chainstate instance\ninstead of assuming a single global.\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/d7c97edeea8cee10ad9da1f940d39d5073ac142d\"\u003emove-only: make the CChainState interface public\u003c/a\u003e","bodyMessageHtml":"along with DisconnectResult, and CBlockIndexWorkComparator.\n\nThe CChainState interface needs to be known to the rest of the system because\nmany global functions will move to CChainState methods. This is to allow\nother parts of the system to be parameterized per chainstate instance\ninstead of assuming a single global.","authors":[{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}],"committerAttribution":false,"committer":{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}}]},{"title":"May 15, 2019","commits":[{"oid":"1609809fb2a4c2ec15b7c26dc328e2e666bd5d57","url":"/bitcoin/bitcoin/commit/1609809fb2a4c2ec15b7c26dc328e2e666bd5d57","authoredDate":"2019-05-12T21:48:40.000+02:00","committedDate":"2019-05-15T14:58:15.000+02:00","shortMessage":"validation: Hold cs_main when reading chainActive in RewindBlockIndex","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"validation: Hold cs_main when reading chainActive in RewindBlockIndex\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/1609809fb2a4c2ec15b7c26dc328e2e666bd5d57\"\u003evalidation: Hold cs_main when reading chainActive in RewindBlockIndex\u003c/a\u003e","bodyMessageHtml":"","authors":[{"login":"practicalswift","displayName":"practicalswift","avatarUrl":"https://avatars.githubusercontent.com/u/7826565?v=4","path":"/practicalswift","isGitHub":false}],"committerAttribution":false,"committer":{"login":"practicalswift","displayName":"practicalswift","avatarUrl":"https://avatars.githubusercontent.com/u/7826565?v=4","path":"/practicalswift","isGitHub":false}}]},{"title":"May 13, 2019","commits":[{"oid":"fa3c6511435149782545ac0d09d4722dc115d709","url":"/bitcoin/bitcoin/commit/fa3c6511435149782545ac0d09d4722dc115d709","authoredDate":"2019-04-19T13:19:20.000-04:00","committedDate":"2019-05-13T14:46:01.000-04:00","shortMessage":"[refactor] interfaces: Add missing LockAnnotation for cs_main","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"[refactor] interfaces: Add missing LockAnnotation for cs_main\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/fa3c6511435149782545ac0d09d4722dc115d709\"\u003e[refactor] interfaces: Add missing LockAnnotation for cs_main\u003c/a\u003e","bodyMessageHtml":"","authors":[{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}],"committerAttribution":false,"committer":{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}},{"oid":"fa86c8aec611a9b9d2f53960c92419cf2a8bb92d","url":"/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d","authoredDate":"2019-05-09T18:10:29.000-04:00","committedDate":"2019-05-13T11:53:38.000-04:00","shortMessage":"init: Remove dead code in LoadChainTip","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"init: Remove dead code in LoadChainTip\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d\"\u003einit: Remove dead code in LoadChainTip\u003c/a\u003e","bodyMessageHtml":"","authors":[{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}],"committerAttribution":false,"committer":{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}}]},{"title":"May 8, 2019","commits":[{"oid":"49c1aa5f83d0751882413aafb42a77801daf1cd5","url":"/bitcoin/bitcoin/commit/49c1aa5f83d0751882413aafb42a77801daf1cd5","authoredDate":"2019-05-08T09:19:27.000-04:00","committedDate":"2019-05-08T09:19:41.000-04:00","shortMessage":"Merge #15971: validation: Add compile-time checking for negative locking requirement in LimitValidationInterfaceQueue","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Merge #15971: validation: Add compile-time checking for negative locking requirement in LimitValidationInterfaceQueue\n\n62d50ef308 Add LOCKS_EXCLUDED(cs_main) to LimitValidationInterfaceQueue(...) which does AssertLockNotHeld(cs_main) (practicalswift)\n\nPull request description:\n\n This PR adds compile-time checking for negative locking requirements that follow from the run-time locking requirement `AssertLockNotHeld(cs_main)` in `LimitValidationInterfaceQueue(...)`.\n\n Changes:\n * Add `LOCKS_EXCLUDED(cs_main)` to `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)`\n * Add `LOCKS_EXCLUDED(cs_main)` to `CChainState::ActivateBestChain(…)`, `CChainState:: InvalidateBlock(…)` and `CChainState::RewindBlockIndex(…)` which all call `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)`\n * Add `LOCKS_EXCLUDED(cs_main)` to `InvalidateBlock(…)` which calls `CChainState::InvalidateBlock(...)` which in turn calls `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)`\n * Add `LOCKS_EXCLUDED(cs_main)` to `RewindBlockIndex(…)` which calls `CChainState::RewindBlockIndex(...)` which in turn calls `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)`\n\nACKs for commit 62d50e:\n MarcoFalke:\n utACK 62d50ef308\n\nTree-SHA512: 73d092ccd08c851ae3c5d60370c369fc030c5793f5507e2faccb6f91c851ddc0ce059fbea3899f2856330d7a8c78f2ac6a2988e8268b03154f946be9e60e3be1\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/49c1aa5f83d0751882413aafb42a77801daf1cd5\"\u003eMerge\u003c/a\u003e \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"441136262\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/15971\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/bitcoin/bitcoin/pull/15971/hovercard\" href=\"https://github.com/bitcoin/bitcoin/pull/15971\"\u003e#15971\u003c/a\u003e\u003ca data-pjax=\"true\" title=\"Merge #15971: validation: Add compile-time checking for negative locking requirement in LimitValidationInterfaceQueue\n\n62d50ef308 Add LOCKS_EXCLUDED(cs_main) to LimitValidationInterfaceQueue(...) which does AssertLockNotHeld(cs_main) (practicalswift)\n\nPull request description:\n\n This PR adds compile-time checking for negative locking requirements that follow from the run-time locking requirement `AssertLockNotHeld(cs_main)` in `LimitValidationInterfaceQueue(...)`.\n\n Changes:\n * Add `LOCKS_EXCLUDED(cs_main)` to `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)`\n * Add `LOCKS_EXCLUDED(cs_main)` to `CChainState::ActivateBestChain(…)`, `CChainState:: InvalidateBlock(…)` and `CChainState::RewindBlockIndex(…)` which all call `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)`\n * Add `LOCKS_EXCLUDED(cs_main)` to `InvalidateBlock(…)` which calls `CChainState::InvalidateBlock(...)` which in turn calls `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)`\n * Add `LOCKS_EXCLUDED(cs_main)` to `RewindBlockIndex(…)` which calls `CChainState::RewindBlockIndex(...)` which in turn calls `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)`\n\nACKs for commit 62d50e:\n MarcoFalke:\n utACK 62d50ef308\n\nTree-SHA512: 73d092ccd08c851ae3c5d60370c369fc030c5793f5507e2faccb6f91c851ddc0ce059fbea3899f2856330d7a8c78f2ac6a2988e8268b03154f946be9e60e3be1\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/49c1aa5f83d0751882413aafb42a77801daf1cd5\"\u003e: validation: Add compile-time checking for negative locking requirement in LimitValidationInterfaceQueue\u003c/a\u003e","bodyMessageHtml":"\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/62d50ef3085c48788d32b4918dc189f9a6c997d7/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/62d50ef3085c48788d32b4918dc189f9a6c997d7\"\u003e\u003ctt\u003e62d50ef\u003c/tt\u003e\u003c/a\u003e Add LOCKS_EXCLUDED(cs_main) to LimitValidationInterfaceQueue(...) which does AssertLockNotHeld(cs_main) (practicalswift)\n\nPull request description:\n\n This PR adds compile-time checking for negative locking requirements that follow from the run-time locking requirement `AssertLockNotHeld(cs_main)` in `LimitValidationInterfaceQueue(...)`.\n\n Changes:\n * Add `LOCKS_EXCLUDED(cs_main)` to `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)`\n * Add `LOCKS_EXCLUDED(cs_main)` to `CChainState::ActivateBestChain(…)`, `CChainState:: InvalidateBlock(…)` and `CChainState::RewindBlockIndex(…)` which all call `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)`\n * Add `LOCKS_EXCLUDED(cs_main)` to `InvalidateBlock(…)` which calls `CChainState::InvalidateBlock(...)` which in turn calls `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)`\n * Add `LOCKS_EXCLUDED(cs_main)` to `RewindBlockIndex(…)` which calls `CChainState::RewindBlockIndex(...)` which in turn calls `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)`\n\nACKs for commit 62d50e:\n MarcoFalke:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/62d50ef3085c48788d32b4918dc189f9a6c997d7/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/62d50ef3085c48788d32b4918dc189f9a6c997d7\"\u003e\u003ctt\u003e62d50ef\u003c/tt\u003e\u003c/a\u003e\n\nTree-SHA512: 73d092ccd08c851ae3c5d60370c369fc030c5793f5507e2faccb6f91c851ddc0ce059fbea3899f2856330d7a8c78f2ac6a2988e8268b03154f946be9e60e3be1","authors":[{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}],"committerAttribution":false,"committer":{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}},{"oid":"62d50ef3085c48788d32b4918dc189f9a6c997d7","url":"/bitcoin/bitcoin/commit/62d50ef3085c48788d32b4918dc189f9a6c997d7","authoredDate":"2019-05-07T10:07:09.000+02:00","committedDate":"2019-05-08T10:31:54.000+02:00","shortMessage":"Add LOCKS_EXCLUDED(cs_main) to LimitValidationInterfaceQueue(...) which does AssertLockNotHeld(cs_main)","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Add LOCKS_EXCLUDED(cs_main) to LimitValidationInterfaceQueue(...) which does AssertLockNotHeld(cs_main)\n\nAdd LOCKS_EXCLUDED(cs_main) to functions calling LimitValidationInterfaceQueue(...) which does AssertLockNotHeld(cs_main)\n\nAdd LOCKS_EXCLUDED(cs_main) to functions calling CChainState::InvalidateBlock(...) which calls LimitValidationInterfaceQueue(...) which in turn does AssertLockNotHeld(cs_main)\n\nAdd LOCKS_EXCLUDED(cs_main) to functions calling CChainState::RewindBlockIndex(...) which calls LimitValidationInterfaceQueue(...) which in turn does AssertLockNotHeld(cs_main)\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/62d50ef3085c48788d32b4918dc189f9a6c997d7\"\u003eAdd LOCKS_EXCLUDED(cs_main) to LimitValidationInterfaceQueue(...) which does AssertLockNotHeld(cs_main)\u003c/a\u003e","bodyMessageHtml":"Add LOCKS_EXCLUDED(cs_main) to functions calling LimitValidationInterfaceQueue(...) which does AssertLockNotHeld(cs_main)\n\nAdd LOCKS_EXCLUDED(cs_main) to functions calling CChainState::InvalidateBlock(...) which calls LimitValidationInterfaceQueue(...) which in turn does AssertLockNotHeld(cs_main)\n\nAdd LOCKS_EXCLUDED(cs_main) to functions calling CChainState::RewindBlockIndex(...) which calls LimitValidationInterfaceQueue(...) which in turn does AssertLockNotHeld(cs_main)","authors":[{"login":"practicalswift","displayName":"practicalswift","avatarUrl":"https://avatars.githubusercontent.com/u/7826565?v=4","path":"/practicalswift","isGitHub":false}],"committerAttribution":false,"committer":{"login":"practicalswift","displayName":"practicalswift","avatarUrl":"https://avatars.githubusercontent.com/u/7826565?v=4","path":"/practicalswift","isGitHub":false}}]},{"title":"May 7, 2019","commits":[{"oid":"b2a6b0216192b6e8428f1a80b47f5178fccb961a","url":"/bitcoin/bitcoin/commit/b2a6b0216192b6e8428f1a80b47f5178fccb961a","authoredDate":"2019-05-07T11:51:21.000-04:00","committedDate":"2019-05-07T11:51:30.000-04:00","shortMessage":"Merge #15948: refactor: rename chainActive","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Merge #15948: refactor: rename chainActive\n\n486c1eea86 refactoring: remove unused chainActive (James O'Beirne)\n631940aab2 scripted-diff: replace chainActive -\u0026gt; ::ChainActive() (James O'Beirne)\na3a609079c refactoring: introduce unused ChainActive() (James O'Beirne)\n1b6e6fcfd2 rename: CChainState.chainActive -\u0026gt; m_chain (James O'Beirne)\n\nPull request description:\n\n This is part of the assumeutxo project:\n\n Parent PR: #15606\n Issue: #15605\n Specification: https://github.com/jamesob/assumeutxo-docs/tree/2019-04-proposal/proposal\n\n ---\n\n This change refactors the `chainActive` reference into a `::ChainActive()` call. It also distinguishes `CChainState`'s `CChain` data member as `m_chain` instead of the current `chainActive`, which makes it easily confused with the global data.\n\n The active chain must be obtained via function because its reference will be swapped at some point during runtime after loading a UTXO snapshot.\n\n This change, though lengthy, should be pretty easy to review since most of it is contained within a scripted-diff. Once merged, the parent PR should be easier to review.\n\nACKs for commit 486c1e:\n Sjors:\n utACK 486c1ee\n promag:\n utACK 486c1ee.\n practicalswift:\n utACK 486c1eea863a41e597ae4fddc392f446f2518b4b\n\nTree-SHA512: 06ed8f9e77f2d25fc9bea0ba86436d80dbbce90a1e8be23e37ec4eeb26060483e60b4a5c4fba679cb1867f61e3921c24abeb9cabdfb4d0a9b1c4ddd77b17456a\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/b2a6b0216192b6e8428f1a80b47f5178fccb961a\"\u003eMerge\u003c/a\u003e \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"440176622\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/15948\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/bitcoin/bitcoin/pull/15948/hovercard\" href=\"https://github.com/bitcoin/bitcoin/pull/15948\"\u003e#15948\u003c/a\u003e\u003ca data-pjax=\"true\" title=\"Merge #15948: refactor: rename chainActive\n\n486c1eea86 refactoring: remove unused chainActive (James O'Beirne)\n631940aab2 scripted-diff: replace chainActive -\u0026gt; ::ChainActive() (James O'Beirne)\na3a609079c refactoring: introduce unused ChainActive() (James O'Beirne)\n1b6e6fcfd2 rename: CChainState.chainActive -\u0026gt; m_chain (James O'Beirne)\n\nPull request description:\n\n This is part of the assumeutxo project:\n\n Parent PR: #15606\n Issue: #15605\n Specification: https://github.com/jamesob/assumeutxo-docs/tree/2019-04-proposal/proposal\n\n ---\n\n This change refactors the `chainActive` reference into a `::ChainActive()` call. It also distinguishes `CChainState`'s `CChain` data member as `m_chain` instead of the current `chainActive`, which makes it easily confused with the global data.\n\n The active chain must be obtained via function because its reference will be swapped at some point during runtime after loading a UTXO snapshot.\n\n This change, though lengthy, should be pretty easy to review since most of it is contained within a scripted-diff. Once merged, the parent PR should be easier to review.\n\nACKs for commit 486c1e:\n Sjors:\n utACK 486c1ee\n promag:\n utACK 486c1ee.\n practicalswift:\n utACK 486c1eea863a41e597ae4fddc392f446f2518b4b\n\nTree-SHA512: 06ed8f9e77f2d25fc9bea0ba86436d80dbbce90a1e8be23e37ec4eeb26060483e60b4a5c4fba679cb1867f61e3921c24abeb9cabdfb4d0a9b1c4ddd77b17456a\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/b2a6b0216192b6e8428f1a80b47f5178fccb961a\"\u003e: refactor: rename chainActive\u003c/a\u003e","bodyMessageHtml":"\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/486c1eea863a41e597ae4fddc392f446f2518b4b/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/486c1eea863a41e597ae4fddc392f446f2518b4b\"\u003e\u003ctt\u003e486c1ee\u003c/tt\u003e\u003c/a\u003e refactoring: remove unused chainActive (James O'Beirne)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/631940aab228ccca64c15e05d5953f40381a0ffc/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/631940aab228ccca64c15e05d5953f40381a0ffc\"\u003e\u003ctt\u003e631940a\u003c/tt\u003e\u003c/a\u003e scripted-diff: replace chainActive -\u0026gt; ::ChainActive() (James O'Beirne)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/a3a609079c76dd2bbc72127488bf466cc61d8940/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/a3a609079c76dd2bbc72127488bf466cc61d8940\"\u003e\u003ctt\u003ea3a6090\u003c/tt\u003e\u003c/a\u003e refactoring: introduce unused ChainActive() (James O'Beirne)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/1b6e6fcfd2f8a8def148ea0f50af202d5cae318a/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/1b6e6fcfd2f8a8def148ea0f50af202d5cae318a\"\u003e\u003ctt\u003e1b6e6fc\u003c/tt\u003e\u003c/a\u003e rename: CChainState.chainActive -\u0026gt; m_chain (James O'Beirne)\n\nPull request description:\n\n This is part of the assumeutxo project:\n\n Parent PR: \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"421531882\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/15606\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/bitcoin/bitcoin/pull/15606/hovercard\" href=\"https://github.com/bitcoin/bitcoin/pull/15606\"\u003e#15606\u003c/a\u003e\n Issue: \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"421527231\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/15605\" data-hovercard-type=\"issue\" data-hovercard-url=\"/bitcoin/bitcoin/issues/15605/hovercard\" href=\"https://github.com/bitcoin/bitcoin/issues/15605\"\u003e#15605\u003c/a\u003e\n Specification: \u003ca href=\"https://github.com/jamesob/assumeutxo-docs/tree/2019-04-proposal/proposal\"\u003ehttps://github.com/jamesob/assumeutxo-docs/tree/2019-04-proposal/proposal\u003c/a\u003e\n\n ---\n\n This change refactors the `chainActive` reference into a `::ChainActive()` call. It also distinguishes `CChainState`'s `CChain` data member as `m_chain` instead of the current `chainActive`, which makes it easily confused with the global data.\n\n The active chain must be obtained via function because its reference will be swapped at some point during runtime after loading a UTXO snapshot.\n\n This change, though lengthy, should be pretty easy to review since most of it is contained within a scripted-diff. Once merged, the parent PR should be easier to review.\n\nACKs for commit 486c1e:\n Sjors:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/486c1eea863a41e597ae4fddc392f446f2518b4b/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/486c1eea863a41e597ae4fddc392f446f2518b4b\"\u003e\u003ctt\u003e486c1ee\u003c/tt\u003e\u003c/a\u003e\n promag:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/486c1eea863a41e597ae4fddc392f446f2518b4b/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/486c1eea863a41e597ae4fddc392f446f2518b4b\"\u003e\u003ctt\u003e486c1ee\u003c/tt\u003e\u003c/a\u003e.\n practicalswift:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/486c1eea863a41e597ae4fddc392f446f2518b4b/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/486c1eea863a41e597ae4fddc392f446f2518b4b\"\u003e\u003ctt\u003e486c1ee\u003c/tt\u003e\u003c/a\u003e\n\nTree-SHA512: 06ed8f9e77f2d25fc9bea0ba86436d80dbbce90a1e8be23e37ec4eeb26060483e60b4a5c4fba679cb1867f61e3921c24abeb9cabdfb4d0a9b1c4ddd77b17456a","authors":[{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}],"committerAttribution":false,"committer":{"login":null,"displayName":"MarcoFalke","avatarUrl":"https://github.githubassets.com/images/gravatars/gravatar-user-420.png","isGitHub":false}}]},{"title":"May 4, 2019","commits":[{"oid":"d7d7d315060620446bd363ca50f95f79d3260db7","url":"/bitcoin/bitcoin/commit/d7d7d315060620446bd363ca50f95f79d3260db7","authoredDate":"2019-05-04T11:58:48.000+02:00","committedDate":"2019-05-04T11:58:57.000+02:00","shortMessage":"Merge #15141: Rewrite DoS interface between validation and net_processing","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Merge #15141: Rewrite DoS interface between validation and net_processing\n\n0ff1c2a838da9e8dc7f77609adc89124bbea3e2b Separate reason for premature spends (coinbase/locktime) (Suhas Daftuar)\n54470e767bab37f9b7089782b1be73d5883bb244 Assert validation reasons are contextually correct (Suhas Daftuar)\n2120c31521aa51aa1984ee33250b8320506d3a0f [refactor] Update some comments in validation.cpp as we arent doing DoS there (Matt Corallo)\n12dbdd7a41bac73e51ed8f7b290b7671196bf9ea [refactor] Drop unused state.DoS(), state.GetDoS(), state.CorruptionPossible() (Matt Corallo)\naa502b88d10c2c3ac56d9163555849b96dc4df1e scripted-diff: Remove DoS calls to CValidationState (Matt Corallo)\n7721ad64f40a0c67edefaaf7353264d78df8803e [refactor] Prep for scripted-diff by removing some \\ns which annoy sed. (Matt Corallo)\n5e78c5734bb0c9aae7b0a7019a745b2d7059b3d9 Allow use of state.Invalid() for all reasons (Matt Corallo)\n6b34bc6b6f54f85537494cbea3846d5d195a06d9 Fix handling of invalid headers (Suhas Daftuar)\nef54b486d5333dfc85c56e6b933c81735196a25d [refactor] Use Reasons directly instead of DoS codes (Matt Corallo)\n9ab2a0412e96e87956fe61257387683635213035 CorruptionPossible -\u0026gt; BLOCK_MUTATED (Matt Corallo)\n6e55b292b0ea944897b6dc2f766446fd209af484 CorruptionPossible -\u0026gt; TX_WITNESS_MUTATED (Matt Corallo)\n7df16e70e67c753c871797ce947ea09d7cb0e519 LookupBlockIndex -\u0026gt; CACHED_INVALID (Matt Corallo)\nc8b0d22698385f91215ce8145631e3d5826dc977 [refactor] Drop redundant nDoS, corruptionPossible, SetCorruptionPossible (Matt Corallo)\n34477ccd39a8d4bfa8ad612f22d5a46291922185 [refactor] Add useful-for-dos \u0026quot;reason\u0026quot; field to CValidationState (Matt Corallo)\n6a7f8777a0b193fae4f976196f3464ffac01bf1b Ban all peers for all block script failures (Suhas Daftuar)\n7b999103e21509e1c2dec10f68e48744ffe90f55 Clean up banning levels (Matt Corallo)\nb8b4c80146780f9011abbd1be72343cc965c07b9 [refactor] drop IsInvalid(nDoSOut) (Matt Corallo)\n8818729013e17c650a25f030b2b80e0997389155 [refactor] Refactor misbehavior ban decisions to MaybePunishNode() (Matt Corallo)\n00e11e61c0211a62788611cd6a6714a393fdc26c [refactor] rename stateDummy -\u0026gt; orphan_state (Matt Corallo)\nf34fa719cf33a51d11f1d2219cbe73ccff6fd697 Drop obsolete sigops comment (Matt Corallo)\n\nPull request description:\n\n This is a rebase of #11639 with some fixes for the last few comments which were not yet addressed.\n\n The original PR text, with some strikethroughs of text that is no longer correct:\n\n \u0026gt; This cleans up an old main-carryover - it made sense that main could decide what DoS scores to assign things because the DoS scores were handled in a different part of main, but now validation is telling net_processing what DoS scores to assign to different things, which is utter nonsense. Instead, we replace CValidationState's nDoS and CorruptionPossible with a general ValidationInvalidReason, which net_processing can handle as it sees fit. I keep the behavior changes here to a minimum, but in the future we can utilize these changes for other smarter behavior, such as disconnecting/preferring to rotate outbound peers based on them providing things which are invalid due to SOFT_FORK because we shouldn't ban for such cases.\n \u0026gt;\n \u0026gt; This is somewhat complementary with, though obviously conflicts heavily with #11523, which added enums in place of DoS scores, as well as a few other cleanups (which are still relevant).\n \u0026gt;\n \u0026gt; Compared with previous bans, the following changes are made:\n \u0026gt;\n \u0026gt; Txn with empty vin/vout or null prevouts move from 10 DoS\n \u0026gt; points to 100.\n \u0026gt; Loose transactions with a dependency loop now result in a ban\n \u0026gt; instead of 10 DoS points.\n \u0026gt; ~~BIP68-violation no longer results in a ban as it is SOFT_FORK.~~\n \u0026gt; ~~Non-SegWit SigOp violation no longer results in a ban as it\n \u0026gt; considers P2SH sigops and is thus SOFT_FORK.~~\n \u0026gt; ~~Any script violation in a block no longer results in a ban as\n \u0026gt; it may be the result of a SOFT_FORK. This should likely be\n \u0026gt; fixed in the future by differentiating between them.~~\n \u0026gt; Proof of work failure moves from 50 DoS points to a ban.\n \u0026gt; Blocks with timestamps under MTP now result in a ban, blocks\n \u0026gt; too far in the future continue to not result in a ban.\n \u0026gt; Inclusion of non-final transactions in a block now results in a\n \u0026gt; ban instead of 10 DoS points.\n\n Note: The change to ban all peers for consensus violations is actually NOT the change I'd like to make -- I'd prefer to only ban outbound peers in those situations. The current behavior is a bit of a mess, however, and so in the interests of advancing this PR I tried to keep the changes to a minimum. I plan to revisit the behavior in a followup PR.\n\n EDIT: One reviewer suggested I add some additional context for this PR:\n\n \u0026gt; The goal of this work was to make net_processing aware of the actual reasons for validation failures, rather than just deal with opaque numbers instructing it to do something.\n \u0026gt;\n \u0026gt; In the future, I'd like to make it so that we use more context to decide how to punish a peer. One example is to differentiate inbound and outbound peer misbehaviors. Another potential example is if we'd treat RECENT_CONSENSUS_CHANGE failures differently (ie after the next consensus change is implemented), and perhaps again we'd want to treat some peers differently than others.\n\nACKs for commit 0ff1c2:\n jnewbery:\n utACK 0ff1c2a838da9e8dc7f77609adc89124bbea3e2b\n ryanofsky:\n utACK 0ff1c2a838da9e8dc7f77609adc89124bbea3e2b. Only change is dropping the first commit (f3883a321bf4ab289edcd9754b12cae3a648b175), and dropping the temporary `assert(level == GetDoS())` that was in 35ee77f2832eaffce30042e00785c310c5540cdc (now c8b0d22698385f91215ce8145631e3d5826dc977)\n\nTree-SHA512: e915a411100876398af5463d0a885920e44d473467bb6af991ef2e8f2681db6c1209bb60f848bd154be72d460f039b5653df20a6840352c5f7ea5486d9f777a3\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/d7d7d315060620446bd363ca50f95f79d3260db7\"\u003eMerge\u003c/a\u003e \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"397924135\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/15141\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/bitcoin/bitcoin/pull/15141/hovercard\" href=\"https://github.com/bitcoin/bitcoin/pull/15141\"\u003e#15141\u003c/a\u003e\u003ca data-pjax=\"true\" title=\"Merge #15141: Rewrite DoS interface between validation and net_processing\n\n0ff1c2a838da9e8dc7f77609adc89124bbea3e2b Separate reason for premature spends (coinbase/locktime) (Suhas Daftuar)\n54470e767bab37f9b7089782b1be73d5883bb244 Assert validation reasons are contextually correct (Suhas Daftuar)\n2120c31521aa51aa1984ee33250b8320506d3a0f [refactor] Update some comments in validation.cpp as we arent doing DoS there (Matt Corallo)\n12dbdd7a41bac73e51ed8f7b290b7671196bf9ea [refactor] Drop unused state.DoS(), state.GetDoS(), state.CorruptionPossible() (Matt Corallo)\naa502b88d10c2c3ac56d9163555849b96dc4df1e scripted-diff: Remove DoS calls to CValidationState (Matt Corallo)\n7721ad64f40a0c67edefaaf7353264d78df8803e [refactor] Prep for scripted-diff by removing some \\ns which annoy sed. (Matt Corallo)\n5e78c5734bb0c9aae7b0a7019a745b2d7059b3d9 Allow use of state.Invalid() for all reasons (Matt Corallo)\n6b34bc6b6f54f85537494cbea3846d5d195a06d9 Fix handling of invalid headers (Suhas Daftuar)\nef54b486d5333dfc85c56e6b933c81735196a25d [refactor] Use Reasons directly instead of DoS codes (Matt Corallo)\n9ab2a0412e96e87956fe61257387683635213035 CorruptionPossible -\u0026gt; BLOCK_MUTATED (Matt Corallo)\n6e55b292b0ea944897b6dc2f766446fd209af484 CorruptionPossible -\u0026gt; TX_WITNESS_MUTATED (Matt Corallo)\n7df16e70e67c753c871797ce947ea09d7cb0e519 LookupBlockIndex -\u0026gt; CACHED_INVALID (Matt Corallo)\nc8b0d22698385f91215ce8145631e3d5826dc977 [refactor] Drop redundant nDoS, corruptionPossible, SetCorruptionPossible (Matt Corallo)\n34477ccd39a8d4bfa8ad612f22d5a46291922185 [refactor] Add useful-for-dos \u0026quot;reason\u0026quot; field to CValidationState (Matt Corallo)\n6a7f8777a0b193fae4f976196f3464ffac01bf1b Ban all peers for all block script failures (Suhas Daftuar)\n7b999103e21509e1c2dec10f68e48744ffe90f55 Clean up banning levels (Matt Corallo)\nb8b4c80146780f9011abbd1be72343cc965c07b9 [refactor] drop IsInvalid(nDoSOut) (Matt Corallo)\n8818729013e17c650a25f030b2b80e0997389155 [refactor] Refactor misbehavior ban decisions to MaybePunishNode() (Matt Corallo)\n00e11e61c0211a62788611cd6a6714a393fdc26c [refactor] rename stateDummy -\u0026gt; orphan_state (Matt Corallo)\nf34fa719cf33a51d11f1d2219cbe73ccff6fd697 Drop obsolete sigops comment (Matt Corallo)\n\nPull request description:\n\n This is a rebase of #11639 with some fixes for the last few comments which were not yet addressed.\n\n The original PR text, with some strikethroughs of text that is no longer correct:\n\n \u0026gt; This cleans up an old main-carryover - it made sense that main could decide what DoS scores to assign things because the DoS scores were handled in a different part of main, but now validation is telling net_processing what DoS scores to assign to different things, which is utter nonsense. Instead, we replace CValidationState's nDoS and CorruptionPossible with a general ValidationInvalidReason, which net_processing can handle as it sees fit. I keep the behavior changes here to a minimum, but in the future we can utilize these changes for other smarter behavior, such as disconnecting/preferring to rotate outbound peers based on them providing things which are invalid due to SOFT_FORK because we shouldn't ban for such cases.\n \u0026gt;\n \u0026gt; This is somewhat complementary with, though obviously conflicts heavily with #11523, which added enums in place of DoS scores, as well as a few other cleanups (which are still relevant).\n \u0026gt;\n \u0026gt; Compared with previous bans, the following changes are made:\n \u0026gt;\n \u0026gt; Txn with empty vin/vout or null prevouts move from 10 DoS\n \u0026gt; points to 100.\n \u0026gt; Loose transactions with a dependency loop now result in a ban\n \u0026gt; instead of 10 DoS points.\n \u0026gt; ~~BIP68-violation no longer results in a ban as it is SOFT_FORK.~~\n \u0026gt; ~~Non-SegWit SigOp violation no longer results in a ban as it\n \u0026gt; considers P2SH sigops and is thus SOFT_FORK.~~\n \u0026gt; ~~Any script violation in a block no longer results in a ban as\n \u0026gt; it may be the result of a SOFT_FORK. This should likely be\n \u0026gt; fixed in the future by differentiating between them.~~\n \u0026gt; Proof of work failure moves from 50 DoS points to a ban.\n \u0026gt; Blocks with timestamps under MTP now result in a ban, blocks\n \u0026gt; too far in the future continue to not result in a ban.\n \u0026gt; Inclusion of non-final transactions in a block now results in a\n \u0026gt; ban instead of 10 DoS points.\n\n Note: The change to ban all peers for consensus violations is actually NOT the change I'd like to make -- I'd prefer to only ban outbound peers in those situations. The current behavior is a bit of a mess, however, and so in the interests of advancing this PR I tried to keep the changes to a minimum. I plan to revisit the behavior in a followup PR.\n\n EDIT: One reviewer suggested I add some additional context for this PR:\n\n \u0026gt; The goal of this work was to make net_processing aware of the actual reasons for validation failures, rather than just deal with opaque numbers instructing it to do something.\n \u0026gt;\n \u0026gt; In the future, I'd like to make it so that we use more context to decide how to punish a peer. One example is to differentiate inbound and outbound peer misbehaviors. Another potential example is if we'd treat RECENT_CONSENSUS_CHANGE failures differently (ie after the next consensus change is implemented), and perhaps again we'd want to treat some peers differently than others.\n\nACKs for commit 0ff1c2:\n jnewbery:\n utACK 0ff1c2a838da9e8dc7f77609adc89124bbea3e2b\n ryanofsky:\n utACK 0ff1c2a838da9e8dc7f77609adc89124bbea3e2b. Only change is dropping the first commit (f3883a321bf4ab289edcd9754b12cae3a648b175), and dropping the temporary `assert(level == GetDoS())` that was in 35ee77f2832eaffce30042e00785c310c5540cdc (now c8b0d22698385f91215ce8145631e3d5826dc977)\n\nTree-SHA512: e915a411100876398af5463d0a885920e44d473467bb6af991ef2e8f2681db6c1209bb60f848bd154be72d460f039b5653df20a6840352c5f7ea5486d9f777a3\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/d7d7d315060620446bd363ca50f95f79d3260db7\"\u003e: Rewrite DoS interface between validation and net_processing\u003c/a\u003e","bodyMessageHtml":"\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/0ff1c2a838da9e8dc7f77609adc89124bbea3e2b/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/0ff1c2a838da9e8dc7f77609adc89124bbea3e2b\"\u003e\u003ctt\u003e0ff1c2a\u003c/tt\u003e\u003c/a\u003e Separate reason for premature spends (coinbase/locktime) (Suhas Daftuar)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/54470e767bab37f9b7089782b1be73d5883bb244/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/54470e767bab37f9b7089782b1be73d5883bb244\"\u003e\u003ctt\u003e54470e7\u003c/tt\u003e\u003c/a\u003e Assert validation reasons are contextually correct (Suhas Daftuar)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/2120c31521aa51aa1984ee33250b8320506d3a0f/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/2120c31521aa51aa1984ee33250b8320506d3a0f\"\u003e\u003ctt\u003e2120c31\u003c/tt\u003e\u003c/a\u003e [refactor] Update some comments in validation.cpp as we arent doing DoS there (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/12dbdd7a41bac73e51ed8f7b290b7671196bf9ea/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/12dbdd7a41bac73e51ed8f7b290b7671196bf9ea\"\u003e\u003ctt\u003e12dbdd7\u003c/tt\u003e\u003c/a\u003e [refactor] Drop unused state.DoS(), state.GetDoS(), state.CorruptionPossible() (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/aa502b88d10c2c3ac56d9163555849b96dc4df1e/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/aa502b88d10c2c3ac56d9163555849b96dc4df1e\"\u003e\u003ctt\u003eaa502b8\u003c/tt\u003e\u003c/a\u003e scripted-diff: Remove DoS calls to CValidationState (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/7721ad64f40a0c67edefaaf7353264d78df8803e/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/7721ad64f40a0c67edefaaf7353264d78df8803e\"\u003e\u003ctt\u003e7721ad6\u003c/tt\u003e\u003c/a\u003e [refactor] Prep for scripted-diff by removing some \\ns which annoy sed. (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/5e78c5734bb0c9aae7b0a7019a745b2d7059b3d9/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/5e78c5734bb0c9aae7b0a7019a745b2d7059b3d9\"\u003e\u003ctt\u003e5e78c57\u003c/tt\u003e\u003c/a\u003e Allow use of state.Invalid() for all reasons (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/6b34bc6b6f54f85537494cbea3846d5d195a06d9/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/6b34bc6b6f54f85537494cbea3846d5d195a06d9\"\u003e\u003ctt\u003e6b34bc6\u003c/tt\u003e\u003c/a\u003e Fix handling of invalid headers (Suhas Daftuar)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/ef54b486d5333dfc85c56e6b933c81735196a25d/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/ef54b486d5333dfc85c56e6b933c81735196a25d\"\u003e\u003ctt\u003eef54b48\u003c/tt\u003e\u003c/a\u003e [refactor] Use Reasons directly instead of DoS codes (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/9ab2a0412e96e87956fe61257387683635213035/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/9ab2a0412e96e87956fe61257387683635213035\"\u003e\u003ctt\u003e9ab2a04\u003c/tt\u003e\u003c/a\u003e CorruptionPossible -\u0026gt; BLOCK_MUTATED (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/6e55b292b0ea944897b6dc2f766446fd209af484/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/6e55b292b0ea944897b6dc2f766446fd209af484\"\u003e\u003ctt\u003e6e55b29\u003c/tt\u003e\u003c/a\u003e CorruptionPossible -\u0026gt; TX_WITNESS_MUTATED (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/7df16e70e67c753c871797ce947ea09d7cb0e519/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/7df16e70e67c753c871797ce947ea09d7cb0e519\"\u003e\u003ctt\u003e7df16e7\u003c/tt\u003e\u003c/a\u003e LookupBlockIndex -\u0026gt; CACHED_INVALID (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/c8b0d22698385f91215ce8145631e3d5826dc977/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/c8b0d22698385f91215ce8145631e3d5826dc977\"\u003e\u003ctt\u003ec8b0d22\u003c/tt\u003e\u003c/a\u003e [refactor] Drop redundant nDoS, corruptionPossible, SetCorruptionPossible (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/34477ccd39a8d4bfa8ad612f22d5a46291922185/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/34477ccd39a8d4bfa8ad612f22d5a46291922185\"\u003e\u003ctt\u003e34477cc\u003c/tt\u003e\u003c/a\u003e [refactor] Add useful-for-dos \"reason\" field to CValidationState (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/6a7f8777a0b193fae4f976196f3464ffac01bf1b/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/6a7f8777a0b193fae4f976196f3464ffac01bf1b\"\u003e\u003ctt\u003e6a7f877\u003c/tt\u003e\u003c/a\u003e Ban all peers for all block script failures (Suhas Daftuar)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/7b999103e21509e1c2dec10f68e48744ffe90f55/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/7b999103e21509e1c2dec10f68e48744ffe90f55\"\u003e\u003ctt\u003e7b99910\u003c/tt\u003e\u003c/a\u003e Clean up banning levels (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/b8b4c80146780f9011abbd1be72343cc965c07b9/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/b8b4c80146780f9011abbd1be72343cc965c07b9\"\u003e\u003ctt\u003eb8b4c80\u003c/tt\u003e\u003c/a\u003e [refactor] drop IsInvalid(nDoSOut) (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/8818729013e17c650a25f030b2b80e0997389155/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/8818729013e17c650a25f030b2b80e0997389155\"\u003e\u003ctt\u003e8818729\u003c/tt\u003e\u003c/a\u003e [refactor] Refactor misbehavior ban decisions to MaybePunishNode() (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/00e11e61c0211a62788611cd6a6714a393fdc26c/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/00e11e61c0211a62788611cd6a6714a393fdc26c\"\u003e\u003ctt\u003e00e11e6\u003c/tt\u003e\u003c/a\u003e [refactor] rename stateDummy -\u0026gt; orphan_state (Matt Corallo)\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/f34fa719cf33a51d11f1d2219cbe73ccff6fd697/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/f34fa719cf33a51d11f1d2219cbe73ccff6fd697\"\u003e\u003ctt\u003ef34fa71\u003c/tt\u003e\u003c/a\u003e Drop obsolete sigops comment (Matt Corallo)\n\nPull request description:\n\n This is a rebase of \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"272352465\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/11639\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/bitcoin/bitcoin/pull/11639/hovercard\" href=\"https://github.com/bitcoin/bitcoin/pull/11639\"\u003e#11639\u003c/a\u003e with some fixes for the last few comments which were not yet addressed.\n\n The original PR text, with some strikethroughs of text that is no longer correct:\n\n \u0026gt; This cleans up an old main-carryover - it made sense that main could decide what DoS scores to assign things because the DoS scores were handled in a different part of main, but now validation is telling net_processing what DoS scores to assign to different things, which is utter nonsense. Instead, we replace CValidationState's nDoS and CorruptionPossible with a general ValidationInvalidReason, which net_processing can handle as it sees fit. I keep the behavior changes here to a minimum, but in the future we can utilize these changes for other smarter behavior, such as disconnecting/preferring to rotate outbound peers based on them providing things which are invalid due to SOFT_FORK because we shouldn't ban for such cases.\n \u0026gt;\n \u0026gt; This is somewhat complementary with, though obviously conflicts heavily with \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"266687463\" data-permission-text=\"Title is private\" data-url=\"https://github.com/bitcoin/bitcoin/issues/11523\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/bitcoin/bitcoin/pull/11523/hovercard\" href=\"https://github.com/bitcoin/bitcoin/pull/11523\"\u003e#11523\u003c/a\u003e, which added enums in place of DoS scores, as well as a few other cleanups (which are still relevant).\n \u0026gt;\n \u0026gt; Compared with previous bans, the following changes are made:\n \u0026gt;\n \u0026gt; Txn with empty vin/vout or null prevouts move from 10 DoS\n \u0026gt; points to 100.\n \u0026gt; Loose transactions with a dependency loop now result in a ban\n \u0026gt; instead of 10 DoS points.\n \u0026gt; ~~BIP68-violation no longer results in a ban as it is SOFT_FORK.~~\n \u0026gt; ~~Non-SegWit SigOp violation no longer results in a ban as it\n \u0026gt; considers P2SH sigops and is thus SOFT_FORK.~~\n \u0026gt; ~~Any script violation in a block no longer results in a ban as\n \u0026gt; it may be the result of a SOFT_FORK. This should likely be\n \u0026gt; fixed in the future by differentiating between them.~~\n \u0026gt; Proof of work failure moves from 50 DoS points to a ban.\n \u0026gt; Blocks with timestamps under MTP now result in a ban, blocks\n \u0026gt; too far in the future continue to not result in a ban.\n \u0026gt; Inclusion of non-final transactions in a block now results in a\n \u0026gt; ban instead of 10 DoS points.\n\n Note: The change to ban all peers for consensus violations is actually NOT the change I'd like to make -- I'd prefer to only ban outbound peers in those situations. The current behavior is a bit of a mess, however, and so in the interests of advancing this PR I tried to keep the changes to a minimum. I plan to revisit the behavior in a followup PR.\n\n EDIT: One reviewer suggested I add some additional context for this PR:\n\n \u0026gt; The goal of this work was to make net_processing aware of the actual reasons for validation failures, rather than just deal with opaque numbers instructing it to do something.\n \u0026gt;\n \u0026gt; In the future, I'd like to make it so that we use more context to decide how to punish a peer. One example is to differentiate inbound and outbound peer misbehaviors. Another potential example is if we'd treat RECENT_CONSENSUS_CHANGE failures differently (ie after the next consensus change is implemented), and perhaps again we'd want to treat some peers differently than others.\n\nACKs for commit 0ff1c2:\n jnewbery:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/0ff1c2a838da9e8dc7f77609adc89124bbea3e2b/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/0ff1c2a838da9e8dc7f77609adc89124bbea3e2b\"\u003e\u003ctt\u003e0ff1c2a\u003c/tt\u003e\u003c/a\u003e\n ryanofsky:\n utACK \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/0ff1c2a838da9e8dc7f77609adc89124bbea3e2b/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/0ff1c2a838da9e8dc7f77609adc89124bbea3e2b\"\u003e\u003ctt\u003e0ff1c2a\u003c/tt\u003e\u003c/a\u003e. Only change is dropping the first commit (\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/f3883a321bf4ab289edcd9754b12cae3a648b175/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/f3883a321bf4ab289edcd9754b12cae3a648b175\"\u003e\u003ctt\u003ef3883a3\u003c/tt\u003e\u003c/a\u003e), and dropping the temporary `assert(level == GetDoS())` that was in \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/35ee77f2832eaffce30042e00785c310c5540cdc/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/35ee77f2832eaffce30042e00785c310c5540cdc\"\u003e\u003ctt\u003e35ee77f\u003c/tt\u003e\u003c/a\u003e (now \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/bitcoin/bitcoin/commit/c8b0d22698385f91215ce8145631e3d5826dc977/hovercard\" href=\"https://github.com/bitcoin/bitcoin/commit/c8b0d22698385f91215ce8145631e3d5826dc977\"\u003e\u003ctt\u003ec8b0d22\u003c/tt\u003e\u003c/a\u003e)\n\nTree-SHA512: e915a411100876398af5463d0a885920e44d473467bb6af991ef2e8f2681db6c1209bb60f848bd154be72d460f039b5653df20a6840352c5f7ea5486d9f777a3","authors":[{"login":"laanwj","displayName":"Wladimir J. van der Laan","avatarUrl":"https://avatars.githubusercontent.com/u/126646?v=4","path":"/laanwj","isGitHub":false}],"committerAttribution":false,"committer":{"login":"laanwj","displayName":"Wladimir J. van der Laan","avatarUrl":"https://avatars.githubusercontent.com/u/126646?v=4","path":"/laanwj","isGitHub":false}}]},{"title":"May 3, 2019","commits":[{"oid":"486c1eea863a41e597ae4fddc392f446f2518b4b","url":"/bitcoin/bitcoin/commit/486c1eea863a41e597ae4fddc392f446f2518b4b","authoredDate":"2019-03-27T13:54:18.000-04:00","committedDate":"2019-05-03T15:03:05.000-04:00","shortMessage":"refactoring: remove unused chainActive","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"refactoring: remove unused chainActive\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/486c1eea863a41e597ae4fddc392f446f2518b4b\"\u003erefactoring: remove unused chainActive\u003c/a\u003e","bodyMessageHtml":"","authors":[{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}],"committerAttribution":false,"committer":{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}},{"oid":"631940aab228ccca64c15e05d5953f40381a0ffc","url":"/bitcoin/bitcoin/commit/631940aab228ccca64c15e05d5953f40381a0ffc","authoredDate":"2019-03-27T11:14:25.000-04:00","committedDate":"2019-05-03T15:02:54.000-04:00","shortMessage":"scripted-diff: replace chainActive -\u003e ::ChainActive()","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"scripted-diff: replace chainActive -\u0026gt; ::ChainActive()\n\nThough at the moment ChainActive() simply references `g_chainstate.m_chain`,\ndoing this change now clears the way for multiple chainstate usage and allows\nus to script the diff.\n\n-BEGIN VERIFY SCRIPT-\ngit grep -l \u0026quot;chainActive\u0026quot; | grep -E \u0026#39;(h|cpp)$\u0026#39; | xargs sed -i \u0026#39;/chainActive =/b; /extern CChain\u0026amp; chainActive/b; s/\\(::\\)\\{0,1\\}chainActive/::ChainActive()/g\u0026#39;\n-END VERIFY SCRIPT-\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/631940aab228ccca64c15e05d5953f40381a0ffc\"\u003escripted-diff: replace chainActive -\u0026gt; ::ChainActive()\u003c/a\u003e","bodyMessageHtml":"Though at the moment ChainActive() simply references `g_chainstate.m_chain`,\ndoing this change now clears the way for multiple chainstate usage and allows\nus to script the diff.\n\n-BEGIN VERIFY SCRIPT-\ngit grep -l \"chainActive\" | grep -E '(h|cpp)$' | xargs sed -i '/chainActive =/b; /extern CChain\u0026amp; chainActive/b; s/\\(::\\)\\{0,1\\}chainActive/::ChainActive()/g'\n-END VERIFY SCRIPT-","authors":[{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}],"committerAttribution":false,"committer":{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}},{"oid":"a3a609079c76dd2bbc72127488bf466cc61d8940","url":"/bitcoin/bitcoin/commit/a3a609079c76dd2bbc72127488bf466cc61d8940","authoredDate":"2019-03-27T10:55:57.000-04:00","committedDate":"2019-05-03T14:38:38.000-04:00","shortMessage":"refactoring: introduce unused ChainActive()","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"refactoring: introduce unused ChainActive()\n\nin preparation for the following scripted-diff commit.\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/a3a609079c76dd2bbc72127488bf466cc61d8940\"\u003erefactoring: introduce unused ChainActive()\u003c/a\u003e","bodyMessageHtml":"in preparation for the following scripted-diff commit.","authors":[{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}],"committerAttribution":false,"committer":{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}},{"oid":"1b6e6fcfd2f8a8def148ea0f50af202d5cae318a","url":"/bitcoin/bitcoin/commit/1b6e6fcfd2f8a8def148ea0f50af202d5cae318a","authoredDate":"2019-03-27T10:36:30.000-04:00","committedDate":"2019-05-03T14:38:30.000-04:00","shortMessage":"rename: CChainState.chainActive -\u003e m_chain","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"rename: CChainState.chainActive -\u0026gt; m_chain\n\nThis can\u0026#39;t be a scripted-diff due to the confusion of the global\nchainActive and the CChainState member of the same name.\n\nThis specific rename makes the following chainActive -\u0026gt; ::ChainActive() diff\nscriptable.\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/1b6e6fcfd2f8a8def148ea0f50af202d5cae318a\"\u003erename: CChainState.chainActive -\u0026gt; m_chain\u003c/a\u003e","bodyMessageHtml":"This can't be a scripted-diff due to the confusion of the global\nchainActive and the CChainState member of the same name.\n\nThis specific rename makes the following chainActive -\u0026gt; ::ChainActive() diff\nscriptable.","authors":[{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}],"committerAttribution":false,"committer":{"login":"jamesob","displayName":"James O'Beirne","avatarUrl":"https://avatars.githubusercontent.com/u/73197?v=4","path":"/jamesob","isGitHub":false}}]},{"title":"May 2, 2019","commits":[{"oid":"0ff1c2a838da9e8dc7f77609adc89124bbea3e2b","url":"/bitcoin/bitcoin/commit/0ff1c2a838da9e8dc7f77609adc89124bbea3e2b","authoredDate":"2019-03-08T09:55:23.000-05:00","committedDate":"2019-05-02T15:30:58.000-04:00","shortMessage":"Separate reason for premature spends (coinbase/locktime)","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Separate reason for premature spends (coinbase/locktime)\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/0ff1c2a838da9e8dc7f77609adc89124bbea3e2b\"\u003eSeparate reason for premature spends (coinbase/locktime)\u003c/a\u003e","bodyMessageHtml":"","authors":[{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}],"committerAttribution":false,"committer":{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}},{"oid":"54470e767bab37f9b7089782b1be73d5883bb244","url":"/bitcoin/bitcoin/commit/54470e767bab37f9b7089782b1be73d5883bb244","authoredDate":"2019-02-21T13:46:25.000-05:00","committedDate":"2019-05-02T15:29:09.000-04:00","shortMessage":"Assert validation reasons are contextually correct","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Assert validation reasons are contextually correct\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/54470e767bab37f9b7089782b1be73d5883bb244\"\u003eAssert validation reasons are contextually correct\u003c/a\u003e","bodyMessageHtml":"","authors":[{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}],"committerAttribution":false,"committer":{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}},{"oid":"2120c31521aa51aa1984ee33250b8320506d3a0f","url":"/bitcoin/bitcoin/commit/2120c31521aa51aa1984ee33250b8320506d3a0f","authoredDate":"2018-04-17T10:46:30.000-04:00","committedDate":"2019-05-02T15:27:32.000-04:00","shortMessage":"[refactor] Update some comments in validation.cpp as we arent doing DoS there","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"[refactor] Update some comments in validation.cpp as we arent doing DoS there\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/2120c31521aa51aa1984ee33250b8320506d3a0f\"\u003e[refactor] Update some comments in validation.cpp as we arent doing DoS there\u003c/a\u003e","bodyMessageHtml":"","authors":[{"login":"TheBlueMatt","displayName":"Matt Corallo","avatarUrl":"https://avatars.githubusercontent.com/u/649246?v=4","path":"/TheBlueMatt","isGitHub":false}],"committerAttribution":true,"committer":{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}},{"oid":"aa502b88d10c2c3ac56d9163555849b96dc4df1e","url":"/bitcoin/bitcoin/commit/aa502b88d10c2c3ac56d9163555849b96dc4df1e","authoredDate":"2019-04-11T14:11:48.000-04:00","committedDate":"2019-05-02T15:24:07.000-04:00","shortMessage":"scripted-diff: Remove DoS calls to CValidationState","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"scripted-diff: Remove DoS calls to CValidationState\n\n-BEGIN VERIFY SCRIPT-\nsed -i \u0026#39;s/\\.DoS(\\(.*\\), REJECT_\\(.*\\), \\(true\\|false\\)/.DoS(\\1, REJECT_\\2/\u0026#39; src/validation.cpp src/consensus/tx_verify.cpp src/consensus/tx_check.cpp\nsed -i \u0026#39;s/state.GetRejectCode(), state.GetRejectReason(), [^,]\\+, state.GetDebugMessage())/state.GetRejectCode(), state.GetRejectReason(), state.GetDebugMessage())/\u0026#39; src/validation.cpp\nsed -i \u0026#39;s/\\.DoS([^,]*, /.Invalid\\(/\u0026#39; src/validation.cpp src/consensus/tx_verify.cpp src/consensus/tx_check.cpp\n-END VERIFY SCRIPT-\n\nCo-authored-by: Suhas Daftuar \u0026lt;sdaftuar@gmail.com\u0026gt;\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/aa502b88d10c2c3ac56d9163555849b96dc4df1e\"\u003escripted-diff: Remove DoS calls to CValidationState\u003c/a\u003e","bodyMessageHtml":"-BEGIN VERIFY SCRIPT-\nsed -i 's/\\.DoS(\\(.*\\), REJECT_\\(.*\\), \\(true\\|false\\)/.DoS(\\1, REJECT_\\2/' src/validation.cpp src/consensus/tx_verify.cpp src/consensus/tx_check.cpp\nsed -i 's/state.GetRejectCode(), state.GetRejectReason(), [^,]\\+, state.GetDebugMessage())/state.GetRejectCode(), state.GetRejectReason(), state.GetDebugMessage())/' src/validation.cpp\nsed -i 's/\\.DoS([^,]*, /.Invalid\\(/' src/validation.cpp src/consensus/tx_verify.cpp src/consensus/tx_check.cpp\n-END VERIFY SCRIPT-\n\nCo-authored-by: Suhas Daftuar \u0026lt;sdaftuar@gmail.com\u0026gt;","authors":[{"login":"TheBlueMatt","displayName":"Matt Corallo","avatarUrl":"https://avatars.githubusercontent.com/u/649246?v=4","path":"/TheBlueMatt","isGitHub":false},{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}],"committerAttribution":false,"committer":{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}},{"oid":"7721ad64f40a0c67edefaaf7353264d78df8803e","url":"/bitcoin/bitcoin/commit/7721ad64f40a0c67edefaaf7353264d78df8803e","authoredDate":"2017-11-08T14:50:18.000-05:00","committedDate":"2019-05-02T15:22:29.000-04:00","shortMessage":"[refactor] Prep for scripted-diff by removing some \\ns which annoy sed.","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"[refactor] Prep for scripted-diff by removing some \\ns which annoy sed.\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/7721ad64f40a0c67edefaaf7353264d78df8803e\"\u003e[refactor] Prep for scripted-diff by removing some \\ns which annoy sed.\u003c/a\u003e","bodyMessageHtml":"","authors":[{"login":"TheBlueMatt","displayName":"Matt Corallo","avatarUrl":"https://avatars.githubusercontent.com/u/649246?v=4","path":"/TheBlueMatt","isGitHub":false}],"committerAttribution":true,"committer":{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}},{"oid":"9ab2a0412e96e87956fe61257387683635213035","url":"/bitcoin/bitcoin/commit/9ab2a0412e96e87956fe61257387683635213035","authoredDate":"2019-01-18T12:56:06.000+10:00","committedDate":"2019-05-02T15:14:12.000-04:00","shortMessage":"CorruptionPossible -\u003e BLOCK_MUTATED","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"CorruptionPossible -\u0026gt; BLOCK_MUTATED\n\nCo-authored-by: Anthony Towns \u0026lt;aj@erisian.com.au\u0026gt;\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/9ab2a0412e96e87956fe61257387683635213035\"\u003eCorruptionPossible -\u0026gt; BLOCK_MUTATED\u003c/a\u003e","bodyMessageHtml":"Co-authored-by: Anthony Towns \u0026lt;aj@erisian.com.au\u0026gt;","authors":[{"login":"TheBlueMatt","displayName":"Matt Corallo","avatarUrl":"https://avatars.githubusercontent.com/u/649246?v=4","path":"/TheBlueMatt","isGitHub":false},{"login":"ajtowns","displayName":"Anthony Towns","avatarUrl":"https://avatars.githubusercontent.com/u/127186?v=4","path":"/ajtowns","isGitHub":false}],"committerAttribution":true,"committer":{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}},{"oid":"34477ccd39a8d4bfa8ad612f22d5a46291922185","url":"/bitcoin/bitcoin/commit/34477ccd39a8d4bfa8ad612f22d5a46291922185","authoredDate":"2019-01-16T13:11:13.000+10:00","committedDate":"2019-05-02T14:55:13.000-04:00","shortMessage":"[refactor] Add useful-for-dos \"reason\" field to CValidationState","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"[refactor] Add useful-for-dos \u0026quot;reason\u0026quot; field to CValidationState\n\nThis is a first step towards cleaning up our DoS interface - make\nvalidation return *why* something is invalid, and let net_processing\nfigure out what that implies in terms of banning/disconnection/etc.\n\nBehavior change: peers will now be banned for providing blocks\nwith premature coinbase spends.\n\nCo-authored-by: Anthony Towns \u0026lt;aj@erisian.com.au\u0026gt;\n Suhas Daftuar \u0026lt;sdaftuar@gmail.com\u0026gt;\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/34477ccd39a8d4bfa8ad612f22d5a46291922185\"\u003e[refactor] Add useful-for-dos \"reason\" field to CValidationState\u003c/a\u003e","bodyMessageHtml":"This is a first step towards cleaning up our DoS interface - make\nvalidation return *why* something is invalid, and let net_processing\nfigure out what that implies in terms of banning/disconnection/etc.\n\nBehavior change: peers will now be banned for providing blocks\nwith premature coinbase spends.\n\nCo-authored-by: Anthony Towns \u0026lt;aj@erisian.com.au\u0026gt;\n Suhas Daftuar \u0026lt;sdaftuar@gmail.com\u0026gt;","authors":[{"login":"TheBlueMatt","displayName":"Matt Corallo","avatarUrl":"https://avatars.githubusercontent.com/u/649246?v=4","path":"/TheBlueMatt","isGitHub":false},{"login":"sdaftuar","displayName":"Anthony Towns \u003caj@erisian.com.au\u003e Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}],"committerAttribution":false,"committer":{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}},{"oid":"6a7f8777a0b193fae4f976196f3464ffac01bf1b","url":"/bitcoin/bitcoin/commit/6a7f8777a0b193fae4f976196f3464ffac01bf1b","authoredDate":"2019-04-16T12:38:14.000-04:00","committedDate":"2019-05-02T11:00:19.000-04:00","shortMessage":"Ban all peers for all block script failures","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Ban all peers for all block script failures\n\nThis eliminates a discrepancy between block validation with multiple\nscript check threads, versus a single script check thread.\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/6a7f8777a0b193fae4f976196f3464ffac01bf1b\"\u003eBan all peers for all block script failures\u003c/a\u003e","bodyMessageHtml":"This eliminates a discrepancy between block validation with multiple\nscript check threads, versus a single script check thread.","authors":[{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}],"committerAttribution":false,"committer":{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}},{"oid":"7b999103e21509e1c2dec10f68e48744ffe90f55","url":"/bitcoin/bitcoin/commit/7b999103e21509e1c2dec10f68e48744ffe90f55","authoredDate":"2019-01-23T15:14:16.000-05:00","committedDate":"2019-05-02T11:00:19.000-04:00","shortMessage":"Clean up banning levels","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Clean up banning levels\n\nCompared with previous bans, the following changes are made:\n * Txn with empty vin/vout or null prevouts move from 10 DoS\n points to 100.\n * Loose transactions with a dependency loop now result in a ban\n instead of 10 DoS points.\n * Many pre-segwit soft-fork errors now result in a ban.\n Note: Transactions that violate soft-fork script flags since P2SH do not generally\n result in a ban. Also, banning behavior for invalid blocks is dependent on\n whether the node is validating with multiple script check threads, due to a long-\n standing bug. That inconsistency is still present after this commit.\n * Proof of work failure moves from 50 DoS points to a ban.\n * Blocks with timestamps under MTP now result in a ban, blocks\n too far in the future continue to *not* result in a ban.\n * Inclusion of non-final transactions in a block now results in a\n ban instead of 10 DoS points.\n\nCo-authored-by: Anthony Towns \u0026lt;aj@erisian.com.au\u0026gt;\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/7b999103e21509e1c2dec10f68e48744ffe90f55\"\u003eClean up banning levels\u003c/a\u003e","bodyMessageHtml":"Compared with previous bans, the following changes are made:\n * Txn with empty vin/vout or null prevouts move from 10 DoS\n points to 100.\n * Loose transactions with a dependency loop now result in a ban\n instead of 10 DoS points.\n * Many pre-segwit soft-fork errors now result in a ban.\n Note: Transactions that violate soft-fork script flags since P2SH do not generally\n result in a ban. Also, banning behavior for invalid blocks is dependent on\n whether the node is validating with multiple script check threads, due to a long-\n standing bug. That inconsistency is still present after this commit.\n * Proof of work failure moves from 50 DoS points to a ban.\n * Blocks with timestamps under MTP now result in a ban, blocks\n too far in the future continue to *not* result in a ban.\n * Inclusion of non-final transactions in a block now results in a\n ban instead of 10 DoS points.\n\nCo-authored-by: Anthony Towns \u0026lt;aj@erisian.com.au\u0026gt;","authors":[{"login":"TheBlueMatt","displayName":"Matt Corallo","avatarUrl":"https://avatars.githubusercontent.com/u/649246?v=4","path":"/TheBlueMatt","isGitHub":false},{"login":"ajtowns","displayName":"Anthony Towns","avatarUrl":"https://avatars.githubusercontent.com/u/127186?v=4","path":"/ajtowns","isGitHub":false}],"committerAttribution":true,"committer":{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}},{"oid":"f34fa719cf33a51d11f1d2219cbe73ccff6fd697","url":"/bitcoin/bitcoin/commit/f34fa719cf33a51d11f1d2219cbe73ccff6fd697","authoredDate":"2019-01-18T23:14:21.000+10:00","committedDate":"2019-05-02T11:00:19.000-04:00","shortMessage":"Drop obsolete sigops comment","shortMessageMarkdown":null,"shortMessageMarkdownLink":"\u003ca data-pjax=\"true\" title=\"Drop obsolete sigops comment\n\nThis comment was confusing and incorrect when first added (\u0026quot;invalid rather than\nmerely non-standard\u0026quot; has the opposite meaning of what is actually the case),\nand was also not updated after segwit with the correct variable names.\n\nDelete it since the code reads just fine on its own.\n\nCo-authored by: Anthony Towns \u0026lt;aj@erisian.com.au\u0026gt;\n Suhas Daftuar \u0026lt;sdaftuar@gmail.com\u0026gt;\" class=\"color-fg-default\" href=\"/bitcoin/bitcoin/commit/f34fa719cf33a51d11f1d2219cbe73ccff6fd697\"\u003eDrop obsolete sigops comment\u003c/a\u003e","bodyMessageHtml":"This comment was confusing and incorrect when first added (\"invalid rather than\nmerely non-standard\" has the opposite meaning of what is actually the case),\nand was also not updated after segwit with the correct variable names.\n\nDelete it since the code reads just fine on its own.\n\nCo-authored by: Anthony Towns \u0026lt;aj@erisian.com.au\u0026gt;\n Suhas Daftuar \u0026lt;sdaftuar@gmail.com\u0026gt;","authors":[{"login":"TheBlueMatt","displayName":"Matt Corallo","avatarUrl":"https://avatars.githubusercontent.com/u/649246?v=4","path":"/TheBlueMatt","isGitHub":false}],"committerAttribution":true,"committer":{"login":"sdaftuar","displayName":"Suhas Daftuar","avatarUrl":"https://avatars.githubusercontent.com/u/7463573?v=4","path":"/sdaftuar","isGitHub":false}}]}],"currentCommit":{"oid":"332c6134bb15384e5b91c631e821fe52a591d3bc"},"filters":{"since":null,"until":null,"author":null,"newPath":null,"originalBranch":null,"currentBlobPath":"src/validation.cpp","pagination":{"startCursor":"332c6134bb15384e5b91c631e821fe52a591d3bc 0","endCursor":"332c6134bb15384e5b91c631e821fe52a591d3bc 34","hasNextPage":true,"hasPreviousPage":false}},"metadata":{"browsingRenameHistory":null,"showProfileHelp":false,"deferredDataUrl":"/bitcoin/bitcoin/commits/deferred_commit_data/332c6134bb15384e5b91c631e821fe52a591d3bc?original_branch=332c6134bb15384e5b91c631e821fe52a591d3bc\u0026path=src%2Fvalidation.cpp","deferredContributorUrl":"/bitcoin/bitcoin/commits/deferred_commit_contributors","softNavToCommit":false},"repo":{"id":1181927,"defaultBranch":"master","name":"bitcoin","ownerLogin":"bitcoin","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2010-12-19T15:16:43.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/528860?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"332c6134bb15384e5b91c631e821fe52a591d3bc","listCacheKey":"v0:1736274879.0","refType":"tree","currentOid":"332c6134bb15384e5b91c631e821fe52a591d3bc"},"timedOutMessage":""},"title":"History for src/validation.cpp - bitcoin/bitcoin","appPayload":{"helpUrl":"https://docs.github.com","enabled_features":{"commits_ux_refresh_compare":false}}}</script> <div data-target="react-app.reactRoot"><style data-styled="true" data-styled-version="5.3.11">.kkWQEA{padding:16px;}/*!sc*/ @media screen and (min-width:544px){}/*!sc*/ @media screen and (min-width:768px){}/*!sc*/ @media screen and (min-width:1012px){.kkWQEA{padding:24px;}}/*!sc*/ .bSJDXx{max-width:1280px;margin-left:auto;margin-right:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}/*!sc*/ .jPRcNF{width:100%;margin-bottom:16px;}/*!sc*/ .hOfjFo{padding:0;}/*!sc*/ .gKBBxN{margin-left:-16px;margin-right:-16px;display:block;height:1px;background-color:var(--borderColor-default,var(--color-border-default,#d0d7de));margin-top:0;}/*!sc*/ @media screen and (min-width:544px){}/*!sc*/ @media screen and (min-width:768px){.gKBBxN{margin-left:0 !important;margin-right:0 !important;}}/*!sc*/ @media screen and (min-width:1012px){.gKBBxN{margin-left:-24px;margin-right:-24px;}}/*!sc*/ .kowOcT{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 100%;-ms-flex:1 1 100%;flex:1 1 100%;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:100%;}/*!sc*/ .dQkwwl{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-order:2;-ms-flex-order:2;order:2;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;min-width:1px;}/*!sc*/ .FxAyp{width:100%;max-width:100%;margin-left:auto;margin-right:auto;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0;}/*!sc*/ .gwHaUx{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;gap:8px;margin-bottom:16px;}/*!sc*/ .eItYAW{margin-top:0;margin-bottom:0;padding-left:0;}/*!sc*/ .cSURfY{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ .hjDqIa{margin-right:8px;}/*!sc*/ .dGVxWp{max-width:125px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}/*!sc*/ .izArLR{position:relative;z-index:1;}/*!sc*/ .bbNsBg{margin-right:8px;margin-left:-15px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));background-color:var(--timelineBadge-bgColor,var(--color-timeline-badge-bg,#eaeef2));display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;width:32px;height:32px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;border-width:2px;border-style:solid;border-color:var(--bgColor-default,var(--color-canvas-default,#ffffff));background-color:var(--bgColor-default,var(--color-canvas-default,#ffffff));}/*!sc*/ .dpBUfI{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ @media screen and (min-width:544px){.dpBUfI{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}/*!sc*/ @media screen and (min-width:768px){.dpBUfI{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}/*!sc*/ @media screen and (min-width:1012px){.dpBUfI{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}}/*!sc*/ .hKWjvQ{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ .bbHsCC{width:16px;height:16px;margin-right:8px;margin-top:-1px;margin-left:1px;}/*!sc*/ .jRhDJg{font-weight:400;white-space:nowrap;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .jRhDJg:hover{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .irPhWZ{width:60px;}/*!sc*/ .fIQuDd{width:20px;}/*!sc*/ .dNbsEP{width:62px;}/*!sc*/ .iCHGgS{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:4px;}/*!sc*/ .fmQaBv{margin-left:4px;margin-right:4px;}/*!sc*/ .cQAMJB[data-size="medium"][data-no-visuals]{background-color:transparent;border:none;cursor:default;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));font-weight:400;}/*!sc*/ .gUkoLg{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}/*!sc*/ data-styled.g1[id="Box-sc-g0xbh4-0"]{content:"kkWQEA,bSJDXx,jPRcNF,hOfjFo,gKBBxN,kowOcT,dQkwwl,FxAyp,gwHaUx,eItYAW,cSURfY,hjDqIa,dGVxWp,izArLR,bbNsBg,dpBUfI,hKWjvQ,bbHsCC,jRhDJg,irPhWZ,fIQuDd,dNbsEP,iCHGgS,fmQaBv,cQAMJB,gUkoLg,"}/*!sc*/ .hWqAbU:where([data-size='small']){font-size:var(--text-body-size-small,0.75rem);line-height:var(--text-body-lineHeight-small,1.6666);}/*!sc*/ .hWqAbU:where([data-size='medium']){font-size:var(--text-body-size-medium,0.875rem);line-height:var(--text-body-lineHeight-medium,1.4285);}/*!sc*/ .hWqAbU:where([data-size='large']){font-size:var(--text-body-size-large,1rem);line-height:var(--text-body-lineHeight-large,1.5);}/*!sc*/ .hWqAbU:where([data-weight='light']){font-weight:var(--base-text-weight-light,300);}/*!sc*/ .hWqAbU:where([data-weight='normal']){font-weight:var(--base-text-weight-normal,400);}/*!sc*/ .hWqAbU:where([data-weight='medium']){font-weight:var(--base-text-weight-medium,500);}/*!sc*/ .hWqAbU:where([data-weight='semibold']){font-weight:var(--base-text-weight-semibold,600);}/*!sc*/ .fgBxNv{font-weight:400;white-space:nowrap;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .fgBxNv:where([data-size='small']){font-size:var(--text-body-size-small,0.75rem);line-height:var(--text-body-lineHeight-small,1.6666);}/*!sc*/ .fgBxNv:where([data-size='medium']){font-size:var(--text-body-size-medium,0.875rem);line-height:var(--text-body-lineHeight-medium,1.4285);}/*!sc*/ .fgBxNv:where([data-size='large']){font-size:var(--text-body-size-large,1rem);line-height:var(--text-body-lineHeight-large,1.5);}/*!sc*/ .fgBxNv:where([data-weight='light']){font-weight:var(--base-text-weight-light,300);}/*!sc*/ .fgBxNv:where([data-weight='normal']){font-weight:var(--base-text-weight-normal,400);}/*!sc*/ .fgBxNv:where([data-weight='medium']){font-weight:var(--base-text-weight-medium,500);}/*!sc*/ .fgBxNv:where([data-weight='semibold']){font-weight:var(--base-text-weight-semibold,600);}/*!sc*/ data-styled.g3[id="Text__StyledText-sc-17v1xeu-0"]{content:"hWqAbU,fgBxNv,"}/*!sc*/ .jOyaRH{display:none;}/*!sc*/ .jOyaRH[popover]{position:absolute;padding:0.5em 0.75em;width:-webkit-max-content;width:-moz-max-content;width:max-content;margin:auto;-webkit-clip:auto;clip:auto;white-space:normal;font:normal normal 11px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:subpixel-antialiased;color:var(--tooltip-fgColor,var(--fgColor-onEmphasis,var(--color-fg-on-emphasis,#ffffff)));text-align:center;word-wrap:break-word;background:var(--tooltip-bgColor,var(--bgColor-emphasis,var(--color-neutral-emphasis-plus,#24292f)));border-radius:6px;border:0;opacity:0;max-width:250px;inset:auto;overflow:visible;}/*!sc*/ .jOyaRH[popover]:popover-open{display:block;}/*!sc*/ .jOyaRH[popover].\:popover-open{display:block;}/*!sc*/ @media (forced-colors:active){.jOyaRH{outline:1px solid transparent;}}/*!sc*/ .jOyaRH::after{position:absolute;display:block;right:0;left:0;height:var(--overlay-offset,0.25rem);content:'';}/*!sc*/ .jOyaRH[data-direction='n']::after,.jOyaRH[data-direction='ne']::after,.jOyaRH[data-direction='nw']::after{top:100%;}/*!sc*/ .jOyaRH[data-direction='s']::after,.jOyaRH[data-direction='se']::after,.jOyaRH[data-direction='sw']::after{bottom:100%;}/*!sc*/ .jOyaRH[data-direction='w']::after{position:absolute;display:block;height:100%;width:8px;content:'';bottom:0;left:100%;}/*!sc*/ .jOyaRH[data-direction='e']::after{position:absolute;display:block;height:100%;width:8px;content:'';bottom:0;right:100%;margin-left:-8px;}/*!sc*/ @-webkit-keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ @keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ .jOyaRH:popover-open,.jOyaRH:popover-open::before{-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .jOyaRH.\:popover-open,.jOyaRH.\:popover-open::before{-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ data-styled.g16[id="Tooltip__StyledTooltip-sc-e45c7z-0"]{content:"jOyaRH,"}/*!sc*/ .hWlpPn{position:relative;display:inline-block;}/*!sc*/ .hWlpPn::after{position:absolute;z-index:1000000;display:none;padding:0.5em 0.75em;font:normal normal 11px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:subpixel-antialiased;color:var(--tooltip-fgColor,var(--fgColor-onEmphasis,var(--color-fg-on-emphasis,#ffffff)));text-align:center;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;-webkit-letter-spacing:normal;-moz-letter-spacing:normal;-ms-letter-spacing:normal;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:var(--tooltip-bgColor,var(--bgColor-emphasis,var(--color-neutral-emphasis-plus,#24292f)));border-radius:6px;opacity:0;}/*!sc*/ @-webkit-keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ @keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ .hWlpPn:hover::after,.hWlpPn:active::after,.hWlpPn:focus::after,.hWlpPn:focus-within::after{display:inline-block;-webkit-text-decoration:none;text-decoration:none;-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-no-delay:hover::after,.hWlpPn.tooltipped-no-delay:active::after,.hWlpPn.tooltipped-no-delay:focus::after,.hWlpPn.tooltipped-no-delay:focus-within::after{-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-multiline:hover::after,.hWlpPn.tooltipped-multiline:active::after,.hWlpPn.tooltipped-multiline:focus::after,.hWlpPn.tooltipped-multiline:focus-within::after{display:table-cell;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-se::after,.hWlpPn.tooltipped-sw::after{top:100%;right:50%;margin-top:6px;}/*!sc*/ .hWlpPn.tooltipped-se::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-sw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-n::after,.hWlpPn.tooltipped-ne::after,.hWlpPn.tooltipped-nw::after{right:50%;bottom:100%;margin-bottom:6px;}/*!sc*/ .hWlpPn.tooltipped-ne::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-nw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-n::after{-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%);}/*!sc*/ .hWlpPn.tooltipped-w::after{right:100%;bottom:50%;margin-right:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-e::after{bottom:50%;left:100%;margin-left:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-multiline::after{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;word-wrap:break-word;white-space:pre-line;border-collapse:separate;}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-s::after,.hWlpPn.tooltipped-multiline.tooltipped-n::after{right:auto;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-w::after,.hWlpPn.tooltipped-multiline.tooltipped-e::after{right:100%;}/*!sc*/ .hWlpPn.tooltipped-align-right-2::after{right:0;margin-right:0;}/*!sc*/ .hWlpPn.tooltipped-align-left-2::after{left:0;margin-left:0;}/*!sc*/ data-styled.g17[id="Tooltip__TooltipBase-sc-17tf59c-0"]{content:"hWlpPn,"}/*!sc*/ .cPKWJh{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:150px;}/*!sc*/ @media screen and (min-width:544px){.cPKWJh{max-width:150px;}}/*!sc*/ @media screen and (min-width:768px){.cPKWJh{max-width:200px;}}/*!sc*/ data-styled.g19[id="Truncate__StyledTruncate-sc-23o1d2-0"]{content:"cPKWJh,"}/*!sc*/ .knLhXt{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .WGJwj{margin-top:2px;margin-bottom:2px;}/*!sc*/ data-styled.g61[id="Octicon-sc-9kayk9-0"]{content:"knLhXt,WGJwj,"}/*!sc*/ .irithh{position:relative;overflow:hidden;-webkit-mask-image:radial-gradient(white,black);mask-image:radial-gradient(white,black);background-color:var(--bgColor-neutral-muted,var(--color-neutral-subtle,rgba(234,238,242,0.5)));border-radius:3px;display:block;height:1.2em;width:60px;}/*!sc*/ .irithh::after{-webkit-animation:crVFvv 1.5s infinite linear;animation:crVFvv 1.5s infinite linear;background:linear-gradient(90deg,transparent,var(--bgColor-neutral-muted,var(--color-neutral-subtle,rgba(234,238,242,0.5))),transparent);content:'';position:absolute;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);bottom:0;left:0;right:0;top:0;}/*!sc*/ .irOdmh{position:relative;overflow:hidden;-webkit-mask-image:radial-gradient(white,black);mask-image:radial-gradient(white,black);background-color:var(--bgColor-neutral-muted,var(--color-neutral-subtle,rgba(234,238,242,0.5)));border-radius:3px;display:block;height:1.2em;width:20px;}/*!sc*/ .irOdmh::after{-webkit-animation:crVFvv 1.5s infinite linear;animation:crVFvv 1.5s infinite linear;background:linear-gradient(90deg,transparent,var(--bgColor-neutral-muted,var(--color-neutral-subtle,rgba(234,238,242,0.5))),transparent);content:'';position:absolute;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);bottom:0;left:0;right:0;top:0;}/*!sc*/ .ihfxfT{position:relative;overflow:hidden;-webkit-mask-image:radial-gradient(white,black);mask-image:radial-gradient(white,black);background-color:var(--bgColor-neutral-muted,var(--color-neutral-subtle,rgba(234,238,242,0.5)));border-radius:3px;display:block;height:1.2em;width:62px;}/*!sc*/ .ihfxfT::after{-webkit-animation:crVFvv 1.5s infinite linear;animation:crVFvv 1.5s infinite linear;background:linear-gradient(90deg,transparent,var(--bgColor-neutral-muted,var(--color-neutral-subtle,rgba(234,238,242,0.5))),transparent);content:'';position:absolute;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);bottom:0;left:0;right:0;top:0;}/*!sc*/ data-styled.g71[id="LoadingSkeleton-sc-695d630a-0"]{content:"irithh,irOdmh,ihfxfT,"}/*!sc*/ .hzFJAq{--avatar-border-width:1px;--avatar-two-margin:calc(var(--avatar-stack-size) * -0.55);--avatar-three-margin:calc(var(--avatar-stack-size) * -0.85);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;height:var(--avatar-stack-size);min-width:var(--avatar-stack-size);--avatar-stack-size:16px;}/*!sc*/ .hzFJAq .pc-AvatarStackBody{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:absolute;}/*!sc*/ .hzFJAq .pc-AvatarStackBody:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:1px;}/*!sc*/ .hzFJAq .pc-AvatarStackBody:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .hzFJAq .pc-AvatarStackBody:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:1px;}/*!sc*/ .hzFJAq .pc-AvatarItem{--avatar-size:var(--avatar-stack-size);-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;height:var(--avatar-stack-size);width:var(--avatar-stack-size);position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ .hzFJAq .pc-AvatarItem:is(img){box-shadow:0 0 0 var(--avatar-border-width) var(--bgColor-default,var(--color-canvas-default,#ffffff));}/*!sc*/ .hzFJAq .pc-AvatarItem:first-child{margin-left:0;z-index:10;}/*!sc*/ .hzFJAq .pc-AvatarItem:nth-child(n + 2){margin-left:var(--avatar-two-margin);z-index:9;}/*!sc*/ .hzFJAq .pc-AvatarItem:nth-child(n + 3){margin-left:var(--avatar-three-margin);opacity:55%;z-index:8;}/*!sc*/ .hzFJAq .pc-AvatarItem:nth-child(n + 4){opacity:40%;z-index:7;}/*!sc*/ .hzFJAq .pc-AvatarItem:nth-child(n + 5){opacity:25%;z-index:6;}/*!sc*/ .hzFJAq .pc-AvatarItem:nth-child(n + 6){opacity:0;visibility:hidden;}/*!sc*/ .hzFJAq.pc-AvatarStack--two{min-width:calc( var(--avatar-stack-size) + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + var(--avatar-border-width) );}/*!sc*/ .hzFJAq.pc-AvatarStack--three{min-width:calc( var(--avatar-stack-size) + calc( calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + calc(var(--avatar-stack-size) + var(--avatar-three-margin)) ) );}/*!sc*/ .hzFJAq.pc-AvatarStack--three-plus{min-width:calc( var(--avatar-stack-size) + calc( calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + calc(var(--avatar-stack-size) + var(--avatar-three-margin)) * 2 ) );}/*!sc*/ .hzFJAq.pc-AvatarStack--right{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;}/*!sc*/ .hzFJAq.pc-AvatarStack--right .pc-AvatarItem{margin-left:0 !important;}/*!sc*/ .hzFJAq.pc-AvatarStack--right .pc-AvatarItem:first-child{margin-right:0;}/*!sc*/ .hzFJAq.pc-AvatarStack--right .pc-AvatarItem:nth-child(n + 2){margin-right:var(--avatar-two-margin);}/*!sc*/ .hzFJAq.pc-AvatarStack--right .pc-AvatarItem:nth-child(n + 3){margin-right:var(--avatar-three-margin);}/*!sc*/ .hzFJAq.pc-AvatarStack--right .pc-AvatarStackBody{-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;}/*!sc*/ .hzFJAq.pc-AvatarStack--right .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):hover .pc-AvatarItem,.hzFJAq.pc-AvatarStack--right .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):focus-within .pc-AvatarItem{margin-right:4px!important;margin-left:0 !important;}/*!sc*/ .hzFJAq.pc-AvatarStack--right .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):hover .pc-AvatarItem:first-child,.hzFJAq.pc-AvatarStack--right .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):focus-within .pc-AvatarItem:first-child{margin-right:0 !important;}/*!sc*/ .hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):hover,.hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):focus-within{width:auto;}/*!sc*/ .hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):hover .pc-AvatarItem,.hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):focus-within .pc-AvatarItem{margin-left:4px;opacity:100%;visibility:visible;-webkit-transition:margin 0.2s ease-in-out,opacity 0.2s ease-in-out,visibility 0.2s ease-in-out,box-shadow 0.1s ease-in-out;transition:margin 0.2s ease-in-out,opacity 0.2s ease-in-out,visibility 0.2s ease-in-out,box-shadow 0.1s ease-in-out;}/*!sc*/ .hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):hover .pc-AvatarItem box-shadow:inset 0 0 0 4px function(n),.hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):focus-within .pc-AvatarItem box-shadow:inset 0 0 0 4px function(n){return(0,r.Jt)(n.theme,e,t);}/*!sc*/ .hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):hover .pc-AvatarItem:focus:not(:disabled),.hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):focus-within .pc-AvatarItem:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:1px;}/*!sc*/ .hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):hover .pc-AvatarItem:focus:not(:disabled):not(:focus-visible),.hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):focus-within .pc-AvatarItem:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):hover .pc-AvatarItem:focus-visible:not(:disabled),.hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):focus-within .pc-AvatarItem:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:1px;}/*!sc*/ .hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):hover .pc-AvatarItem:first-child,.hzFJAq .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):focus-within .pc-AvatarItem:first-child{margin-left:0;}/*!sc*/ .hzFJAq .pc-AvatarStack--disableExpand{position:relative;}/*!sc*/ data-styled.g80[id="AvatarStack__AvatarStackWrapper-sc-4pdg6v-0"]{content:"hzFJAq,"}/*!sc*/ .bpSOTI{display:inline-block;white-space:nowrap;list-style:none;}/*!sc*/ .bpSOTI::after{font-size:14px;content:'';display:inline-block;height:0.8em;margin:0 0.5em;border-right:0.1em solid;border-color:var(--fgColor-muted,var(--color-fg-muted,#656d76));-webkit-transform:rotate(15deg) translateY(0.0625em);-ms-transform:rotate(15deg) translateY(0.0625em);transform:rotate(15deg) translateY(0.0625em);}/*!sc*/ .bpSOTI:first-child{margin-left:0;}/*!sc*/ .bpSOTI:last-child::after{content:none;}/*!sc*/ data-styled.g91[id="Breadcrumbs__Wrapper-sc-9m4wsf-0"]{content:"bpSOTI,"}/*!sc*/ .cJTTqz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;}/*!sc*/ data-styled.g92[id="Breadcrumbs__BreadcrumbsBase-sc-9m4wsf-1"]{content:"cJTTqz,"}/*!sc*/ .jQdCAs{color:var(--fgColor-accent,var(--color-accent-fg,#0969da));display:inline-block;font-size:14px;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .jQdCAs:hover,.jQdCAs:focus{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .jQdCAs.selected{color:var(--fgColor-default,var(--color-fg-default,#1F2328));pointer-events:none;}/*!sc*/ .jQdCAs.selected:focus{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .jgTqqg{color:var(--fgColor-accent,var(--color-accent-fg,#0969da));display:inline-block;font-size:14px;-webkit-text-decoration:none;text-decoration:none;white-space:normal;}/*!sc*/ .jgTqqg:hover,.jgTqqg:focus{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .jgTqqg.selected{color:var(--fgColor-default,var(--color-fg-default,#1F2328));pointer-events:none;}/*!sc*/ .jgTqqg.selected:focus{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .cJFALR{color:var(--fgColor-accent,var(--color-accent-fg,#0969da));display:inline-block;font-size:14px;-webkit-text-decoration:none;text-decoration:none;white-space:normal;font-weight:600;}/*!sc*/ .cJFALR:hover,.cJFALR:focus{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .cJFALR.selected{color:var(--fgColor-default,var(--color-fg-default,#1F2328));pointer-events:none;}/*!sc*/ .cJFALR.selected:focus{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ data-styled.g93[id="Breadcrumbs__StyledBreadcrumbsItem-sc-9m4wsf-2"]{content:"jQdCAs,jgTqqg,cJFALR,"}/*!sc*/ .ksYiNV{display:inline-block;padding:2px 6px;font-size:var(--text-body-size-small,12px);font-family:var(--fontStack-monospace,var(--fontStack-monospace,SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace));color:var(--fgColor-link,var(--fgColor-accent,var(--color-accent-fg,#0969da)));background-color:var(--bgColor-accent-muted,var(--bgColor-accent-muted,var(--color-accent-subtle,#ddf4ff)));border-radius:var(--borderRadius-medium,6px);-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .ksYiNV:is(:not(a)){color:var(--fgColor-muted);}/*!sc*/ data-styled.g113[id="BranchName__StyledBranchName-sc-sg8jsy-0"]{content:"ksYiNV,"}/*!sc*/ .eSFHqT{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}/*!sc*/ .eSFHqT .Timeline-Item:first-child{padding-top:0;}/*!sc*/ .eSFHqT .Timeline-Item:last-child{padding-bottom:0;}/*!sc*/ data-styled.g117[id="Timeline__ToggleTimeline-sc-1nkzbnu-0"]{content:"eSFHqT,"}/*!sc*/ .fhQhVG{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;padding:16px 0;margin-left:16px;padding-top:0;padding-bottom:4px;}/*!sc*/ .fhQhVG::before{position:absolute;top:0;bottom:0;left:0;display:block;width:2px;content:'';background-color:var(--borderColor-muted,var(--color-border-muted,hsla(210,18%,87%,1)));}/*!sc*/ .eHtUWW{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;padding:16px 0;margin-left:16px;padding-top:4px;padding-bottom:4px;}/*!sc*/ .eHtUWW::before{position:absolute;top:0;bottom:0;left:0;display:block;width:2px;content:'';background-color:var(--borderColor-muted,var(--color-border-muted,hsla(210,18%,87%,1)));}/*!sc*/ data-styled.g118[id="Timeline__ToggleTimelineItem-sc-1nkzbnu-1"]{content:"fhQhVG,eHtUWW,"}/*!sc*/ .jdZjlQ{min-width:0;max-width:100%;margin-top:4px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));-webkit-flex:auto;-ms-flex:auto;flex:auto;font-size:14px;}/*!sc*/ data-styled.g119[id="Timeline__ToggleTimelineBody-sc-1nkzbnu-2"]{content:"jdZjlQ,"}/*!sc*/ @-webkit-keyframes crVFvv{0%{-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);}50%{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);}100%{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);}}/*!sc*/ @keyframes crVFvv{0%{-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);}50%{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);}100%{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);}}/*!sc*/ data-styled.g133[id="sc-keyframes-crVFvv"]{content:"crVFvv,"}/*!sc*/ </style> <!-- --> <div style="--sticky-pane-height:100vh;--spacing:var(--spacing-normal)" class="Box-sc-g0xbh4-0 kkWQEA"><div class="Box-sc-g0xbh4-0 bSJDXx"><header class="Box-sc-g0xbh4-0 jPRcNF"><div class="Box-sc-g0xbh4-0 hOfjFo"><div class="d-flex flex-items-center flex-justify-between"><h1 class="f2 text-normal pb-2 prc-Heading-Heading-6CmGO" id="commits-pagehead">Commits</h1></div></div><div class="Box-sc-g0xbh4-0 gKBBxN"></div></header><div class="Box-sc-g0xbh4-0 kowOcT"><div class="Box-sc-g0xbh4-0 dQkwwl"><div class="Box-sc-g0xbh4-0"></div><div class="Box-sc-g0xbh4-0 FxAyp"><div><div class="Box-sc-g0xbh4-0 gwHaUx"><div class="d-flex flex-items-center"><div class="d-flex flex-items-baseline flex-column flex-sm-row"><h2 class="sr-only prc-Heading-Heading-6CmGO">Breadcrumbs</h2><span class="fgColor-default no-wrap">History for</span><nav class="Breadcrumbs__BreadcrumbsBase-sc-9m4wsf-1 cJTTqz ml-1" aria-label="Breadcrumbs"><ol class="Box-sc-g0xbh4-0 eItYAW"><li class="Breadcrumbs__Wrapper-sc-9m4wsf-0 bpSOTI"><a class="Breadcrumbs__StyledBreadcrumbsItem-sc-9m4wsf-2 jQdCAs" href="/bitcoin/bitcoin/commits">bitcoin</a></li><li class="Breadcrumbs__Wrapper-sc-9m4wsf-0 bpSOTI"><a class="Breadcrumbs__StyledBreadcrumbsItem-sc-9m4wsf-2 jgTqqg" href="/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src">src</a></li><li class="Breadcrumbs__Wrapper-sc-9m4wsf-0 bpSOTI"><a class="Breadcrumbs__StyledBreadcrumbsItem-sc-9m4wsf-2 cJFALR selected" aria-current="page" href="/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp">validation.cpp</a></li></ol></nav><div class="no-wrap"><span class="mr-2 ml-0 ml-sm-2 fgColor-default">on</span><a href="/bitcoin/bitcoin/tree/332c6134bb15384e5b91c631e821fe52a591d3bc" class="BranchName__StyledBranchName-sc-sg8jsy-0 ksYiNV">332c613</a></div></div></div><div class="d-flex flex-column flex-sm-row gap-2"><h2 class="sr-only prc-Heading-Heading-6CmGO">User selector</h2><div><button type="button" data-testid="user-selector-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="default" aria-describedby=":R1crab:-loading-announcement" id=":R1crab:"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x"><div class="Box-sc-g0xbh4-0 cSURfY"><div class="Box-sc-g0xbh4-0 hjDqIa"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 knLhXt" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z"></path></svg></div><div class="Box-sc-g0xbh4-0 dGVxWp"><span>All users</span></div></div></span></span><span data-component="trailingAction" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></button></div><!--$--><h2 class="sr-only prc-Heading-Heading-6CmGO">Datepicker</h2><button type="button" aria-haspopup="true" tabindex="0" data-testid="date-picker-commits" class="prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="default" aria-describedby=":Rlsrab:-loading-announcement"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 WGJwj fgColor-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4.75 0a.75.75 0 0 1 .75.75V2h5V.75a.75.75 0 0 1 1.5 0V2h1.25c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25V3.75C1 2.784 1.784 2 2.75 2H4V.75A.75.75 0 0 1 4.75 0ZM2.5 7.5v6.75c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25V7.5Zm10.75-4H2.75a.25.25 0 0 0-.25.25V6h11V3.75a.25.25 0 0 0-.25-.25Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x">All time</span><span data-component="trailingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><!--/$--></div></div><div class="mb-3" data-hpc="true"><h2 class="sr-only prc-Heading-Heading-6CmGO">Commit History</h2><div class="Timeline__ToggleTimeline-sc-1nkzbnu-0 eSFHqT"><div style="display:contents"><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 fhQhVG Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":Rt5rab:" data-testid="commit-group-title">Commits on Jun 19, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Ragt5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":Rt5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Ragt5rab:-list-view-node-:Rfqgt5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/f724f31401b963c75bd64f5e2c5b9d9561a9a9dd"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Make AbortNode() aware of MSG_NOPREFIX flag" class="color-fg-default" href="/bitcoin/bitcoin/commit/f724f31401b963c75bd64f5e2c5b9d9561a9a9dd">Make AbortNode() aware of MSG_NOPREFIX flag</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/hebasto" data-testid="avatar-icon-link" data-hovercard-url="/users/hebasto/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="hebasto" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/32963518?v=4&size=32" data-testid="github-avatar" aria-label="hebasto"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=hebasto" aria-label="commits by hebasto" data-hovercard-url="/users/hebasto/hovercard">hebasto</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rbnfqgt5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/f724f31401b963c75bd64f5e2c5b9d9561a9a9dd" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">f724f31</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R7jnfqgt5rab:-loading-announcement" aria-labelledby=":Rjnfqgt5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for f724f31" aria-hidden="true" id=":Rjnfqgt5rab:">Copy full SHA for f724f31</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-f724f31" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-f724f31" href="/bitcoin/bitcoin/blob/f724f31401b963c75bd64f5e2c5b9d9561a9a9dd/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-f724f31" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-f724f31" href="/bitcoin/bitcoin/tree/f724f31401b963c75bd64f5e2c5b9d9561a9a9dd" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R1d5rab:" data-testid="commit-group-title">Commits on Jun 18, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Rahd5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R1d5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Rahd5rab:-list-view-node-:Rfqhd5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/0b68fca700713e8e4c843c982b6047dc04410bc0"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Merge #16092: Don't use global (external) symbols for symbols that are used in only one translation unit 0959d37e3e Don't use global (external) symbols for symbols that are used in only one translation unit (practicalswift) Pull request description: Don't use global (external) symbols for symbols that are used in only one translation unit. Before: ``` $ for SYMBOL in $(nm src/bitcoind | grep -E ' [BD] ' | c++filt | cut -f3- -d' ' | grep -v @ | grep -v : | sort | grep '[a-z]' | sort -u | grep -vE '(^_|typeinfo|vtable)'); do REFERENCES=$(git grep -lE "([^a-zA-Z]|^)${SYMBOL}([^a-zA-Z]|\$)" -- "*.cpp" "*.h") N_REFERENCES=$(wc -l <<< "${REFERENCES}") if [[ ${N_REFERENCES} > 1 ]]; then continue fi echo "Global symbol ${SYMBOL} is used in only one translation unit: ${REFERENCES}" done Global symbol g_chainstate is used in only one translation unit: src/validation.cpp Global symbol g_ui_signals is used in only one translation unit: src/ui_interface.cpp Global symbol instance_of_cmaincleanup is used in only one translation unit: src/validation.cpp Global symbol instance_of_cnetcleanup is used in only one translation unit: src/net.cpp Global symbol instance_of_cnetprocessingcleanup is used in only one translation unit: src/net_processing.cpp Global symbol pindexBestForkBase is used in only one translation unit: src/validation.cpp Global symbol pindexBestForkTip is used in only one translation unit: src/validation.cpp $ ``` After: ``` $ for SYMBOL in $(nm src/bitcoind | grep -E ' [BD] ' | c++filt | cut -f3- -d' ' | grep -v @ | grep -v : | sort | grep '[a-z]' | sort -u | grep -vE '(^_|typeinfo|vtable)'); do REFERENCES=$(git grep -lE "([^a-zA-Z]|^)${SYMBOL}([^a-zA-Z]|\$)" -- "*.cpp" "*.h") N_REFERENCES=$(wc -l <<< "${REFERENCES}") if [[ ${N_REFERENCES} > 1 ]]; then continue fi echo "Global symbol ${SYMBOL} is used in only one translation unit: ${REFERENCES}" done $ ``` ♻️ Think about future generations: save the global namespace from unnecessary pollution! ♻️ ACKs for commit 0959d3: Empact: ACK https://github.com/bitcoin/bitcoin/pull/16092/commits/0959d37e3e0f80010a78d175e3846dabf5d35919 MarcoFalke: ACK 0959d37e3e0f80010a78d175e3846dabf5d35919 hebasto: ACK 0959d37e3e0f80010a78d175e3846dabf5d35919 promag: ACK 0959d37. Tree-SHA512: 722f66bb50450f19b57e8a8fbe949f30cd651eb8564e5787cbb772a539bf3a288c048dc49e655fd73ece6a46f6dafade515ec4004729bf2b3ab83117b7c5d153" class="color-fg-default" href="/bitcoin/bitcoin/commit/0b68fca700713e8e4c843c982b6047dc04410bc0">Merge</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="448546178" data-permission-text="Title is private" data-url="https://github.com/bitcoin/bitcoin/issues/16092" data-hovercard-type="pull_request" data-hovercard-url="/bitcoin/bitcoin/pull/16092/hovercard" href="https://github.com/bitcoin/bitcoin/pull/16092">#16092</a><a data-pjax="true" title="Merge #16092: Don't use global (external) symbols for symbols that are used in only one translation unit 0959d37e3e Don't use global (external) symbols for symbols that are used in only one translation unit (practicalswift) Pull request description: Don't use global (external) symbols for symbols that are used in only one translation unit. Before: ``` $ for SYMBOL in $(nm src/bitcoind | grep -E ' [BD] ' | c++filt | cut -f3- -d' ' | grep -v @ | grep -v : | sort | grep '[a-z]' | sort -u | grep -vE '(^_|typeinfo|vtable)'); do REFERENCES=$(git grep -lE "([^a-zA-Z]|^)${SYMBOL}([^a-zA-Z]|\$)" -- "*.cpp" "*.h") N_REFERENCES=$(wc -l <<< "${REFERENCES}") if [[ ${N_REFERENCES} > 1 ]]; then continue fi echo "Global symbol ${SYMBOL} is used in only one translation unit: ${REFERENCES}" done Global symbol g_chainstate is used in only one translation unit: src/validation.cpp Global symbol g_ui_signals is used in only one translation unit: src/ui_interface.cpp Global symbol instance_of_cmaincleanup is used in only one translation unit: src/validation.cpp Global symbol instance_of_cnetcleanup is used in only one translation unit: src/net.cpp Global symbol instance_of_cnetprocessingcleanup is used in only one translation unit: src/net_processing.cpp Global symbol pindexBestForkBase is used in only one translation unit: src/validation.cpp Global symbol pindexBestForkTip is used in only one translation unit: src/validation.cpp $ ``` After: ``` $ for SYMBOL in $(nm src/bitcoind | grep -E ' [BD] ' | c++filt | cut -f3- -d' ' | grep -v @ | grep -v : | sort | grep '[a-z]' | sort -u | grep -vE '(^_|typeinfo|vtable)'); do REFERENCES=$(git grep -lE "([^a-zA-Z]|^)${SYMBOL}([^a-zA-Z]|\$)" -- "*.cpp" "*.h") N_REFERENCES=$(wc -l <<< "${REFERENCES}") if [[ ${N_REFERENCES} > 1 ]]; then continue fi echo "Global symbol ${SYMBOL} is used in only one translation unit: ${REFERENCES}" done $ ``` ♻️ Think about future generations: save the global namespace from unnecessary pollution! ♻️ ACKs for commit 0959d3: Empact: ACK https://github.com/bitcoin/bitcoin/pull/16092/commits/0959d37e3e0f80010a78d175e3846dabf5d35919 MarcoFalke: ACK 0959d37e3e0f80010a78d175e3846dabf5d35919 hebasto: ACK 0959d37e3e0f80010a78d175e3846dabf5d35919 promag: ACK 0959d37. Tree-SHA512: 722f66bb50450f19b57e8a8fbe949f30cd651eb8564e5787cbb772a539bf3a288c048dc49e655fd73ece6a46f6dafade515ec4004729bf2b3ab83117b7c5d153" class="color-fg-default" href="/bitcoin/bitcoin/commit/0b68fca700713e8e4c843c982b6047dc04410bc0">: Don't use global (external) symbols for symbols that are used in only one translation unit</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R1ojfqhd5rab:-loading-announcement show-description-0b68fca" aria-labelledby="show-description-0b68fca"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 0b68fca" role="tooltip" aria-hidden="true" id="show-description-0b68fca">Show description for 0b68fca</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="author" width="16" height="16" style="--avatarSize-regular:16px" src="https://github.githubassets.com/images/gravatars/gravatar-user-420.png?size=32" data-testid="github-avatar" aria-label="author"/><div title="MarcoFalke" class="Truncate__StyledTruncate-sc-23o1d2-0 cPKWJh"><span class="Text__StyledText-sc-17v1xeu-0 fgBxNv">MarcoFalke</span></div></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rbnfqhd5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/0b68fca700713e8e4c843c982b6047dc04410bc0" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">0b68fca</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R7jnfqhd5rab:-loading-announcement" aria-labelledby=":Rjnfqhd5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 0b68fca" aria-hidden="true" id=":Rjnfqhd5rab:">Copy full SHA for 0b68fca</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-0b68fca" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-0b68fca" href="/bitcoin/bitcoin/blob/0b68fca700713e8e4c843c982b6047dc04410bc0/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-0b68fca" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-0b68fca" href="/bitcoin/bitcoin/tree/0b68fca700713e8e4c843c982b6047dc04410bc0" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R1t5rab:" data-testid="commit-group-title">Commits on Jun 8, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Raht5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R1t5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Raht5rab:-list-view-node-:Rfqht5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/8053e5cdade87550f0381d51feab81dedfec6c46"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Remove -mempoolreplacement to prevent needless block prop slowness. At this point there is no reasonable excuse to disable opt-in RBF, and, unlike when this option was added, there are now significant issues created when disabling it (in the form of compact block reconstruction failures). Further, it breaks a lot of modern wallet behavior." class="color-fg-default" href="/bitcoin/bitcoin/commit/8053e5cdade87550f0381d51feab81dedfec6c46">Remove -mempoolreplacement to prevent needless block prop slowness.</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R1ojfqht5rab:-loading-announcement show-description-8053e5c" aria-labelledby="show-description-8053e5c"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 8053e5c" role="tooltip" aria-hidden="true" id="show-description-8053e5c">Show description for 8053e5c</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/TheBlueMatt" data-testid="avatar-icon-link" data-hovercard-url="/users/TheBlueMatt/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="TheBlueMatt" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/649246?v=4&size=32" data-testid="github-avatar" aria-label="TheBlueMatt"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=TheBlueMatt" aria-label="commits by TheBlueMatt" data-hovercard-url="/users/TheBlueMatt/hovercard">TheBlueMatt</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rbnfqht5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/8053e5cdade87550f0381d51feab81dedfec6c46" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">8053e5c</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R7jnfqht5rab:-loading-announcement" aria-labelledby=":Rjnfqht5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 8053e5c" aria-hidden="true" id=":Rjnfqht5rab:">Copy full SHA for 8053e5c</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-8053e5c" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-8053e5c" href="/bitcoin/bitcoin/blob/8053e5cdade87550f0381d51feab81dedfec6c46/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-8053e5c" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-8053e5c" href="/bitcoin/bitcoin/tree/8053e5cdade87550f0381d51feab81dedfec6c46" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R2d5rab:" data-testid="commit-group-title">Commits on Jun 6, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Raid5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R2d5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Raid5rab:-list-view-node-:Rnqid5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/d0f81a96d9c158a9226dc946bdd61d48c4d42959"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Merge #16129: refactor: Remove unused includes 67f4e9c522 Include core_io.h from core_read.cpp (practicalswift) eca9767673 Make reasoning about dependencies easier by not including unused dependencies (practicalswift) Pull request description: Make reasoning about dependencies easier by not including unused dependencies. Please note that the removed headers are _not_ "transitively included" by other still included headers. Thus the removals are real. As an added bonus this change means less work for the preprocessor/compiler. At least 51 393 lines of code no longer needs to be processed: ``` $ git diff -u HEAD~1 | grep -E '^\-#include ' | cut -f2 -d"<" | cut -f1 -d">" | \ sed 's%^%src/%g' | xargs cat | wc -l 51393 ``` Note that 51 393 is the lower bound: the real number is likely much higher when taking into account transitively included headers :-) ACKs for commit 67f4e9: Tree-SHA512: 0c8868aac59813f099ce53d5307eed7962dd6f2ff3546768ef9e5c4508b87f8210f1a22c7e826c3c06bebbf28bdbfcf1628ed354c2d0fdb9a31a42cefb8fdf13" class="color-fg-default" href="/bitcoin/bitcoin/commit/d0f81a96d9c158a9226dc946bdd61d48c4d42959">Merge</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="450844186" data-permission-text="Title is private" data-url="https://github.com/bitcoin/bitcoin/issues/16129" data-hovercard-type="pull_request" data-hovercard-url="/bitcoin/bitcoin/pull/16129/hovercard" href="https://github.com/bitcoin/bitcoin/pull/16129">#16129</a><a data-pjax="true" title="Merge #16129: refactor: Remove unused includes 67f4e9c522 Include core_io.h from core_read.cpp (practicalswift) eca9767673 Make reasoning about dependencies easier by not including unused dependencies (practicalswift) Pull request description: Make reasoning about dependencies easier by not including unused dependencies. Please note that the removed headers are _not_ "transitively included" by other still included headers. Thus the removals are real. As an added bonus this change means less work for the preprocessor/compiler. At least 51 393 lines of code no longer needs to be processed: ``` $ git diff -u HEAD~1 | grep -E '^\-#include ' | cut -f2 -d"<" | cut -f1 -d">" | \ sed 's%^%src/%g' | xargs cat | wc -l 51393 ``` Note that 51 393 is the lower bound: the real number is likely much higher when taking into account transitively included headers :-) ACKs for commit 67f4e9: Tree-SHA512: 0c8868aac59813f099ce53d5307eed7962dd6f2ff3546768ef9e5c4508b87f8210f1a22c7e826c3c06bebbf28bdbfcf1628ed354c2d0fdb9a31a42cefb8fdf13" class="color-fg-default" href="/bitcoin/bitcoin/commit/d0f81a96d9c158a9226dc946bdd61d48c4d42959">: refactor: Remove unused includes</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R3h6nqid5rab:-loading-announcement show-description-d0f81a9" aria-labelledby="show-description-d0f81a9"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for d0f81a9" role="tooltip" aria-hidden="true" id="show-description-d0f81a9">Show description for d0f81a9</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="author" width="16" height="16" style="--avatarSize-regular:16px" src="https://github.githubassets.com/images/gravatars/gravatar-user-420.png?size=32" data-testid="github-avatar" aria-label="author"/><div title="MarcoFalke" class="Truncate__StyledTruncate-sc-23o1d2-0 cPKWJh"><span class="Text__StyledText-sc-17v1xeu-0 fgBxNv">MarcoFalke</span></div></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rnenqid5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/d0f81a96d9c158a9226dc946bdd61d48c4d42959" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">d0f81a9</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Rf7enqid5rab:-loading-announcement" aria-labelledby=":R17enqid5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for d0f81a9" aria-hidden="true" id=":R17enqid5rab:">Copy full SHA for d0f81a9</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-d0f81a9" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-d0f81a9" href="/bitcoin/bitcoin/blob/d0f81a96d9c158a9226dc946bdd61d48c4d42959/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-d0f81a9" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-d0f81a9" href="/bitcoin/bitcoin/tree/d0f81a96d9c158a9226dc946bdd61d48c4d42959" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Raid5rab:-list-view-node-:Rrqid5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Don't use global (external) symbols for symbols that are used in only one translation unit" class="color-fg-default" href="/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919">Don't use global (external) symbols for symbols that are used in only one translation unit</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/practicalswift" data-testid="avatar-icon-link" data-hovercard-url="/users/practicalswift/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="practicalswift" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/7826565?v=4&size=32" data-testid="github-avatar" aria-label="practicalswift"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=practicalswift" aria-label="commits by practicalswift" data-hovercard-url="/users/practicalswift/hovercard">practicalswift</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rnerqid5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/0959d37e3e0f80010a78d175e3846dabf5d35919" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">0959d37</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Rf7erqid5rab:-loading-announcement" aria-labelledby=":R17erqid5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 0959d37" aria-hidden="true" id=":R17erqid5rab:">Copy full SHA for 0959d37</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-0959d37" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-0959d37" href="/bitcoin/bitcoin/blob/0959d37e3e0f80010a78d175e3846dabf5d35919/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-0959d37" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-0959d37" href="/bitcoin/bitcoin/tree/0959d37e3e0f80010a78d175e3846dabf5d35919" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R2t5rab:" data-testid="commit-group-title">Commits on Jun 5, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Rait5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R2t5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Rait5rab:-list-view-node-:Rfqit5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/5d37c1bde01a7c43ed7ac1ab50cc41ff7d849ca9"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Merge #15976: refactor: move methods under CChainState (pt. 1) 403e677c9 refactoring: IsInitialBlockDownload -> CChainState (James O'Beirne) 3ccbc376d refactoring: FlushStateToDisk -> CChainState (James O'Beirne) 4d6688603 refactoring: introduce ChainstateActive() (James O'Beirne) d7c97edee move-only: make the CChainState interface public (James O'Beirne) Pull request description: This is part of the [assumeutxo project](https://github.com/bitcoin/bitcoin/projects/11): Parent PR: #15606 Issue: #15605 Specification: https://github.com/jamesob/assumeutxo-docs/tree/2019-04-proposal/proposal --- This changeset starts moving functionality intimately related to CChainState into methods. Parameterizing these functions by a particular CChainState is necessary for the use of multiple chainstates simultaneously (e.g. for asynchronous background validation). In this change, we - make the CChainState interface public - since other units will start to invoke its methods directly, - introduce `::ChainstateActive()`, the CChainState equivalent for `::ChainActive()`, - and move `IsInitialBlockDownload()` and `FlushStateToDisk()` into methods on CChainState. Independent of assumeutxo, these changes better encapsulate chainstate behavior and allow easier use from a testing context. There are more methods that we'll move in the future, but they require other substantial changes (i.e. moving ownership of the `CCoinsView*` hierarchy into CChainState) so we'll save them for future PRs. --- The first move-only commit is most easily reviewed with `git diff ... --color-moved=dimmed_zebra`. ACKs for commit 403e67: Empact: utACK https://github.com/bitcoin/bitcoin/pull/15976/commits/403e677c9ebbf9744733010e6b0c2d1b182ee850 no need to address my nits herein Sjors: utACK 403e677 ryanofsky: utACK 403e677c9ebbf9744733010e6b0c2d1b182ee850. Only change since previous review is removing global state comment as suggested. MarcoFalke: utACK 403e677c9e, though the diff still seems a bit bloated with some unnecessary changes in the second commit. promag: utACK 403e677 and rebased with current [master](c7cfd20a7). Tree-SHA512: 6fcf260bb2dc201361170c0b4547405366f5f331fcc3a2bac29b24442814b7b244ca1b58aac5af716885f9a130c343b544590dff780da0bf835c7c5b3ccb2257" class="color-fg-default" href="/bitcoin/bitcoin/commit/5d37c1bde01a7c43ed7ac1ab50cc41ff7d849ca9">Merge</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="441393785" data-permission-text="Title is private" data-url="https://github.com/bitcoin/bitcoin/issues/15976" data-hovercard-type="pull_request" data-hovercard-url="/bitcoin/bitcoin/pull/15976/hovercard" href="https://github.com/bitcoin/bitcoin/pull/15976">#15976</a><a data-pjax="true" title="Merge #15976: refactor: move methods under CChainState (pt. 1) 403e677c9 refactoring: IsInitialBlockDownload -> CChainState (James O'Beirne) 3ccbc376d refactoring: FlushStateToDisk -> CChainState (James O'Beirne) 4d6688603 refactoring: introduce ChainstateActive() (James O'Beirne) d7c97edee move-only: make the CChainState interface public (James O'Beirne) Pull request description: This is part of the [assumeutxo project](https://github.com/bitcoin/bitcoin/projects/11): Parent PR: #15606 Issue: #15605 Specification: https://github.com/jamesob/assumeutxo-docs/tree/2019-04-proposal/proposal --- This changeset starts moving functionality intimately related to CChainState into methods. Parameterizing these functions by a particular CChainState is necessary for the use of multiple chainstates simultaneously (e.g. for asynchronous background validation). In this change, we - make the CChainState interface public - since other units will start to invoke its methods directly, - introduce `::ChainstateActive()`, the CChainState equivalent for `::ChainActive()`, - and move `IsInitialBlockDownload()` and `FlushStateToDisk()` into methods on CChainState. Independent of assumeutxo, these changes better encapsulate chainstate behavior and allow easier use from a testing context. There are more methods that we'll move in the future, but they require other substantial changes (i.e. moving ownership of the `CCoinsView*` hierarchy into CChainState) so we'll save them for future PRs. --- The first move-only commit is most easily reviewed with `git diff ... --color-moved=dimmed_zebra`. ACKs for commit 403e67: Empact: utACK https://github.com/bitcoin/bitcoin/pull/15976/commits/403e677c9ebbf9744733010e6b0c2d1b182ee850 no need to address my nits herein Sjors: utACK 403e677 ryanofsky: utACK 403e677c9ebbf9744733010e6b0c2d1b182ee850. Only change since previous review is removing global state comment as suggested. MarcoFalke: utACK 403e677c9e, though the diff still seems a bit bloated with some unnecessary changes in the second commit. promag: utACK 403e677 and rebased with current [master](c7cfd20a7). Tree-SHA512: 6fcf260bb2dc201361170c0b4547405366f5f331fcc3a2bac29b24442814b7b244ca1b58aac5af716885f9a130c343b544590dff780da0bf835c7c5b3ccb2257" class="color-fg-default" href="/bitcoin/bitcoin/commit/5d37c1bde01a7c43ed7ac1ab50cc41ff7d849ca9">: refactor: move methods under CChainState (pt. 1)</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R1ojfqit5rab:-loading-announcement show-description-5d37c1b" aria-labelledby="show-description-5d37c1b"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 5d37c1b" role="tooltip" aria-hidden="true" id="show-description-5d37c1b">Show description for 5d37c1b</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/laanwj" data-testid="avatar-icon-link" data-hovercard-url="/users/laanwj/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="laanwj" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/126646?v=4&size=32" data-testid="github-avatar" aria-label="laanwj"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=laanwj" aria-label="commits by laanwj" data-hovercard-url="/users/laanwj/hovercard">laanwj</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rbnfqit5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/5d37c1bde01a7c43ed7ac1ab50cc41ff7d849ca9" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">5d37c1b</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R7jnfqit5rab:-loading-announcement" aria-labelledby=":Rjnfqit5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 5d37c1b" aria-hidden="true" id=":Rjnfqit5rab:">Copy full SHA for 5d37c1b</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-5d37c1b" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-5d37c1b" href="/bitcoin/bitcoin/blob/5d37c1bde01a7c43ed7ac1ab50cc41ff7d849ca9/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-5d37c1b" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-5d37c1b" href="/bitcoin/bitcoin/tree/5d37c1bde01a7c43ed7ac1ab50cc41ff7d849ca9" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R3d5rab:" data-testid="commit-group-title">Commits on Jun 2, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Rajd5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R3d5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Rajd5rab:-list-view-node-:Rfqjd5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/eca97676737174ac6ff775c60e3798c69fb67f4a"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Make reasoning about dependencies easier by not including unused dependencies" class="color-fg-default" href="/bitcoin/bitcoin/commit/eca97676737174ac6ff775c60e3798c69fb67f4a">Make reasoning about dependencies easier by not including unused dependencies</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/practicalswift" data-testid="avatar-icon-link" data-hovercard-url="/users/practicalswift/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="practicalswift" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/7826565?v=4&size=32" data-testid="github-avatar" aria-label="practicalswift"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=practicalswift" aria-label="commits by practicalswift" data-hovercard-url="/users/practicalswift/hovercard">practicalswift</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rbnfqjd5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/eca97676737174ac6ff775c60e3798c69fb67f4a" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">eca9767</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R7jnfqjd5rab:-loading-announcement" aria-labelledby=":Rjnfqjd5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for eca9767" aria-hidden="true" id=":Rjnfqjd5rab:">Copy full SHA for eca9767</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-eca9767" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-eca9767" href="/bitcoin/bitcoin/blob/eca97676737174ac6ff775c60e3798c69fb67f4a/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-eca9767" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-eca9767" href="/bitcoin/bitcoin/tree/eca97676737174ac6ff775c60e3798c69fb67f4a" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R3t5rab:" data-testid="commit-group-title">Commits on May 22, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Rajt5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R3t5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Rajt5rab:-list-view-node-:Rfqjt5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/1c177c3a004f91eca743bb3a0dd9534a544026d5"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Merge #16015: validation: Hold cs_main when reading chainActive in RewindBlockIndex 1609809fb2 validation: Hold cs_main when reading chainActive in RewindBlockIndex (practicalswift) Pull request description: Fixes #15980. Hold `cs_main` when reading `chainActive` (via `::ChainActive()`) in `RewindBlockIndex`. ACKs for commit 160980: MarcoFalke: utACK 1609809fb2a4c2ec15b7c26dc328e2e666bd5d57 Tree-SHA512: 54f180ab391f92f04950735c2bb337f0b7495826d2096f7a0f9a2da50bc29d08747f404a0495e33ca4edd4c842efbab4c4730d5e1a8b9da3e1249cf884268f4b" class="color-fg-default" href="/bitcoin/bitcoin/commit/1c177c3a004f91eca743bb3a0dd9534a544026d5">Merge</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="443140702" data-permission-text="Title is private" data-url="https://github.com/bitcoin/bitcoin/issues/16015" data-hovercard-type="pull_request" data-hovercard-url="/bitcoin/bitcoin/pull/16015/hovercard" href="https://github.com/bitcoin/bitcoin/pull/16015">#16015</a><a data-pjax="true" title="Merge #16015: validation: Hold cs_main when reading chainActive in RewindBlockIndex 1609809fb2 validation: Hold cs_main when reading chainActive in RewindBlockIndex (practicalswift) Pull request description: Fixes #15980. Hold `cs_main` when reading `chainActive` (via `::ChainActive()`) in `RewindBlockIndex`. ACKs for commit 160980: MarcoFalke: utACK 1609809fb2a4c2ec15b7c26dc328e2e666bd5d57 Tree-SHA512: 54f180ab391f92f04950735c2bb337f0b7495826d2096f7a0f9a2da50bc29d08747f404a0495e33ca4edd4c842efbab4c4730d5e1a8b9da3e1249cf884268f4b" class="color-fg-default" href="/bitcoin/bitcoin/commit/1c177c3a004f91eca743bb3a0dd9534a544026d5">: validation: Hold cs_main when reading chainActive in RewindBlockIndex</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R1ojfqjt5rab:-loading-announcement show-description-1c177c3" aria-labelledby="show-description-1c177c3"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 1c177c3" role="tooltip" aria-hidden="true" id="show-description-1c177c3">Show description for 1c177c3</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="author" width="16" height="16" style="--avatarSize-regular:16px" src="https://github.githubassets.com/images/gravatars/gravatar-user-420.png?size=32" data-testid="github-avatar" aria-label="author"/><div title="MarcoFalke" class="Truncate__StyledTruncate-sc-23o1d2-0 cPKWJh"><span class="Text__StyledText-sc-17v1xeu-0 fgBxNv">MarcoFalke</span></div></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rbnfqjt5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/1c177c3a004f91eca743bb3a0dd9534a544026d5" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">1c177c3</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R7jnfqjt5rab:-loading-announcement" aria-labelledby=":Rjnfqjt5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 1c177c3" aria-hidden="true" id=":Rjnfqjt5rab:">Copy full SHA for 1c177c3</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-1c177c3" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-1c177c3" href="/bitcoin/bitcoin/blob/1c177c3a004f91eca743bb3a0dd9534a544026d5/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-1c177c3" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-1c177c3" href="/bitcoin/bitcoin/tree/1c177c3a004f91eca743bb3a0dd9534a544026d5" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R4d5rab:" data-testid="commit-group-title">Commits on May 19, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Rakd5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R4d5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Rakd5rab:-list-view-node-:Rfqkd5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/7110d455eb51e78e09f43fabf0b1630ae997d898"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Merge #12980: Allow quicker shutdowns during LoadBlockIndex() af5fa82b6 Allow quicker shutdowns during LoadBlockIndex() (Jonas Schnelli) Pull request description: ACKs for commit af5fa8: promag: utACK af5fa82b676a36e60eda080ca0a946bdfffefd49. practicalswift: utACK af5fa82b676a36e60eda080ca0a946bdfffefd49 Tree-SHA512: 1c64dcc5d8a9d3411553257cd5a598dcd29be981660e5bca9283c1d957dc56798abcf41d9969cd573088137597a23e48e62a8c476c463d3f176b86a10048f47b" class="color-fg-default" href="/bitcoin/bitcoin/commit/7110d455eb51e78e09f43fabf0b1630ae997d898">Merge</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="314224366" data-permission-text="Title is private" data-url="https://github.com/bitcoin/bitcoin/issues/12980" data-hovercard-type="pull_request" data-hovercard-url="/bitcoin/bitcoin/pull/12980/hovercard" href="https://github.com/bitcoin/bitcoin/pull/12980">#12980</a><a data-pjax="true" title="Merge #12980: Allow quicker shutdowns during LoadBlockIndex() af5fa82b6 Allow quicker shutdowns during LoadBlockIndex() (Jonas Schnelli) Pull request description: ACKs for commit af5fa8: promag: utACK af5fa82b676a36e60eda080ca0a946bdfffefd49. practicalswift: utACK af5fa82b676a36e60eda080ca0a946bdfffefd49 Tree-SHA512: 1c64dcc5d8a9d3411553257cd5a598dcd29be981660e5bca9283c1d957dc56798abcf41d9969cd573088137597a23e48e62a8c476c463d3f176b86a10048f47b" class="color-fg-default" href="/bitcoin/bitcoin/commit/7110d455eb51e78e09f43fabf0b1630ae997d898">: Allow quicker shutdowns during LoadBlockIndex()</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R1ojfqkd5rab:-loading-announcement show-description-7110d45" aria-labelledby="show-description-7110d45"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 7110d45" role="tooltip" aria-hidden="true" id="show-description-7110d45">Show description for 7110d45</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/jonasschnelli" data-testid="avatar-icon-link" data-hovercard-url="/users/jonasschnelli/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="jonasschnelli" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/178464?v=4&size=32" data-testid="github-avatar" aria-label="jonasschnelli"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=jonasschnelli" aria-label="commits by jonasschnelli" data-hovercard-url="/users/jonasschnelli/hovercard">jonasschnelli</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rbnfqkd5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/7110d455eb51e78e09f43fabf0b1630ae997d898" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">7110d45</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R7jnfqkd5rab:-loading-announcement" aria-labelledby=":Rjnfqkd5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 7110d45" aria-hidden="true" id=":Rjnfqkd5rab:">Copy full SHA for 7110d45</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-7110d45" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-7110d45" href="/bitcoin/bitcoin/blob/7110d455eb51e78e09f43fabf0b1630ae997d898/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-7110d45" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-7110d45" href="/bitcoin/bitcoin/tree/7110d455eb51e78e09f43fabf0b1630ae997d898" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R4t5rab:" data-testid="commit-group-title">Commits on May 17, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Rakt5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R4t5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Rakt5rab:-list-view-node-:Rfqkt5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/a822a0e4f6317f98cde6f0d5abe952b4e8992ac9"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Merge #15999: init: Remove dead code in LoadChainTip fa86c8aec6 init: Remove dead code in LoadChainTip (MarcoFalke) Pull request description: `LoadChainTip` sets `::ChainActive()` based on `pcoinsTip`'s best block. `LoadChainTip` is never called when that block is null, so we can remove all code from within that method that is only executed when that block is null. Fixes #15967 Inconsistent locking behavior in LoadChainTip ACKs for commit fa86c8: promag: utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d. practicalswift: utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d Empact: utACK https://github.com/bitcoin/bitcoin/pull/15999/commits/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d laanwj: utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d ryanofsky: utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d. LoadChainTip isn't called currently when pcoinsTip best block is null due to this line: jamesob: utACK https://github.com/bitcoin/bitcoin/pull/15999/commits/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d Tree-SHA512: 8961c0e579800a52038ac5655478468852faac055299b64d6cfdf0c213d3bf09669c4889467d09d93457f6c8b073967bb0475a137f77ddd3a3a3c03ad90001c4" class="color-fg-default" href="/bitcoin/bitcoin/commit/a822a0e4f6317f98cde6f0d5abe952b4e8992ac9">Merge</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="442452714" data-permission-text="Title is private" data-url="https://github.com/bitcoin/bitcoin/issues/15999" data-hovercard-type="pull_request" data-hovercard-url="/bitcoin/bitcoin/pull/15999/hovercard" href="https://github.com/bitcoin/bitcoin/pull/15999">#15999</a><a data-pjax="true" title="Merge #15999: init: Remove dead code in LoadChainTip fa86c8aec6 init: Remove dead code in LoadChainTip (MarcoFalke) Pull request description: `LoadChainTip` sets `::ChainActive()` based on `pcoinsTip`'s best block. `LoadChainTip` is never called when that block is null, so we can remove all code from within that method that is only executed when that block is null. Fixes #15967 Inconsistent locking behavior in LoadChainTip ACKs for commit fa86c8: promag: utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d. practicalswift: utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d Empact: utACK https://github.com/bitcoin/bitcoin/pull/15999/commits/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d laanwj: utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d ryanofsky: utACK fa86c8aec611a9b9d2f53960c92419cf2a8bb92d. LoadChainTip isn't called currently when pcoinsTip best block is null due to this line: jamesob: utACK https://github.com/bitcoin/bitcoin/pull/15999/commits/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d Tree-SHA512: 8961c0e579800a52038ac5655478468852faac055299b64d6cfdf0c213d3bf09669c4889467d09d93457f6c8b073967bb0475a137f77ddd3a3a3c03ad90001c4" class="color-fg-default" href="/bitcoin/bitcoin/commit/a822a0e4f6317f98cde6f0d5abe952b4e8992ac9">: init: Remove dead code in LoadChainTip</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R1ojfqkt5rab:-loading-announcement show-description-a822a0e" aria-labelledby="show-description-a822a0e"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for a822a0e" role="tooltip" aria-hidden="true" id="show-description-a822a0e">Show description for a822a0e</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="author" width="16" height="16" style="--avatarSize-regular:16px" src="https://github.githubassets.com/images/gravatars/gravatar-user-420.png?size=32" data-testid="github-avatar" aria-label="author"/><div title="MarcoFalke" class="Truncate__StyledTruncate-sc-23o1d2-0 cPKWJh"><span class="Text__StyledText-sc-17v1xeu-0 fgBxNv">MarcoFalke</span></div></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rbnfqkt5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/a822a0e4f6317f98cde6f0d5abe952b4e8992ac9" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">a822a0e</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R7jnfqkt5rab:-loading-announcement" aria-labelledby=":Rjnfqkt5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for a822a0e" aria-hidden="true" id=":Rjnfqkt5rab:">Copy full SHA for a822a0e</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-a822a0e" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-a822a0e" href="/bitcoin/bitcoin/blob/a822a0e4f6317f98cde6f0d5abe952b4e8992ac9/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-a822a0e" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-a822a0e" href="/bitcoin/bitcoin/tree/a822a0e4f6317f98cde6f0d5abe952b4e8992ac9" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R5d5rab:" data-testid="commit-group-title">Commits on May 16, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Rald5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R5d5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Rald5rab:-list-view-node-:R17qld5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="refactoring: IsInitialBlockDownload -> CChainState We introduce CChainState.m_cached_finished_ibd because the static state it replaces would've been shared across all CChainState instances." class="color-fg-default" href="/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850">refactoring: IsInitialBlockDownload -> CChainState</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R72d7qld5rab:-loading-announcement show-description-403e677" aria-labelledby="show-description-403e677"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 403e677" role="tooltip" aria-hidden="true" id="show-description-403e677">Show description for 403e677</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/jamesob" data-testid="avatar-icon-link" data-hovercard-url="/users/jamesob/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="jamesob" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/73197?v=4&size=32" data-testid="github-avatar" aria-label="jamesob"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=jamesob" aria-label="commits by jamesob" data-hovercard-url="/users/jamesob/hovercard">jamesob</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R1et7qld5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/403e677c9ebbf9744733010e6b0c2d1b182ee850" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">403e677</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Ruet7qld5rab:-loading-announcement" aria-labelledby=":R2et7qld5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 403e677" aria-hidden="true" id=":R2et7qld5rab:">Copy full SHA for 403e677</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-403e677" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-403e677" href="/bitcoin/bitcoin/blob/403e677c9ebbf9744733010e6b0c2d1b182ee850/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-403e677" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-403e677" href="/bitcoin/bitcoin/tree/403e677c9ebbf9744733010e6b0c2d1b182ee850" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Rald5rab:-list-view-node-:R1bqld5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/3ccbc376dd313fb7666471f24f6d9370914d00f3"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="refactoring: FlushStateToDisk -> CChainState Also renames global methods for clarity: - ::FlushStateToDisk() -> CChainState::ForceFlushStateToDisk() - This performs an unconditional flush. - ::PruneAndFlush() -> CChainState::PruneAndFlush()" class="color-fg-default" href="/bitcoin/bitcoin/commit/3ccbc376dd313fb7666471f24f6d9370914d00f3">refactoring: FlushStateToDisk -> CChainState</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R72dbqld5rab:-loading-announcement show-description-3ccbc37" aria-labelledby="show-description-3ccbc37"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 3ccbc37" role="tooltip" aria-hidden="true" id="show-description-3ccbc37">Show description for 3ccbc37</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/jamesob" data-testid="avatar-icon-link" data-hovercard-url="/users/jamesob/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="jamesob" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/73197?v=4&size=32" data-testid="github-avatar" aria-label="jamesob"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=jamesob" aria-label="commits by jamesob" data-hovercard-url="/users/jamesob/hovercard">jamesob</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R1etbqld5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/3ccbc376dd313fb7666471f24f6d9370914d00f3" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">3ccbc37</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Ruetbqld5rab:-loading-announcement" aria-labelledby=":R2etbqld5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 3ccbc37" aria-hidden="true" id=":R2etbqld5rab:">Copy full SHA for 3ccbc37</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-3ccbc37" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-3ccbc37" href="/bitcoin/bitcoin/blob/3ccbc376dd313fb7666471f24f6d9370914d00f3/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-3ccbc37" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-3ccbc37" href="/bitcoin/bitcoin/tree/3ccbc376dd313fb7666471f24f6d9370914d00f3" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Rald5rab:-list-view-node-:R1fqld5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/4d6688603b8c8df854d52df464e157d0a6e7bde6"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="refactoring: introduce ChainstateActive() To be used once we move global functions (e.g. FlushStateToDisk()) into CChainState methods. Thanks to Marco Falke for suggestions" class="color-fg-default" href="/bitcoin/bitcoin/commit/4d6688603b8c8df854d52df464e157d0a6e7bde6">refactoring: introduce ChainstateActive()</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R72dfqld5rab:-loading-announcement show-description-4d66886" aria-labelledby="show-description-4d66886"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 4d66886" role="tooltip" aria-hidden="true" id="show-description-4d66886">Show description for 4d66886</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/jamesob" data-testid="avatar-icon-link" data-hovercard-url="/users/jamesob/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="jamesob" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/73197?v=4&size=32" data-testid="github-avatar" aria-label="jamesob"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=jamesob" aria-label="commits by jamesob" data-hovercard-url="/users/jamesob/hovercard">jamesob</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R1etfqld5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/4d6688603b8c8df854d52df464e157d0a6e7bde6" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">4d66886</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Ruetfqld5rab:-loading-announcement" aria-labelledby=":R2etfqld5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 4d66886" aria-hidden="true" id=":R2etfqld5rab:">Copy full SHA for 4d66886</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-4d66886" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-4d66886" href="/bitcoin/bitcoin/blob/4d6688603b8c8df854d52df464e157d0a6e7bde6/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-4d66886" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-4d66886" href="/bitcoin/bitcoin/tree/4d6688603b8c8df854d52df464e157d0a6e7bde6" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Rald5rab:-list-view-node-:R1jqld5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/d7c97edeea8cee10ad9da1f940d39d5073ac142d"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="move-only: make the CChainState interface public along with DisconnectResult, and CBlockIndexWorkComparator. The CChainState interface needs to be known to the rest of the system because many global functions will move to CChainState methods. This is to allow other parts of the system to be parameterized per chainstate instance instead of assuming a single global." class="color-fg-default" href="/bitcoin/bitcoin/commit/d7c97edeea8cee10ad9da1f940d39d5073ac142d">move-only: make the CChainState interface public</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R72djqld5rab:-loading-announcement show-description-d7c97ed" aria-labelledby="show-description-d7c97ed"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for d7c97ed" role="tooltip" aria-hidden="true" id="show-description-d7c97ed">Show description for d7c97ed</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/jamesob" data-testid="avatar-icon-link" data-hovercard-url="/users/jamesob/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="jamesob" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/73197?v=4&size=32" data-testid="github-avatar" aria-label="jamesob"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=jamesob" aria-label="commits by jamesob" data-hovercard-url="/users/jamesob/hovercard">jamesob</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R1etjqld5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/d7c97edeea8cee10ad9da1f940d39d5073ac142d" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">d7c97ed</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Ruetjqld5rab:-loading-announcement" aria-labelledby=":R2etjqld5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for d7c97ed" aria-hidden="true" id=":R2etjqld5rab:">Copy full SHA for d7c97ed</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-d7c97ed" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-d7c97ed" href="/bitcoin/bitcoin/blob/d7c97edeea8cee10ad9da1f940d39d5073ac142d/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-d7c97ed" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-d7c97ed" href="/bitcoin/bitcoin/tree/d7c97edeea8cee10ad9da1f940d39d5073ac142d" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R5t5rab:" data-testid="commit-group-title">Commits on May 15, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Ralt5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R5t5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Ralt5rab:-list-view-node-:Rfqlt5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/1609809fb2a4c2ec15b7c26dc328e2e666bd5d57"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="validation: Hold cs_main when reading chainActive in RewindBlockIndex" class="color-fg-default" href="/bitcoin/bitcoin/commit/1609809fb2a4c2ec15b7c26dc328e2e666bd5d57">validation: Hold cs_main when reading chainActive in RewindBlockIndex</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/practicalswift" data-testid="avatar-icon-link" data-hovercard-url="/users/practicalswift/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="practicalswift" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/7826565?v=4&size=32" data-testid="github-avatar" aria-label="practicalswift"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=practicalswift" aria-label="commits by practicalswift" data-hovercard-url="/users/practicalswift/hovercard">practicalswift</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rbnfqlt5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/1609809fb2a4c2ec15b7c26dc328e2e666bd5d57" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">1609809</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R7jnfqlt5rab:-loading-announcement" aria-labelledby=":Rjnfqlt5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 1609809" aria-hidden="true" id=":Rjnfqlt5rab:">Copy full SHA for 1609809</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-1609809" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-1609809" href="/bitcoin/bitcoin/blob/1609809fb2a4c2ec15b7c26dc328e2e666bd5d57/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-1609809" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-1609809" href="/bitcoin/bitcoin/tree/1609809fb2a4c2ec15b7c26dc328e2e666bd5d57" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R6d5rab:" data-testid="commit-group-title">Commits on May 13, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Ramd5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R6d5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Ramd5rab:-list-view-node-:Rnqmd5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/fa3c6511435149782545ac0d09d4722dc115d709"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="[refactor] interfaces: Add missing LockAnnotation for cs_main" class="color-fg-default" href="/bitcoin/bitcoin/commit/fa3c6511435149782545ac0d09d4722dc115d709">[refactor] interfaces: Add missing LockAnnotation for cs_main</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="author" width="16" height="16" style="--avatarSize-regular:16px" src="https://github.githubassets.com/images/gravatars/gravatar-user-420.png?size=32" data-testid="github-avatar" aria-label="author"/><div title="MarcoFalke" class="Truncate__StyledTruncate-sc-23o1d2-0 cPKWJh"><span class="Text__StyledText-sc-17v1xeu-0 fgBxNv">MarcoFalke</span></div></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rnenqmd5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/fa3c6511435149782545ac0d09d4722dc115d709" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">fa3c651</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Rf7enqmd5rab:-loading-announcement" aria-labelledby=":R17enqmd5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for fa3c651" aria-hidden="true" id=":R17enqmd5rab:">Copy full SHA for fa3c651</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-fa3c651" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-fa3c651" href="/bitcoin/bitcoin/blob/fa3c6511435149782545ac0d09d4722dc115d709/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-fa3c651" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-fa3c651" href="/bitcoin/bitcoin/tree/fa3c6511435149782545ac0d09d4722dc115d709" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Ramd5rab:-list-view-node-:Rrqmd5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="init: Remove dead code in LoadChainTip" class="color-fg-default" href="/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d">init: Remove dead code in LoadChainTip</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="author" width="16" height="16" style="--avatarSize-regular:16px" src="https://github.githubassets.com/images/gravatars/gravatar-user-420.png?size=32" data-testid="github-avatar" aria-label="author"/><div title="MarcoFalke" class="Truncate__StyledTruncate-sc-23o1d2-0 cPKWJh"><span class="Text__StyledText-sc-17v1xeu-0 fgBxNv">MarcoFalke</span></div></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rnerqmd5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">fa86c8a</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Rf7erqmd5rab:-loading-announcement" aria-labelledby=":R17erqmd5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for fa86c8a" aria-hidden="true" id=":R17erqmd5rab:">Copy full SHA for fa86c8a</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-fa86c8a" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-fa86c8a" href="/bitcoin/bitcoin/blob/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-fa86c8a" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-fa86c8a" href="/bitcoin/bitcoin/tree/fa86c8aec611a9b9d2f53960c92419cf2a8bb92d" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R6t5rab:" data-testid="commit-group-title">Commits on May 8, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Ramt5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R6t5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Ramt5rab:-list-view-node-:Rnqmt5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/49c1aa5f83d0751882413aafb42a77801daf1cd5"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Merge #15971: validation: Add compile-time checking for negative locking requirement in LimitValidationInterfaceQueue 62d50ef308 Add LOCKS_EXCLUDED(cs_main) to LimitValidationInterfaceQueue(...) which does AssertLockNotHeld(cs_main) (practicalswift) Pull request description: This PR adds compile-time checking for negative locking requirements that follow from the run-time locking requirement `AssertLockNotHeld(cs_main)` in `LimitValidationInterfaceQueue(...)`. Changes: * Add `LOCKS_EXCLUDED(cs_main)` to `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)` * Add `LOCKS_EXCLUDED(cs_main)` to `CChainState::ActivateBestChain(…)`, `CChainState:: InvalidateBlock(…)` and `CChainState::RewindBlockIndex(…)` which all call `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)` * Add `LOCKS_EXCLUDED(cs_main)` to `InvalidateBlock(…)` which calls `CChainState::InvalidateBlock(...)` which in turn calls `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)` * Add `LOCKS_EXCLUDED(cs_main)` to `RewindBlockIndex(…)` which calls `CChainState::RewindBlockIndex(...)` which in turn calls `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)` ACKs for commit 62d50e: MarcoFalke: utACK 62d50ef308 Tree-SHA512: 73d092ccd08c851ae3c5d60370c369fc030c5793f5507e2faccb6f91c851ddc0ce059fbea3899f2856330d7a8c78f2ac6a2988e8268b03154f946be9e60e3be1" class="color-fg-default" href="/bitcoin/bitcoin/commit/49c1aa5f83d0751882413aafb42a77801daf1cd5">Merge</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="441136262" data-permission-text="Title is private" data-url="https://github.com/bitcoin/bitcoin/issues/15971" data-hovercard-type="pull_request" data-hovercard-url="/bitcoin/bitcoin/pull/15971/hovercard" href="https://github.com/bitcoin/bitcoin/pull/15971">#15971</a><a data-pjax="true" title="Merge #15971: validation: Add compile-time checking for negative locking requirement in LimitValidationInterfaceQueue 62d50ef308 Add LOCKS_EXCLUDED(cs_main) to LimitValidationInterfaceQueue(...) which does AssertLockNotHeld(cs_main) (practicalswift) Pull request description: This PR adds compile-time checking for negative locking requirements that follow from the run-time locking requirement `AssertLockNotHeld(cs_main)` in `LimitValidationInterfaceQueue(...)`. Changes: * Add `LOCKS_EXCLUDED(cs_main)` to `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)` * Add `LOCKS_EXCLUDED(cs_main)` to `CChainState::ActivateBestChain(…)`, `CChainState:: InvalidateBlock(…)` and `CChainState::RewindBlockIndex(…)` which all call `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)` * Add `LOCKS_EXCLUDED(cs_main)` to `InvalidateBlock(…)` which calls `CChainState::InvalidateBlock(...)` which in turn calls `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)` * Add `LOCKS_EXCLUDED(cs_main)` to `RewindBlockIndex(…)` which calls `CChainState::RewindBlockIndex(...)` which in turn calls `LimitValidationInterfaceQueue(...)` which does `AssertLockNotHeld(cs_main)` ACKs for commit 62d50e: MarcoFalke: utACK 62d50ef308 Tree-SHA512: 73d092ccd08c851ae3c5d60370c369fc030c5793f5507e2faccb6f91c851ddc0ce059fbea3899f2856330d7a8c78f2ac6a2988e8268b03154f946be9e60e3be1" class="color-fg-default" href="/bitcoin/bitcoin/commit/49c1aa5f83d0751882413aafb42a77801daf1cd5">: validation: Add compile-time checking for negative locking requirement in LimitValidationInterfaceQueue</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R3h6nqmt5rab:-loading-announcement show-description-49c1aa5" aria-labelledby="show-description-49c1aa5"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 49c1aa5" role="tooltip" aria-hidden="true" id="show-description-49c1aa5">Show description for 49c1aa5</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="author" width="16" height="16" style="--avatarSize-regular:16px" src="https://github.githubassets.com/images/gravatars/gravatar-user-420.png?size=32" data-testid="github-avatar" aria-label="author"/><div title="MarcoFalke" class="Truncate__StyledTruncate-sc-23o1d2-0 cPKWJh"><span class="Text__StyledText-sc-17v1xeu-0 fgBxNv">MarcoFalke</span></div></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rnenqmt5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/49c1aa5f83d0751882413aafb42a77801daf1cd5" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">49c1aa5</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Rf7enqmt5rab:-loading-announcement" aria-labelledby=":R17enqmt5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 49c1aa5" aria-hidden="true" id=":R17enqmt5rab:">Copy full SHA for 49c1aa5</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-49c1aa5" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-49c1aa5" href="/bitcoin/bitcoin/blob/49c1aa5f83d0751882413aafb42a77801daf1cd5/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-49c1aa5" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-49c1aa5" href="/bitcoin/bitcoin/tree/49c1aa5f83d0751882413aafb42a77801daf1cd5" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Ramt5rab:-list-view-node-:Rrqmt5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/62d50ef3085c48788d32b4918dc189f9a6c997d7"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Add LOCKS_EXCLUDED(cs_main) to LimitValidationInterfaceQueue(...) which does AssertLockNotHeld(cs_main) Add LOCKS_EXCLUDED(cs_main) to functions calling LimitValidationInterfaceQueue(...) which does AssertLockNotHeld(cs_main) Add LOCKS_EXCLUDED(cs_main) to functions calling CChainState::InvalidateBlock(...) which calls LimitValidationInterfaceQueue(...) which in turn does AssertLockNotHeld(cs_main) Add LOCKS_EXCLUDED(cs_main) to functions calling CChainState::RewindBlockIndex(...) which calls LimitValidationInterfaceQueue(...) which in turn does AssertLockNotHeld(cs_main)" class="color-fg-default" href="/bitcoin/bitcoin/commit/62d50ef3085c48788d32b4918dc189f9a6c997d7">Add LOCKS_EXCLUDED(cs_main) to LimitValidationInterfaceQueue(...) which does AssertLockNotHeld(cs_main)</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R3h6rqmt5rab:-loading-announcement show-description-62d50ef" aria-labelledby="show-description-62d50ef"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 62d50ef" role="tooltip" aria-hidden="true" id="show-description-62d50ef">Show description for 62d50ef</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/practicalswift" data-testid="avatar-icon-link" data-hovercard-url="/users/practicalswift/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="practicalswift" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/7826565?v=4&size=32" data-testid="github-avatar" aria-label="practicalswift"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=practicalswift" aria-label="commits by practicalswift" data-hovercard-url="/users/practicalswift/hovercard">practicalswift</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rnerqmt5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/62d50ef3085c48788d32b4918dc189f9a6c997d7" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">62d50ef</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Rf7erqmt5rab:-loading-announcement" aria-labelledby=":R17erqmt5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 62d50ef" aria-hidden="true" id=":R17erqmt5rab:">Copy full SHA for 62d50ef</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-62d50ef" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-62d50ef" href="/bitcoin/bitcoin/blob/62d50ef3085c48788d32b4918dc189f9a6c997d7/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-62d50ef" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-62d50ef" href="/bitcoin/bitcoin/tree/62d50ef3085c48788d32b4918dc189f9a6c997d7" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R7d5rab:" data-testid="commit-group-title">Commits on May 7, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Rand5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R7d5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Rand5rab:-list-view-node-:Rfqnd5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/b2a6b0216192b6e8428f1a80b47f5178fccb961a"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Merge #15948: refactor: rename chainActive 486c1eea86 refactoring: remove unused chainActive (James O'Beirne) 631940aab2 scripted-diff: replace chainActive -> ::ChainActive() (James O'Beirne) a3a609079c refactoring: introduce unused ChainActive() (James O'Beirne) 1b6e6fcfd2 rename: CChainState.chainActive -> m_chain (James O'Beirne) Pull request description: This is part of the assumeutxo project: Parent PR: #15606 Issue: #15605 Specification: https://github.com/jamesob/assumeutxo-docs/tree/2019-04-proposal/proposal --- This change refactors the `chainActive` reference into a `::ChainActive()` call. It also distinguishes `CChainState`'s `CChain` data member as `m_chain` instead of the current `chainActive`, which makes it easily confused with the global data. The active chain must be obtained via function because its reference will be swapped at some point during runtime after loading a UTXO snapshot. This change, though lengthy, should be pretty easy to review since most of it is contained within a scripted-diff. Once merged, the parent PR should be easier to review. ACKs for commit 486c1e: Sjors: utACK 486c1ee promag: utACK 486c1ee. practicalswift: utACK 486c1eea863a41e597ae4fddc392f446f2518b4b Tree-SHA512: 06ed8f9e77f2d25fc9bea0ba86436d80dbbce90a1e8be23e37ec4eeb26060483e60b4a5c4fba679cb1867f61e3921c24abeb9cabdfb4d0a9b1c4ddd77b17456a" class="color-fg-default" href="/bitcoin/bitcoin/commit/b2a6b0216192b6e8428f1a80b47f5178fccb961a">Merge</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="440176622" data-permission-text="Title is private" data-url="https://github.com/bitcoin/bitcoin/issues/15948" data-hovercard-type="pull_request" data-hovercard-url="/bitcoin/bitcoin/pull/15948/hovercard" href="https://github.com/bitcoin/bitcoin/pull/15948">#15948</a><a data-pjax="true" title="Merge #15948: refactor: rename chainActive 486c1eea86 refactoring: remove unused chainActive (James O'Beirne) 631940aab2 scripted-diff: replace chainActive -> ::ChainActive() (James O'Beirne) a3a609079c refactoring: introduce unused ChainActive() (James O'Beirne) 1b6e6fcfd2 rename: CChainState.chainActive -> m_chain (James O'Beirne) Pull request description: This is part of the assumeutxo project: Parent PR: #15606 Issue: #15605 Specification: https://github.com/jamesob/assumeutxo-docs/tree/2019-04-proposal/proposal --- This change refactors the `chainActive` reference into a `::ChainActive()` call. It also distinguishes `CChainState`'s `CChain` data member as `m_chain` instead of the current `chainActive`, which makes it easily confused with the global data. The active chain must be obtained via function because its reference will be swapped at some point during runtime after loading a UTXO snapshot. This change, though lengthy, should be pretty easy to review since most of it is contained within a scripted-diff. Once merged, the parent PR should be easier to review. ACKs for commit 486c1e: Sjors: utACK 486c1ee promag: utACK 486c1ee. practicalswift: utACK 486c1eea863a41e597ae4fddc392f446f2518b4b Tree-SHA512: 06ed8f9e77f2d25fc9bea0ba86436d80dbbce90a1e8be23e37ec4eeb26060483e60b4a5c4fba679cb1867f61e3921c24abeb9cabdfb4d0a9b1c4ddd77b17456a" class="color-fg-default" href="/bitcoin/bitcoin/commit/b2a6b0216192b6e8428f1a80b47f5178fccb961a">: refactor: rename chainActive</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R1ojfqnd5rab:-loading-announcement show-description-b2a6b02" aria-labelledby="show-description-b2a6b02"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for b2a6b02" role="tooltip" aria-hidden="true" id="show-description-b2a6b02">Show description for b2a6b02</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="author" width="16" height="16" style="--avatarSize-regular:16px" src="https://github.githubassets.com/images/gravatars/gravatar-user-420.png?size=32" data-testid="github-avatar" aria-label="author"/><div title="MarcoFalke" class="Truncate__StyledTruncate-sc-23o1d2-0 cPKWJh"><span class="Text__StyledText-sc-17v1xeu-0 fgBxNv">MarcoFalke</span></div></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rbnfqnd5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/b2a6b0216192b6e8428f1a80b47f5178fccb961a" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">b2a6b02</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R7jnfqnd5rab:-loading-announcement" aria-labelledby=":Rjnfqnd5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for b2a6b02" aria-hidden="true" id=":Rjnfqnd5rab:">Copy full SHA for b2a6b02</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-b2a6b02" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-b2a6b02" href="/bitcoin/bitcoin/blob/b2a6b0216192b6e8428f1a80b47f5178fccb961a/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-b2a6b02" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-b2a6b02" href="/bitcoin/bitcoin/tree/b2a6b0216192b6e8428f1a80b47f5178fccb961a" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R7t5rab:" data-testid="commit-group-title">Commits on May 4, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Rant5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R7t5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Rant5rab:-list-view-node-:Rfqnt5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/d7d7d315060620446bd363ca50f95f79d3260db7"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Merge #15141: Rewrite DoS interface between validation and net_processing 0ff1c2a838da9e8dc7f77609adc89124bbea3e2b Separate reason for premature spends (coinbase/locktime) (Suhas Daftuar) 54470e767bab37f9b7089782b1be73d5883bb244 Assert validation reasons are contextually correct (Suhas Daftuar) 2120c31521aa51aa1984ee33250b8320506d3a0f [refactor] Update some comments in validation.cpp as we arent doing DoS there (Matt Corallo) 12dbdd7a41bac73e51ed8f7b290b7671196bf9ea [refactor] Drop unused state.DoS(), state.GetDoS(), state.CorruptionPossible() (Matt Corallo) aa502b88d10c2c3ac56d9163555849b96dc4df1e scripted-diff: Remove DoS calls to CValidationState (Matt Corallo) 7721ad64f40a0c67edefaaf7353264d78df8803e [refactor] Prep for scripted-diff by removing some \ns which annoy sed. (Matt Corallo) 5e78c5734bb0c9aae7b0a7019a745b2d7059b3d9 Allow use of state.Invalid() for all reasons (Matt Corallo) 6b34bc6b6f54f85537494cbea3846d5d195a06d9 Fix handling of invalid headers (Suhas Daftuar) ef54b486d5333dfc85c56e6b933c81735196a25d [refactor] Use Reasons directly instead of DoS codes (Matt Corallo) 9ab2a0412e96e87956fe61257387683635213035 CorruptionPossible -> BLOCK_MUTATED (Matt Corallo) 6e55b292b0ea944897b6dc2f766446fd209af484 CorruptionPossible -> TX_WITNESS_MUTATED (Matt Corallo) 7df16e70e67c753c871797ce947ea09d7cb0e519 LookupBlockIndex -> CACHED_INVALID (Matt Corallo) c8b0d22698385f91215ce8145631e3d5826dc977 [refactor] Drop redundant nDoS, corruptionPossible, SetCorruptionPossible (Matt Corallo) 34477ccd39a8d4bfa8ad612f22d5a46291922185 [refactor] Add useful-for-dos "reason" field to CValidationState (Matt Corallo) 6a7f8777a0b193fae4f976196f3464ffac01bf1b Ban all peers for all block script failures (Suhas Daftuar) 7b999103e21509e1c2dec10f68e48744ffe90f55 Clean up banning levels (Matt Corallo) b8b4c80146780f9011abbd1be72343cc965c07b9 [refactor] drop IsInvalid(nDoSOut) (Matt Corallo) 8818729013e17c650a25f030b2b80e0997389155 [refactor] Refactor misbehavior ban decisions to MaybePunishNode() (Matt Corallo) 00e11e61c0211a62788611cd6a6714a393fdc26c [refactor] rename stateDummy -> orphan_state (Matt Corallo) f34fa719cf33a51d11f1d2219cbe73ccff6fd697 Drop obsolete sigops comment (Matt Corallo) Pull request description: This is a rebase of #11639 with some fixes for the last few comments which were not yet addressed. The original PR text, with some strikethroughs of text that is no longer correct: > This cleans up an old main-carryover - it made sense that main could decide what DoS scores to assign things because the DoS scores were handled in a different part of main, but now validation is telling net_processing what DoS scores to assign to different things, which is utter nonsense. Instead, we replace CValidationState's nDoS and CorruptionPossible with a general ValidationInvalidReason, which net_processing can handle as it sees fit. I keep the behavior changes here to a minimum, but in the future we can utilize these changes for other smarter behavior, such as disconnecting/preferring to rotate outbound peers based on them providing things which are invalid due to SOFT_FORK because we shouldn't ban for such cases. > > This is somewhat complementary with, though obviously conflicts heavily with #11523, which added enums in place of DoS scores, as well as a few other cleanups (which are still relevant). > > Compared with previous bans, the following changes are made: > > Txn with empty vin/vout or null prevouts move from 10 DoS > points to 100. > Loose transactions with a dependency loop now result in a ban > instead of 10 DoS points. > ~~BIP68-violation no longer results in a ban as it is SOFT_FORK.~~ > ~~Non-SegWit SigOp violation no longer results in a ban as it > considers P2SH sigops and is thus SOFT_FORK.~~ > ~~Any script violation in a block no longer results in a ban as > it may be the result of a SOFT_FORK. This should likely be > fixed in the future by differentiating between them.~~ > Proof of work failure moves from 50 DoS points to a ban. > Blocks with timestamps under MTP now result in a ban, blocks > too far in the future continue to not result in a ban. > Inclusion of non-final transactions in a block now results in a > ban instead of 10 DoS points. Note: The change to ban all peers for consensus violations is actually NOT the change I'd like to make -- I'd prefer to only ban outbound peers in those situations. The current behavior is a bit of a mess, however, and so in the interests of advancing this PR I tried to keep the changes to a minimum. I plan to revisit the behavior in a followup PR. EDIT: One reviewer suggested I add some additional context for this PR: > The goal of this work was to make net_processing aware of the actual reasons for validation failures, rather than just deal with opaque numbers instructing it to do something. > > In the future, I'd like to make it so that we use more context to decide how to punish a peer. One example is to differentiate inbound and outbound peer misbehaviors. Another potential example is if we'd treat RECENT_CONSENSUS_CHANGE failures differently (ie after the next consensus change is implemented), and perhaps again we'd want to treat some peers differently than others. ACKs for commit 0ff1c2: jnewbery: utACK 0ff1c2a838da9e8dc7f77609adc89124bbea3e2b ryanofsky: utACK 0ff1c2a838da9e8dc7f77609adc89124bbea3e2b. Only change is dropping the first commit (f3883a321bf4ab289edcd9754b12cae3a648b175), and dropping the temporary `assert(level == GetDoS())` that was in 35ee77f2832eaffce30042e00785c310c5540cdc (now c8b0d22698385f91215ce8145631e3d5826dc977) Tree-SHA512: e915a411100876398af5463d0a885920e44d473467bb6af991ef2e8f2681db6c1209bb60f848bd154be72d460f039b5653df20a6840352c5f7ea5486d9f777a3" class="color-fg-default" href="/bitcoin/bitcoin/commit/d7d7d315060620446bd363ca50f95f79d3260db7">Merge</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="397924135" data-permission-text="Title is private" data-url="https://github.com/bitcoin/bitcoin/issues/15141" data-hovercard-type="pull_request" data-hovercard-url="/bitcoin/bitcoin/pull/15141/hovercard" href="https://github.com/bitcoin/bitcoin/pull/15141">#15141</a><a data-pjax="true" title="Merge #15141: Rewrite DoS interface between validation and net_processing 0ff1c2a838da9e8dc7f77609adc89124bbea3e2b Separate reason for premature spends (coinbase/locktime) (Suhas Daftuar) 54470e767bab37f9b7089782b1be73d5883bb244 Assert validation reasons are contextually correct (Suhas Daftuar) 2120c31521aa51aa1984ee33250b8320506d3a0f [refactor] Update some comments in validation.cpp as we arent doing DoS there (Matt Corallo) 12dbdd7a41bac73e51ed8f7b290b7671196bf9ea [refactor] Drop unused state.DoS(), state.GetDoS(), state.CorruptionPossible() (Matt Corallo) aa502b88d10c2c3ac56d9163555849b96dc4df1e scripted-diff: Remove DoS calls to CValidationState (Matt Corallo) 7721ad64f40a0c67edefaaf7353264d78df8803e [refactor] Prep for scripted-diff by removing some \ns which annoy sed. (Matt Corallo) 5e78c5734bb0c9aae7b0a7019a745b2d7059b3d9 Allow use of state.Invalid() for all reasons (Matt Corallo) 6b34bc6b6f54f85537494cbea3846d5d195a06d9 Fix handling of invalid headers (Suhas Daftuar) ef54b486d5333dfc85c56e6b933c81735196a25d [refactor] Use Reasons directly instead of DoS codes (Matt Corallo) 9ab2a0412e96e87956fe61257387683635213035 CorruptionPossible -> BLOCK_MUTATED (Matt Corallo) 6e55b292b0ea944897b6dc2f766446fd209af484 CorruptionPossible -> TX_WITNESS_MUTATED (Matt Corallo) 7df16e70e67c753c871797ce947ea09d7cb0e519 LookupBlockIndex -> CACHED_INVALID (Matt Corallo) c8b0d22698385f91215ce8145631e3d5826dc977 [refactor] Drop redundant nDoS, corruptionPossible, SetCorruptionPossible (Matt Corallo) 34477ccd39a8d4bfa8ad612f22d5a46291922185 [refactor] Add useful-for-dos "reason" field to CValidationState (Matt Corallo) 6a7f8777a0b193fae4f976196f3464ffac01bf1b Ban all peers for all block script failures (Suhas Daftuar) 7b999103e21509e1c2dec10f68e48744ffe90f55 Clean up banning levels (Matt Corallo) b8b4c80146780f9011abbd1be72343cc965c07b9 [refactor] drop IsInvalid(nDoSOut) (Matt Corallo) 8818729013e17c650a25f030b2b80e0997389155 [refactor] Refactor misbehavior ban decisions to MaybePunishNode() (Matt Corallo) 00e11e61c0211a62788611cd6a6714a393fdc26c [refactor] rename stateDummy -> orphan_state (Matt Corallo) f34fa719cf33a51d11f1d2219cbe73ccff6fd697 Drop obsolete sigops comment (Matt Corallo) Pull request description: This is a rebase of #11639 with some fixes for the last few comments which were not yet addressed. The original PR text, with some strikethroughs of text that is no longer correct: > This cleans up an old main-carryover - it made sense that main could decide what DoS scores to assign things because the DoS scores were handled in a different part of main, but now validation is telling net_processing what DoS scores to assign to different things, which is utter nonsense. Instead, we replace CValidationState's nDoS and CorruptionPossible with a general ValidationInvalidReason, which net_processing can handle as it sees fit. I keep the behavior changes here to a minimum, but in the future we can utilize these changes for other smarter behavior, such as disconnecting/preferring to rotate outbound peers based on them providing things which are invalid due to SOFT_FORK because we shouldn't ban for such cases. > > This is somewhat complementary with, though obviously conflicts heavily with #11523, which added enums in place of DoS scores, as well as a few other cleanups (which are still relevant). > > Compared with previous bans, the following changes are made: > > Txn with empty vin/vout or null prevouts move from 10 DoS > points to 100. > Loose transactions with a dependency loop now result in a ban > instead of 10 DoS points. > ~~BIP68-violation no longer results in a ban as it is SOFT_FORK.~~ > ~~Non-SegWit SigOp violation no longer results in a ban as it > considers P2SH sigops and is thus SOFT_FORK.~~ > ~~Any script violation in a block no longer results in a ban as > it may be the result of a SOFT_FORK. This should likely be > fixed in the future by differentiating between them.~~ > Proof of work failure moves from 50 DoS points to a ban. > Blocks with timestamps under MTP now result in a ban, blocks > too far in the future continue to not result in a ban. > Inclusion of non-final transactions in a block now results in a > ban instead of 10 DoS points. Note: The change to ban all peers for consensus violations is actually NOT the change I'd like to make -- I'd prefer to only ban outbound peers in those situations. The current behavior is a bit of a mess, however, and so in the interests of advancing this PR I tried to keep the changes to a minimum. I plan to revisit the behavior in a followup PR. EDIT: One reviewer suggested I add some additional context for this PR: > The goal of this work was to make net_processing aware of the actual reasons for validation failures, rather than just deal with opaque numbers instructing it to do something. > > In the future, I'd like to make it so that we use more context to decide how to punish a peer. One example is to differentiate inbound and outbound peer misbehaviors. Another potential example is if we'd treat RECENT_CONSENSUS_CHANGE failures differently (ie after the next consensus change is implemented), and perhaps again we'd want to treat some peers differently than others. ACKs for commit 0ff1c2: jnewbery: utACK 0ff1c2a838da9e8dc7f77609adc89124bbea3e2b ryanofsky: utACK 0ff1c2a838da9e8dc7f77609adc89124bbea3e2b. Only change is dropping the first commit (f3883a321bf4ab289edcd9754b12cae3a648b175), and dropping the temporary `assert(level == GetDoS())` that was in 35ee77f2832eaffce30042e00785c310c5540cdc (now c8b0d22698385f91215ce8145631e3d5826dc977) Tree-SHA512: e915a411100876398af5463d0a885920e44d473467bb6af991ef2e8f2681db6c1209bb60f848bd154be72d460f039b5653df20a6840352c5f7ea5486d9f777a3" class="color-fg-default" href="/bitcoin/bitcoin/commit/d7d7d315060620446bd363ca50f95f79d3260db7">: Rewrite DoS interface between validation and net_processing</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R1ojfqnt5rab:-loading-announcement show-description-d7d7d31" aria-labelledby="show-description-d7d7d31"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for d7d7d31" role="tooltip" aria-hidden="true" id="show-description-d7d7d31">Show description for d7d7d31</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/laanwj" data-testid="avatar-icon-link" data-hovercard-url="/users/laanwj/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="laanwj" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/126646?v=4&size=32" data-testid="github-avatar" aria-label="laanwj"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=laanwj" aria-label="commits by laanwj" data-hovercard-url="/users/laanwj/hovercard">laanwj</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":Rbnfqnt5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/d7d7d315060620446bd363ca50f95f79d3260db7" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">d7d7d31</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R7jnfqnt5rab:-loading-announcement" aria-labelledby=":Rjnfqnt5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for d7d7d31" aria-hidden="true" id=":Rjnfqnt5rab:">Copy full SHA for d7d7d31</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-d7d7d31" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-d7d7d31" href="/bitcoin/bitcoin/blob/d7d7d315060620446bd363ca50f95f79d3260db7/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-d7d7d31" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-d7d7d31" href="/bitcoin/bitcoin/tree/d7d7d315060620446bd363ca50f95f79d3260db7" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R8d5rab:" data-testid="commit-group-title">Commits on May 3, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Raod5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R8d5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Raod5rab:-list-view-node-:R17qod5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/486c1eea863a41e597ae4fddc392f446f2518b4b"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="refactoring: remove unused chainActive" class="color-fg-default" href="/bitcoin/bitcoin/commit/486c1eea863a41e597ae4fddc392f446f2518b4b">refactoring: remove unused chainActive</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/jamesob" data-testid="avatar-icon-link" data-hovercard-url="/users/jamesob/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="jamesob" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/73197?v=4&size=32" data-testid="github-avatar" aria-label="jamesob"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=jamesob" aria-label="commits by jamesob" data-hovercard-url="/users/jamesob/hovercard">jamesob</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R1et7qod5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/486c1eea863a41e597ae4fddc392f446f2518b4b" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">486c1ee</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Ruet7qod5rab:-loading-announcement" aria-labelledby=":R2et7qod5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 486c1ee" aria-hidden="true" id=":R2et7qod5rab:">Copy full SHA for 486c1ee</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-486c1ee" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-486c1ee" href="/bitcoin/bitcoin/blob/486c1eea863a41e597ae4fddc392f446f2518b4b/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-486c1ee" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-486c1ee" href="/bitcoin/bitcoin/tree/486c1eea863a41e597ae4fddc392f446f2518b4b" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Raod5rab:-list-view-node-:R1bqod5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/631940aab228ccca64c15e05d5953f40381a0ffc"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="scripted-diff: replace chainActive -> ::ChainActive() Though at the moment ChainActive() simply references `g_chainstate.m_chain`, doing this change now clears the way for multiple chainstate usage and allows us to script the diff. -BEGIN VERIFY SCRIPT- git grep -l "chainActive" | grep -E '(h|cpp)$' | xargs sed -i '/chainActive =/b; /extern CChain& chainActive/b; s/\(::\)\{0,1\}chainActive/::ChainActive()/g' -END VERIFY SCRIPT-" class="color-fg-default" href="/bitcoin/bitcoin/commit/631940aab228ccca64c15e05d5953f40381a0ffc">scripted-diff: replace chainActive -> ::ChainActive()</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R72dbqod5rab:-loading-announcement show-description-631940a" aria-labelledby="show-description-631940a"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 631940a" role="tooltip" aria-hidden="true" id="show-description-631940a">Show description for 631940a</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/jamesob" data-testid="avatar-icon-link" data-hovercard-url="/users/jamesob/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="jamesob" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/73197?v=4&size=32" data-testid="github-avatar" aria-label="jamesob"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=jamesob" aria-label="commits by jamesob" data-hovercard-url="/users/jamesob/hovercard">jamesob</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R1etbqod5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/631940aab228ccca64c15e05d5953f40381a0ffc" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">631940a</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Ruetbqod5rab:-loading-announcement" aria-labelledby=":R2etbqod5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 631940a" aria-hidden="true" id=":R2etbqod5rab:">Copy full SHA for 631940a</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-631940a" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-631940a" href="/bitcoin/bitcoin/blob/631940aab228ccca64c15e05d5953f40381a0ffc/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-631940a" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-631940a" href="/bitcoin/bitcoin/tree/631940aab228ccca64c15e05d5953f40381a0ffc" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Raod5rab:-list-view-node-:R1fqod5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/a3a609079c76dd2bbc72127488bf466cc61d8940"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="refactoring: introduce unused ChainActive() in preparation for the following scripted-diff commit." class="color-fg-default" href="/bitcoin/bitcoin/commit/a3a609079c76dd2bbc72127488bf466cc61d8940">refactoring: introduce unused ChainActive()</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R72dfqod5rab:-loading-announcement show-description-a3a6090" aria-labelledby="show-description-a3a6090"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for a3a6090" role="tooltip" aria-hidden="true" id="show-description-a3a6090">Show description for a3a6090</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/jamesob" data-testid="avatar-icon-link" data-hovercard-url="/users/jamesob/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="jamesob" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/73197?v=4&size=32" data-testid="github-avatar" aria-label="jamesob"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=jamesob" aria-label="commits by jamesob" data-hovercard-url="/users/jamesob/hovercard">jamesob</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R1etfqod5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/a3a609079c76dd2bbc72127488bf466cc61d8940" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">a3a6090</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Ruetfqod5rab:-loading-announcement" aria-labelledby=":R2etfqod5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for a3a6090" aria-hidden="true" id=":R2etfqod5rab:">Copy full SHA for a3a6090</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-a3a6090" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-a3a6090" href="/bitcoin/bitcoin/blob/a3a609079c76dd2bbc72127488bf466cc61d8940/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-a3a6090" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-a3a6090" href="/bitcoin/bitcoin/tree/a3a609079c76dd2bbc72127488bf466cc61d8940" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Raod5rab:-list-view-node-:R1jqod5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/1b6e6fcfd2f8a8def148ea0f50af202d5cae318a"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="rename: CChainState.chainActive -> m_chain This can't be a scripted-diff due to the confusion of the global chainActive and the CChainState member of the same name. This specific rename makes the following chainActive -> ::ChainActive() diff scriptable." class="color-fg-default" href="/bitcoin/bitcoin/commit/1b6e6fcfd2f8a8def148ea0f50af202d5cae318a">rename: CChainState.chainActive -> m_chain</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R72djqod5rab:-loading-announcement show-description-1b6e6fc" aria-labelledby="show-description-1b6e6fc"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 1b6e6fc" role="tooltip" aria-hidden="true" id="show-description-1b6e6fc">Show description for 1b6e6fc</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/jamesob" data-testid="avatar-icon-link" data-hovercard-url="/users/jamesob/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="jamesob" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/73197?v=4&size=32" data-testid="github-avatar" aria-label="jamesob"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=jamesob" aria-label="commits by jamesob" data-hovercard-url="/users/jamesob/hovercard">jamesob</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R1etjqod5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/1b6e6fcfd2f8a8def148ea0f50af202d5cae318a" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">1b6e6fc</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":Ruetjqod5rab:-loading-announcement" aria-labelledby=":R2etjqod5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 1b6e6fc" aria-hidden="true" id=":R2etjqod5rab:">Copy full SHA for 1b6e6fc</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-1b6e6fc" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-1b6e6fc" href="/bitcoin/bitcoin/blob/1b6e6fcfd2f8a8def148ea0f50af202d5cae318a/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-1b6e6fc" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-1b6e6fc" href="/bitcoin/bitcoin/tree/1b6e6fcfd2f8a8def148ea0f50af202d5cae318a" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div><div class="Timeline__ToggleTimelineItem-sc-1nkzbnu-1 eHtUWW Timeline-Item"><div class="Box-sc-g0xbh4-0 izArLR"><div display="flex" class="Box-sc-g0xbh4-0 bbNsBg TimelineItem-Badge" overflow="hidden" color="fg.muted" width="32px" height="32px"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"></path></svg></div></div><div class="Timeline__ToggleTimelineBody-sc-1nkzbnu-2 jdZjlQ mt-0"><h3 class="text-normal f5 py-1 prc-Heading-Heading-6CmGO" id=":R8t5rab:" data-testid="commit-group-title">Commits on May 2, 2019</h3><div class="color-bg-default position-relative border rounded-2 color-border-default mt-2 d-flex flex-column CommitGroup-module__panel--tvFMx"><div id=":Raot5rab:-list-view-container" class="ListView-module__container--zF6wW"><ul class="ListView-module__ul--vMLEZ" aria-labelledby=":R8t5rab:" tabindex="-1" role="list" data-listview-component="items-list"><li id=":Raot5rab:-list-view-node-:R27qot5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/0ff1c2a838da9e8dc7f77609adc89124bbea3e2b"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Separate reason for premature spends (coinbase/locktime)" class="color-fg-default" href="/bitcoin/bitcoin/commit/0ff1c2a838da9e8dc7f77609adc89124bbea3e2b">Separate reason for premature spends (coinbase/locktime)</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/sdaftuar" data-testid="avatar-icon-link" data-hovercard-url="/users/sdaftuar/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="sdaftuar" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/7463573?v=4&size=32" data-testid="github-avatar" aria-label="sdaftuar"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=sdaftuar" aria-label="commits by sdaftuar" data-hovercard-url="/users/sdaftuar/hovercard">sdaftuar</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R2tq7qot5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/0ff1c2a838da9e8dc7f77609adc89124bbea3e2b" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">0ff1c2a</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R1stq7qot5rab:-loading-announcement" aria-labelledby=":R4tq7qot5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 0ff1c2a" aria-hidden="true" id=":R4tq7qot5rab:">Copy full SHA for 0ff1c2a</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-0ff1c2a" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-0ff1c2a" href="/bitcoin/bitcoin/blob/0ff1c2a838da9e8dc7f77609adc89124bbea3e2b/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-0ff1c2a" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-0ff1c2a" href="/bitcoin/bitcoin/tree/0ff1c2a838da9e8dc7f77609adc89124bbea3e2b" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Raot5rab:-list-view-node-:R2bqot5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/54470e767bab37f9b7089782b1be73d5883bb244"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Assert validation reasons are contextually correct" class="color-fg-default" href="/bitcoin/bitcoin/commit/54470e767bab37f9b7089782b1be73d5883bb244">Assert validation reasons are contextually correct</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/sdaftuar" data-testid="avatar-icon-link" data-hovercard-url="/users/sdaftuar/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="sdaftuar" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/7463573?v=4&size=32" data-testid="github-avatar" aria-label="sdaftuar"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=sdaftuar" aria-label="commits by sdaftuar" data-hovercard-url="/users/sdaftuar/hovercard">sdaftuar</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R2tqbqot5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/54470e767bab37f9b7089782b1be73d5883bb244" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">54470e7</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R1stqbqot5rab:-loading-announcement" aria-labelledby=":R4tqbqot5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 54470e7" aria-hidden="true" id=":R4tqbqot5rab:">Copy full SHA for 54470e7</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-54470e7" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-54470e7" href="/bitcoin/bitcoin/blob/54470e767bab37f9b7089782b1be73d5883bb244/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-54470e7" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-54470e7" href="/bitcoin/bitcoin/tree/54470e767bab37f9b7089782b1be73d5883bb244" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Raot5rab:-list-view-node-:R2fqot5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/2120c31521aa51aa1984ee33250b8320506d3a0f"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="[refactor] Update some comments in validation.cpp as we arent doing DoS there" class="color-fg-default" href="/bitcoin/bitcoin/commit/2120c31521aa51aa1984ee33250b8320506d3a0f">[refactor] Update some comments in validation.cpp as we arent doing DoS there</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><span class="AvatarStack__AvatarStackWrapper-sc-4pdg6v-0 hzFJAq pc-AvatarStack--three"><div class="Box-sc-g0xbh4-0 pc-AvatarStackBody" tabindex="0"> <img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="TheBlueMatt" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/649246?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/TheBlueMatt/hovercard"/><img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="sdaftuar" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/7463573?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/sdaftuar/hovercard"/></div></span><div data-testid="author-link" class="Box-sc-g0xbh4-0 iCHGgS"><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=TheBlueMatt" aria-label="commits by TheBlueMatt" data-hovercard-url="/users/TheBlueMatt/hovercard">TheBlueMatt</a></div><span class="pl-1">authored and</span><div data-testid="author-link" class="Box-sc-g0xbh4-0 iCHGgS"><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=sdaftuar" aria-label="commits by sdaftuar" data-hovercard-url="/users/sdaftuar/hovercard">sdaftuar</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R2tqfqot5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/2120c31521aa51aa1984ee33250b8320506d3a0f" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">2120c31</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R1stqfqot5rab:-loading-announcement" aria-labelledby=":R4tqfqot5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 2120c31" aria-hidden="true" id=":R4tqfqot5rab:">Copy full SHA for 2120c31</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-2120c31" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-2120c31" href="/bitcoin/bitcoin/blob/2120c31521aa51aa1984ee33250b8320506d3a0f/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-2120c31" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-2120c31" href="/bitcoin/bitcoin/tree/2120c31521aa51aa1984ee33250b8320506d3a0f" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Raot5rab:-list-view-node-:R2jqot5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/aa502b88d10c2c3ac56d9163555849b96dc4df1e"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="scripted-diff: Remove DoS calls to CValidationState -BEGIN VERIFY SCRIPT- sed -i 's/\.DoS(\(.*\), REJECT_\(.*\), \(true\|false\)/.DoS(\1, REJECT_\2/' src/validation.cpp src/consensus/tx_verify.cpp src/consensus/tx_check.cpp sed -i 's/state.GetRejectCode(), state.GetRejectReason(), [^,]\+, state.GetDebugMessage())/state.GetRejectCode(), state.GetRejectReason(), state.GetDebugMessage())/' src/validation.cpp sed -i 's/\.DoS([^,]*, /.Invalid\(/' src/validation.cpp src/consensus/tx_verify.cpp src/consensus/tx_check.cpp -END VERIFY SCRIPT- Co-authored-by: Suhas Daftuar <sdaftuar@gmail.com>" class="color-fg-default" href="/bitcoin/bitcoin/commit/aa502b88d10c2c3ac56d9163555849b96dc4df1e">scripted-diff: Remove DoS calls to CValidationState</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":Re4qjqot5rab:-loading-announcement show-description-aa502b8" aria-labelledby="show-description-aa502b8"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for aa502b8" role="tooltip" aria-hidden="true" id="show-description-aa502b8">Show description for aa502b8</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><span class="AvatarStack__AvatarStackWrapper-sc-4pdg6v-0 hzFJAq pc-AvatarStack--three"><div class="Box-sc-g0xbh4-0 pc-AvatarStackBody" tabindex="0"> <img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="TheBlueMatt" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/649246?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/TheBlueMatt/hovercard"/><img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="sdaftuar" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/7463573?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/sdaftuar/hovercard"/></div></span><div data-testid="author-link" class="Box-sc-g0xbh4-0 iCHGgS"><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=TheBlueMatt" aria-label="commits by TheBlueMatt" data-hovercard-url="/users/TheBlueMatt/hovercard">TheBlueMatt</a></div><span class="pl-1">and</span><div data-testid="author-link" class="Box-sc-g0xbh4-0 iCHGgS"><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=sdaftuar" aria-label="commits by sdaftuar" data-hovercard-url="/users/sdaftuar/hovercard">sdaftuar</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R2tqjqot5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/aa502b88d10c2c3ac56d9163555849b96dc4df1e" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">aa502b8</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R1stqjqot5rab:-loading-announcement" aria-labelledby=":R4tqjqot5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for aa502b8" aria-hidden="true" id=":R4tqjqot5rab:">Copy full SHA for aa502b8</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-aa502b8" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-aa502b8" href="/bitcoin/bitcoin/blob/aa502b88d10c2c3ac56d9163555849b96dc4df1e/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-aa502b8" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-aa502b8" href="/bitcoin/bitcoin/tree/aa502b88d10c2c3ac56d9163555849b96dc4df1e" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Raot5rab:-list-view-node-:R2nqot5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/7721ad64f40a0c67edefaaf7353264d78df8803e"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="[refactor] Prep for scripted-diff by removing some \ns which annoy sed." class="color-fg-default" href="/bitcoin/bitcoin/commit/7721ad64f40a0c67edefaaf7353264d78df8803e">[refactor] Prep for scripted-diff by removing some \ns which annoy sed.</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><span class="AvatarStack__AvatarStackWrapper-sc-4pdg6v-0 hzFJAq pc-AvatarStack--three"><div class="Box-sc-g0xbh4-0 pc-AvatarStackBody" tabindex="0"> <img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="TheBlueMatt" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/649246?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/TheBlueMatt/hovercard"/><img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="sdaftuar" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/7463573?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/sdaftuar/hovercard"/></div></span><div data-testid="author-link" class="Box-sc-g0xbh4-0 iCHGgS"><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=TheBlueMatt" aria-label="commits by TheBlueMatt" data-hovercard-url="/users/TheBlueMatt/hovercard">TheBlueMatt</a></div><span class="pl-1">authored and</span><div data-testid="author-link" class="Box-sc-g0xbh4-0 iCHGgS"><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=sdaftuar" aria-label="commits by sdaftuar" data-hovercard-url="/users/sdaftuar/hovercard">sdaftuar</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R2tqnqot5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/7721ad64f40a0c67edefaaf7353264d78df8803e" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">7721ad6</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R1stqnqot5rab:-loading-announcement" aria-labelledby=":R4tqnqot5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 7721ad6" aria-hidden="true" id=":R4tqnqot5rab:">Copy full SHA for 7721ad6</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-7721ad6" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-7721ad6" href="/bitcoin/bitcoin/blob/7721ad64f40a0c67edefaaf7353264d78df8803e/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-7721ad6" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-7721ad6" href="/bitcoin/bitcoin/tree/7721ad64f40a0c67edefaaf7353264d78df8803e" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Raot5rab:-list-view-node-:R2rqot5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/9ab2a0412e96e87956fe61257387683635213035"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="CorruptionPossible -> BLOCK_MUTATED Co-authored-by: Anthony Towns <aj@erisian.com.au>" class="color-fg-default" href="/bitcoin/bitcoin/commit/9ab2a0412e96e87956fe61257387683635213035">CorruptionPossible -> BLOCK_MUTATED</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":Re4qrqot5rab:-loading-announcement show-description-9ab2a04" aria-labelledby="show-description-9ab2a04"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 9ab2a04" role="tooltip" aria-hidden="true" id="show-description-9ab2a04">Show description for 9ab2a04</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><span class="AvatarStack__AvatarStackWrapper-sc-4pdg6v-0 hzFJAq pc-AvatarStack--three"><div class="Box-sc-g0xbh4-0 pc-AvatarStackBody" tabindex="0"> <img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="TheBlueMatt" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/649246?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/TheBlueMatt/hovercard"/><img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="ajtowns" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/127186?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/ajtowns/hovercard"/></div></span><button class="Box-sc-g0xbh4-0 fmQaBv prc-Link-Link-85e08" data-muted="true" aria-label="Show 2 authors" data-testid="authors-dialog-anchor" muted="">2<!-- --> <!-- -->people</button><span class="pl-1">authored and</span><div data-testid="author-link" class="Box-sc-g0xbh4-0 iCHGgS"><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=sdaftuar" aria-label="commits by sdaftuar" data-hovercard-url="/users/sdaftuar/hovercard">sdaftuar</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R2tqrqot5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/9ab2a0412e96e87956fe61257387683635213035" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">9ab2a04</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R1stqrqot5rab:-loading-announcement" aria-labelledby=":R4tqrqot5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 9ab2a04" aria-hidden="true" id=":R4tqrqot5rab:">Copy full SHA for 9ab2a04</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-9ab2a04" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-9ab2a04" href="/bitcoin/bitcoin/blob/9ab2a0412e96e87956fe61257387683635213035/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-9ab2a04" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-9ab2a04" href="/bitcoin/bitcoin/tree/9ab2a0412e96e87956fe61257387683635213035" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Raot5rab:-list-view-node-:R2vqot5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/34477ccd39a8d4bfa8ad612f22d5a46291922185"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="[refactor] Add useful-for-dos "reason" field to CValidationState This is a first step towards cleaning up our DoS interface - make validation return *why* something is invalid, and let net_processing figure out what that implies in terms of banning/disconnection/etc. Behavior change: peers will now be banned for providing blocks with premature coinbase spends. Co-authored-by: Anthony Towns <aj@erisian.com.au> Suhas Daftuar <sdaftuar@gmail.com>" class="color-fg-default" href="/bitcoin/bitcoin/commit/34477ccd39a8d4bfa8ad612f22d5a46291922185">[refactor] Add useful-for-dos "reason" field to CValidationState</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":Re4qvqot5rab:-loading-announcement show-description-34477cc" aria-labelledby="show-description-34477cc"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 34477cc" role="tooltip" aria-hidden="true" id="show-description-34477cc">Show description for 34477cc</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><span class="AvatarStack__AvatarStackWrapper-sc-4pdg6v-0 hzFJAq pc-AvatarStack--three"><div class="Box-sc-g0xbh4-0 pc-AvatarStackBody" tabindex="0"> <img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="TheBlueMatt" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/649246?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/TheBlueMatt/hovercard"/><img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="sdaftuar" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/7463573?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/sdaftuar/hovercard"/></div></span><div data-testid="author-link" class="Box-sc-g0xbh4-0 iCHGgS"><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=TheBlueMatt" aria-label="commits by TheBlueMatt" data-hovercard-url="/users/TheBlueMatt/hovercard">TheBlueMatt</a></div><span class="pl-1">and</span><div data-testid="author-link" class="Box-sc-g0xbh4-0 iCHGgS"><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=sdaftuar" aria-label="commits by sdaftuar" data-hovercard-url="/users/sdaftuar/hovercard">sdaftuar</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R2tqvqot5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/34477ccd39a8d4bfa8ad612f22d5a46291922185" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">34477cc</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R1stqvqot5rab:-loading-announcement" aria-labelledby=":R4tqvqot5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 34477cc" aria-hidden="true" id=":R4tqvqot5rab:">Copy full SHA for 34477cc</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-34477cc" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-34477cc" href="/bitcoin/bitcoin/blob/34477ccd39a8d4bfa8ad612f22d5a46291922185/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-34477cc" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-34477cc" href="/bitcoin/bitcoin/tree/34477ccd39a8d4bfa8ad612f22d5a46291922185" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Raot5rab:-list-view-node-:R33qot5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/6a7f8777a0b193fae4f976196f3464ffac01bf1b"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Ban all peers for all block script failures This eliminates a discrepancy between block validation with multiple script check threads, versus a single script check thread." class="color-fg-default" href="/bitcoin/bitcoin/commit/6a7f8777a0b193fae4f976196f3464ffac01bf1b">Ban all peers for all block script failures</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":Re4r3qot5rab:-loading-announcement show-description-6a7f877" aria-labelledby="show-description-6a7f877"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 6a7f877" role="tooltip" aria-hidden="true" id="show-description-6a7f877">Show description for 6a7f877</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><div data-testid="author-avatar" class="Box-sc-g0xbh4-0 hKWjvQ"><a class="prc-Link-Link-85e08" href="/sdaftuar" data-testid="avatar-icon-link" data-hovercard-url="/users/sdaftuar/hovercard"><img data-component="Avatar" class="Box-sc-g0xbh4-0 bbHsCC prc-Avatar-Avatar-ZRS-m" alt="sdaftuar" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/7463573?v=4&size=32" data-testid="github-avatar" aria-label="sdaftuar"/></a><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=sdaftuar" aria-label="commits by sdaftuar" data-hovercard-url="/users/sdaftuar/hovercard">sdaftuar</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R2tr3qot5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/6a7f8777a0b193fae4f976196f3464ffac01bf1b" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">6a7f877</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R1str3qot5rab:-loading-announcement" aria-labelledby=":R4tr3qot5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 6a7f877" aria-hidden="true" id=":R4tr3qot5rab:">Copy full SHA for 6a7f877</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-6a7f877" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-6a7f877" href="/bitcoin/bitcoin/blob/6a7f8777a0b193fae4f976196f3464ffac01bf1b/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-6a7f877" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-6a7f877" href="/bitcoin/bitcoin/tree/6a7f8777a0b193fae4f976196f3464ffac01bf1b" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Raot5rab:-list-view-node-:R37qot5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/7b999103e21509e1c2dec10f68e48744ffe90f55"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Clean up banning levels Compared with previous bans, the following changes are made: * Txn with empty vin/vout or null prevouts move from 10 DoS points to 100. * Loose transactions with a dependency loop now result in a ban instead of 10 DoS points. * Many pre-segwit soft-fork errors now result in a ban. Note: Transactions that violate soft-fork script flags since P2SH do not generally result in a ban. Also, banning behavior for invalid blocks is dependent on whether the node is validating with multiple script check threads, due to a long- standing bug. That inconsistency is still present after this commit. * Proof of work failure moves from 50 DoS points to a ban. * Blocks with timestamps under MTP now result in a ban, blocks too far in the future continue to *not* result in a ban. * Inclusion of non-final transactions in a block now results in a ban instead of 10 DoS points. Co-authored-by: Anthony Towns <aj@erisian.com.au>" class="color-fg-default" href="/bitcoin/bitcoin/commit/7b999103e21509e1c2dec10f68e48744ffe90f55">Clean up banning levels</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":Re4r7qot5rab:-loading-announcement show-description-7b99910" aria-labelledby="show-description-7b99910"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for 7b99910" role="tooltip" aria-hidden="true" id="show-description-7b99910">Show description for 7b99910</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><span class="AvatarStack__AvatarStackWrapper-sc-4pdg6v-0 hzFJAq pc-AvatarStack--three"><div class="Box-sc-g0xbh4-0 pc-AvatarStackBody" tabindex="0"> <img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="TheBlueMatt" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/649246?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/TheBlueMatt/hovercard"/><img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="ajtowns" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/127186?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/ajtowns/hovercard"/></div></span><button class="Box-sc-g0xbh4-0 fmQaBv prc-Link-Link-85e08" data-muted="true" aria-label="Show 2 authors" data-testid="authors-dialog-anchor" muted="">2<!-- --> <!-- -->people</button><span class="pl-1">authored and</span><div data-testid="author-link" class="Box-sc-g0xbh4-0 iCHGgS"><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=sdaftuar" aria-label="commits by sdaftuar" data-hovercard-url="/users/sdaftuar/hovercard">sdaftuar</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R2tr7qot5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/7b999103e21509e1c2dec10f68e48744ffe90f55" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">7b99910</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R1str7qot5rab:-loading-announcement" aria-labelledby=":R4tr7qot5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for 7b99910" aria-hidden="true" id=":R4tr7qot5rab:">Copy full SHA for 7b99910</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-7b99910" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-7b99910" href="/bitcoin/bitcoin/blob/7b999103e21509e1c2dec10f68e48744ffe90f55/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-7b99910" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-7b99910" href="/bitcoin/bitcoin/tree/7b999103e21509e1c2dec10f68e48744ffe90f55" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li><li id=":Raot5rab:-list-view-node-:R3bqot5rab:" class="ListItem-module__listItem--kHali CommitRow-module__ListItem_0--PkFAi" tabindex="-1" aria-label="More information available below." data-testid="commit-row-item" data-commit-link="/bitcoin/bitcoin/commit/f34fa719cf33a51d11f1d2219cbe73ccff6fd697"><div class="Title-module__container--l9xi7 CommitRow-module__ListItemTitle_0--g9uVv"><h4 class="markdown-title Title-module__heading--upUxW CommitRow-module__ListItemTitle_0--g9uVv"><span class="Text__StyledText-sc-17v1xeu-0 hWqAbU TitleHeader-module__inline--rL27T Title-module__anchor--SyQM6 Title-module__markdown--KiFgL"><a data-pjax="true" title="Drop obsolete sigops comment This comment was confusing and incorrect when first added ("invalid rather than merely non-standard" has the opposite meaning of what is actually the case), and was also not updated after segwit with the correct variable names. Delete it since the code reads just fine on its own. Co-authored by: Anthony Towns <aj@erisian.com.au> Suhas Daftuar <sdaftuar@gmail.com>" class="color-fg-default" href="/bitcoin/bitcoin/commit/f34fa719cf33a51d11f1d2219cbe73ccff6fd697">Drop obsolete sigops comment</a></span></h4><span class="Title-module__trailingBadgesContainer--XGsbF"></span><button data-component="IconButton" type="button" data-testid="commit-row-show-description-button" aria-pressed="false" aria-expanded="false" class="prc-Button-ButtonBase-c50BI Button Button--iconOnly Button--invisible Button--small ml-1 prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":Re4rbqot5rab:-loading-announcement show-description-f34fa71" aria-labelledby="show-description-f34fa71"><svg aria-hidden="true" focusable="false" class="octicon octicon-ellipsis" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 5.75C0 4.784.784 4 1.75 4h12.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0 1 14.25 12H1.75A1.75 1.75 0 0 1 0 10.25ZM12 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2ZM7 8a1 1 0 1 0 2 0 1 1 0 0 0-2 0ZM4 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH" data-direction="s" aria-label="Show description for f34fa71" role="tooltip" aria-hidden="true" id="show-description-f34fa71">Show description for f34fa71</span></div><div class="px-1"></div><div class="MainContent-module__container--ry4iL"><div class="MainContent-module__inner--bU_tk"><div class="Description-module__container--b3n6F"><div class="Box-sc-g0xbh4-0 dpBUfI"><span class="AvatarStack__AvatarStackWrapper-sc-4pdg6v-0 hzFJAq pc-AvatarStack--three"><div class="Box-sc-g0xbh4-0 pc-AvatarStackBody" tabindex="0"> <img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="TheBlueMatt" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/649246?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/TheBlueMatt/hovercard"/><img data-component="Avatar" class="pc-AvatarItem prc-Avatar-Avatar-ZRS-m" alt="sdaftuar" width="16" height="16" style="--avatarSize-regular:16px" src="https://avatars.githubusercontent.com/u/7463573?v=4&size=32" data-testid="commit-stack-avatar" data-hovercard-url="/users/sdaftuar/hovercard"/></div></span><div data-testid="author-link" class="Box-sc-g0xbh4-0 iCHGgS"><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=TheBlueMatt" aria-label="commits by TheBlueMatt" data-hovercard-url="/users/TheBlueMatt/hovercard">TheBlueMatt</a></div><span class="pl-1">authored and</span><div data-testid="author-link" class="Box-sc-g0xbh4-0 iCHGgS"><a class="Box-sc-g0xbh4-0 jRhDJg prc-Link-Link-85e08" data-muted="true" muted="" href="/bitcoin/bitcoin/commits?author=sdaftuar" aria-label="commits by sdaftuar" data-hovercard-url="/users/sdaftuar/hovercard">sdaftuar</a></div><span class="pl-1">committed</span><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 irPhWZ irithh d-none d-sm-flex ml-1" width="60px"></div><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 fIQuDd irOdmh d-none d-sm-flex ml-2" width="20px"></div><div class="d-none d-sm-flex"></div></div></div></div></div><div class="MetadataContainer-module__container--lj6YE"><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx"></div><div class="Metadata-module__metadata--yvrod Metadata-module__secondary--zMgLx CommitRow-module__ListItemMetadata_0--MUr_4"><div class="Box-sc-g0xbh4-0 LoadingSkeleton-sc-695d630a-0 dNbsEP ihfxfT d-none d-sm-flex" width="62px"></div></div><div class="Metadata-module__metadata--yvrod Metadata-module__primary--cJgJU d-none d-sm-flex px-0 gap-2"><div class="d-flex"><span role="tooltip" aria-label="View commit details" id=":R2trbqot5rab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-s"><a class="Button--invisible Button--small Button text-mono" href="/bitcoin/bitcoin/commit/f34fa719cf33a51d11f1d2219cbe73ccff6fd697" variant="invisible" sx="[object Object]"><span class="Button-content"><span class="Button-label color-fg-muted">f34fa71</span></span></a></span><div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-describedby=":R1strbqot5rab:-loading-announcement" aria-labelledby=":R4trbqot5rab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="Tooltip__StyledTooltip-sc-e45c7z-0 jOyaRH CopyToClipboardButton-module__tooltip--Dq1IB" data-direction="s" aria-label="Copy full SHA for f34fa71" aria-hidden="true" id=":R4trbqot5rab:">Copy full SHA for f34fa71</span></div></div><span role="tooltip" aria-label="View code at this point" id="view-code-f34fa71" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="view-code-f34fa71" href="/bitcoin/bitcoin/blob/f34fa719cf33a51d11f1d2219cbe73ccff6fd697/src/validation.cpp" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-view-code"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg></a></span><span role="tooltip" aria-label="Browse repository at this point" id="browse-repo-f34fa71" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-sw"><a aria-labelledby="browse-repo-f34fa71" href="/bitcoin/bitcoin/tree/f34fa719cf33a51d11f1d2219cbe73ccff6fd697" class="Button Button--iconOnly Button--invisible Button--small" data-testid="commit-row-browse-repo"><svg aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></a></span></div></div><!--$!--><template></template><!--/$--></li></ul></div></div></div></div></div></div></div><h2 class="sr-only prc-Heading-Heading-6CmGO">Pagination</h2><div class="d-flex flex-justify-center mt-2"><div class="Box-sc-g0xbh4-0 prc-ButtonGroup-ButtonGroup-vcMeG"><div><a sx="[object Object]" aria-disabled="true" style="--button-color:primer.fg.disabled" type="button" tabindex="0" data-testid="pagination-prev-button" class="Box-sc-g0xbh4-0 cQAMJB prc-Button-ButtonBase-c50BI fgColor-accent text-normal" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-describedby=":R39rab:-loading-announcement" href="/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp?before=332c6134bb15384e5b91c631e821fe52a591d3bc+0"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x">Previous</span></span></a></div><div><a type="button" tabindex="0" data-testid="pagination-next-button" class="prc-Button-ButtonBase-c50BI fgColor-accent text-normal" data-loading="false" data-size="medium" data-variant="invisible" aria-describedby=":R59rab:-loading-announcement" href="/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp?after=332c6134bb15384e5b91c631e821fe52a591d3bc+34"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x">Next</span><span data-component="trailingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 fgColor-accent" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path></svg></span></span></a></div></div></div></div></div><div class="Box-sc-g0xbh4-0"></div></div></div></div></div> <!-- --> <script type="application/json" id="__PRIMER_DATA_:R0:__">{"resolvedServerColorMode":"day"}</script></div> </react-app> </div> </turbo-frame> </main> </div> </div> <footer class="footer pt-8 pb-6 f6 color-fg-muted p-responsive" role="contentinfo" > <h2 class='sr-only'>Footer</h2> <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap"> <div class="d-flex flex-items-center flex-shrink-0 mx-2"> <a aria-label="Homepage" title="GitHub" class="footer-octicon mr-2" href="https://github.com"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path> </svg> </a> <span> © 2025 GitHub, Inc. </span> </div> <nav aria-label="Footer"> <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3> <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading"> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to Terms","label":"text:terms"}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to privacy","label":"text:privacy"}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to security","label":"text:security"}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to status","label":"text:status"}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to docs","label":"text:docs"}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to contact","label":"text:contact"}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a> </li> <li class="mx-2" > <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{"location":"footer","action":"cookies","context":"subfooter","tag":"link","label":"cookies_link_subfooter_footer"}" > Manage cookies </button> </cookie-consent-link> </li> <li class="mx-2"> <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{"location":"footer","action":"dont_share_info","context":"subfooter","tag":"link","label":"dont_share_info_link_subfooter_footer"}" > Do not share my personal information </button> </cookie-consent-link> </li> </ul> </nav> </div> </footer> <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999" data-initial-cookie-consent-allowed="" data-cookie-consent-required="false"></ghcc-consent> <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> You can’t perform that action at this time. </div> <template id="site-details-dialog"> <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open> <summary role="button" aria-label="Close dialog"></summary> <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal"> <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div class="octocat-spinner my-6 js-details-dialog-spinner"></div> </details-dialog> </details> </template> <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;"> <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;"> </div> </div> <template id="snippet-clipboard-copy-button"> <div class="zeroclipboard-container position-absolute right-0 top-0"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> <template id="snippet-clipboard-copy-button-unpositioned"> <div class="zeroclipboard-container"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> </div> <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div> <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div> </body> </html>