LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > [Coinbase] 用户空间,对比特币核心的静态定义跟踪支持

[Coinbase] 用户空间,对比特币核心的静态定义跟踪支持

2021-08-31 wanbizu AI 来源:区块链网络

本报告更新了 Coinbase 加密社区基金赠款接受者 0xB10C 在其为期一年的比特币开发赠款的上半年一直致力于的工作。 这特别涵盖了他在用户空间、对比特币核心的静态定义跟踪支持方面的工作。

通过 0xB10C,Coinbase 比特币开发者赠款接受者

比特币协议规则的参考实现 Bitcoin Core 是与比特币网络交互使用最广泛的软件。 然而,对于大多数用户来说,比特币核心是一个黑匣子。 虽然可以通过 RPC 接口查询信息或在调试日志中搜索信息,但没有定义的接口用于实时洞察进程内部。 然而,一些用户可以从更多的可观察性中受益于他们的节点。 在生产中运行比特币核心的爱好者和公司希望将他们的节点包含在他们的实时监控中。 开发人员需要了解测试部署,以评估、审查、调试和基准测试更改。 研究人员希望观察和分析点对点网络上节点的行为。 处理大量比特币的交易所和其他服务希望及早发现攻击和其他异常情况。

使用用户空间窥视内部,静态定义的跟踪

Linux 内核中的 eBPF 技术可用于用户空间应用程序的可观察性。 该技术允许在 Linux 内核中运行一个小的沙盒程序,它可以连接到正在运行的进程中的预定义跟踪点。 一旦挂钩到跟踪点,每次到达跟踪点时都会执行程序。 跟踪点可以传递数据,例如应用程序状态。 跟踪脚本可以进一步处理数据。 在用户空间应用程序中挂钩跟踪点的做法被称为用户空间,静态定义的跟踪 (USDT)。 例如,这些跟踪点也包含在 PostgreSQL、MySQL、Python、NodeJS、Ruby、PHP 以及 libc、libpthread 和 libvirt 等库中。

比特币核心用户可以利用静态跟踪点,希望对其节点有更多的了解。 添加 USDT 支持不需要侵入性更改,也无需编写自定义工具。 不使用时,跟踪点的性能影响最小甚至不存在。 只有特权进程才能挂钩到跟踪点,不会向主机上的其他进程泄漏信息。 这些属性使用户空间静态定义跟踪非常适合比特币核心。

例如,我在 Bitcoin Core 的点对点消息处理代码中放置了两个跟踪点。 对于每个入站和出站 P2P 消息,跟踪点传递有关对等方、连接和消息的信息。 这些数据可以通过跟踪脚本进行过滤和处理。 作为演示,我构建了一个 P2P 监视器,可以实时显示两个对等方之间的通信。 用户可以在 Bitcoin Core 存储库的 contrib/tracing/ 目录中与其他 USDT 示例一起找到此脚本。

身体[data-twttr-rendered=”true”] {背景颜色:透明;}.twitter-tweet {边距:自动!重要;}

函数 notifyResize(height) {height = height ? 高度:document.documentElement.offsetHeight; var 调整大小 = false; if (window.donkey && donkey.resize) {donkey.resize(height);resized = true;}if (parent && parent._resizeIframe) {var obj = {iframe: window.frameElement, height: height}; parent._resizeIframe(obj); resized = true;}if (window.location && window.location.hash === “#amp=1” && window.parent && window.parent.postMessage) {window.parent.postMessage({sentinel: “amp”,类型:“嵌入大小”,高度:高度},“*”);}if(window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.resize){window.webkit.messageHandlers.resize.postMessage(高度); resized = true;}return resized;}twttr.events.bind(‘rendered’, function (event) {notifyResize();}); twttr.events.bind(‘resize’, function (event) {notifyResize();}); if (parent && parent._resizeIframe) {var maxWidth = parseInt(window.frameElement.getAttribute(“width”)); if ( 500

用户空间的用例,静态定义的跟踪

我列出了一些我考虑过或研究过的用户空间、静态定义跟踪的用例。 由于仅合并了三个跟踪点,开发人员有足够的空间来添加新的跟踪点并利用跟踪脚本发挥创意。 问题 #20981 包含有关可以实施的其他跟踪点的讨论和想法。

研究人员和开发人员可以使用 P2P 消息跟踪点来实时监控 P2P 网络异常。 一个例子可能是检测最近在此 bitcointalk.org 帖子中报告的 addr 消息泛滥??。 这些消息宣布了不属于比特币网络节点的随机 IP 地址。 Grundmann 和 Baumstark 已经详细介绍了洪水。 他们讨论了攻击者可以获得连接对等点的数量并了解节点正在侦听的其他地址,包括 Tor 地址。 这会降低节点运营商的隐私。 重要的是要对这些攻击保持警惕,讨论它们,然后在需要时对它们做出反应。

同样,我一直在用跟踪点检测比特币核心网络地址管理器。 addrman 会跟踪节点建立的潜在出站对等连接的八卦网络地址。 它旨在抵御 Eclipse 攻击,在这种攻击中,节点仅与攻击者控制的对等点建立连接。 攻击者可以选择向节点提供哪些信息,从而实现双花攻击。 当与其他数据结合时,有关 addrman 中地址的信息可能有助于检测日食攻击的累积。

此外,这些 addrman 跟踪点在调试和代码审查期间会很有帮助。 为了展示这一点,我构建了一个工具,该工具根据提交给跟踪点的数据将 addrman 数据结构中的地址可视化。

身体[data-twttr-rendered=”true”] {背景颜色:透明;}.twitter-tweet {边距:自动!重要;}

函数 notifyResize(height) {height = height ? 高度:document.documentElement.offsetHeight; var 调整大小 = false; if (window.donkey && donkey.resize) {donkey.resize(height);resized = true;}if (parent && parent._resizeIframe) {var obj = {iframe: window.frameElement, height: height}; parent._resizeIframe(obj); resized = true;}if (window.location && window.location.hash === “#amp=1” && window.parent && window.parent.postMessage) {window.parent.postMessage({sentinel: “amp”,类型:“嵌入大小”,高度:高度},“*”);}if(window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.resize){window.webkit.messageHandlers.resize.postMessage(高度); resized = true;}return resized;}twttr.events.bind(‘rendered’, function (event) {notifyResize();}); twttr.events.bind(‘resize’, function (event) {notifyResize();}); if (parent && parent._resizeIframe) {var maxWidth = parseInt(window.frameElement.getAttribute(“width”)); if ( 500

Prometheus 指标导出器还可以在跟踪点之上构建,而无需在 Bitcoin Core 中添加额外代码。 已经存在基于 RPC 的 Prometheus 导出器和像 Statoshi 这样的项目。 然而,基于 RPC 的导出器受限于通过 RPC 接口公开的信息,而 Statoshi 是一个很大的补丁集,需要在每个比特币核心版本上进行维护。 我发布了一个基于 USDT 的实验性导出器,称为 bitcoind-observer,它连接到三个当前合并的跟踪点并以 Prometheus 格式提供指标。 当前运行使用 USDT 支持编译的比特币核心节点的每个人都可以使用导出器。 bitcoind.observer 上提供了一个演示。

已经存在的跟踪点验证:block_connected 可用于对块验证进行基准测试。 例如,这允许比较不同补丁之间的初始块下载性能,并有助于检测性能改进和回归。 例如,bitcoinperf 项目可能会受益于此类跟踪点。 我已经使用跟踪点对 Martin Ankerls 拉取请求 #22702 进行基准测试。 如果合并,他提议的更改将导致显着的块验证加速和内存使用量的减少。

下一步

我将收集有关跟踪点的更多想法,并将它们与示例跟踪脚本和更多工具一起实现。 这还将涉及与其他比特币和比特币核心开发人员就哪些跟踪点可能对他们的项目有所帮助进行沟通。 一个例子是 Antoine Riard 的跨层异常检测看门狗,他最初提议将其作为比特币核心的一个新的内部模块。 但是,可以通过挂钩到跟踪点来收集许多所需的事件和指标。 这意味着看门狗可以是一个外部运行时,这将加快看门狗的开发,并且在比特币核心方面需要更少的代码和维护。

如果一切按计划进行,预计在 2022 年初发布的 v23.0 版 Bitcoin Core 将包括第一组跟踪点。 一个目标是默认在发布版本中启用 USDT 支持,这仍然需要一些工作。 此外,tracepoint API 应该是半稳定的,因此需要测试。

简而言之:我一直在向比特币核心添加跟踪点,用户可以连接到这些跟踪点以深入了解内部状态。 跟踪点基于 Linux 内核技术,不需要侵入性更改或自定义工具。 基础工作已完成。 现在可以添加更多跟踪点,并且可以编写工具。

Coinbase 正在正式寻求我们的 2021 年开发者补助金申请,重点是直接为区块链代码库做出贡献的区块链开发者或制作白皮书的研究人员。 在此处了解有关申请申请的更多信息。

用户空间,对比特币核心的静态定义跟踪支持最初发布在媒体上的 Coinbase 博客中,人们通过突出显示和回应这个故事来继续对话。

>> 在 Coinbase 上查看

加入我们的 Telegram

在推特上关注我们

在 Facebook 上关注我们

帖子 [Coinbase] 用户空间,对比特币核心的静态定义跟踪支持首先出现在 AZCoin 新闻上。

—-

原文链接:https://azcoinnews.com/coinbase-userspace-statically-defined-tracing-support-for-bitcoin-core.html

原文作者:Coinbase News

编译者/作者:wanbizu AI

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...