{"content":{"title":"深入探索Solana交易的底层机制：从PoH到BPF执行","body":"欢迎回来！如果你阅读了我之前的[文章](https://tusharbhatia43.medium.com/exploring-solanas-consensus-what-makes-proof-of-stake-and-proof-of-history-so-fast-5e44aac81456)，关于 Solana 的历史证明 (PoH)，你应该知道 PoH 就像是后台经理，确保交易被时间戳记录并按照顺序进行。但是接下来发生了什么？Solana 是如何实际执行交易的？这个“BPF 加载器”到底是什么？编译器在哪里？\r\n\r\n今天，我们将深入了解在 Solana 上发送交易时实际上发生了什么。 从 PoH 到 BPF 加载器，我们将以易于理解的方式覆盖整个过程。让我们开始吧！\r\n\r\n## **1\\. Solana 交易生命周期：一切始于一次点击**\r\n\r\n想象一下，你正在给朋友发送 SOL、购买 NFT 或者交换代币。你点击 _发送_，接下来发生以下事情：\r\n\r\n**交易创建**：你指定发件人、接收者和任何指令（也许是一条消息，例如“这份是给咖啡的！”）。\r\n\r\n**历史证明 (PoH)**：PoH 为交易添加时间戳并对其进行排序，确保它按照正确的顺序被处理。[了解更多关于 PoH 的信息](https://docs.solana.com/proposals/poh)。\r\n\r\n**通过权益证明 (PoS) 进行验证**：Solana 的 **权益证明 (PoS)** 共识机制赋予验证者验证交易的能力。验证者根据其抵押的 SOL 数量被选择，通过检查签名并利用 PoH 的序列来确认交易的完整性。该双重系统使 Solana 能够在提供高安全性的同时保持超快的速度。[关于 PoS 的更多信息](https://docs.solana.com/cluster/stake-delegation-and-rewards)。\r\n\r\n##  **2\\. 背后发生了什么？**\r\n\r\n一旦验证，交易将移交给 Solana 的处理引擎。此时，Solana 的独特 **基于账户的模型** 就发挥作用了：\r\n\r\n• **账户作为状态机**：每个信息（从用户余额到智能合约数据）都存储在“账户”中。交易与这些账户交互，实时更新其状态。查看 Solana 的[账户模型](https://docs.solana.com/developing/programming-model/accounts)。\r\n\r\n• **并行处理**：Solana 的交易以并行的方式运行，使其能够同时处理成千上万的交易。与逐个处理交易的区块链不同，Solana 会将非重叠的交易分组同时处理。\r\n\r\n## **3\\. BPF 加载器：**\r\n\r\n如果 PoH 是保镖，那么 **BPF 加载器** 就是 Solana 厨房里的厨师，负责智能合约执行。以下是你需要知道的：\r\n\r\n• **什么是 BPF？** BPF（伯克利数据包过滤器）最初源于 Linux 用于网络数据包过滤。Solana 对其进行了调整，以有效地以资源友好的方式执行智能合约。[在这里了解更多关于 BPF 的信息](https://docs.solana.com/developing/programming-model/overview#berkeley-packet-filter)。\r\n\r\n• **BPF 加载器的角色**：Solana 将其智能合约编译成 BPF 字节码，然后由 BPF 加载器解释并运行。就像加载一个迷你程序，逐步执行每条指令。\r\n\r\n• **效率和安全性**：BPF 加载器隔离每个程序的执行，增强了安全性并保持低费用。由于其为速度而构建，BPF 加载器是 Solana 能够处理复杂应用程序而不降低速度的关键原因。\r\n\r\n## **4\\. 从头到尾：**\r\n\r\n让我们通过一个例子来将这一切整合在一起。\r\n\r\n假设你正在把代币转给朋友：\r\n\r\n**发起转账**：你点击 _发送_。交易指定了发件人、接收者和指令。\r\n\r\n**PoH 添加时间戳**：PoH 对交易进行排序。\r\n\r\n**验证者验证**：使用 PoS，验证者根据 PoH 的序列确认交易的详细信息。\r\n\r\n**使用 BPF 加载器进行执行**：BPF 加载器加载智能合约程序并执行，将代币从你的账户转移到你朋友的账户。\r\n\r\n**账户更新**：Solana 的账户模型记录交易并更新余额，使其成为正式交易！\r\n\r\n## **5\\. BPF 加载器对 Solana 的重要性**\r\n\r\nBPF 加载器不仅仅是一个执行者 - 它使 Solana 独具特色：\r\n\r\n• **多程序执行**：BPF 允许多个程序在单个交易中运行，这对于 DeFi 和复杂应用至关重要。\r\n\r\n• **低费用和高效率**：BPF 的优化执行保持了费用低廉，同时确保了速度。\r\n\r\n- **通过隔离实现安全性**：每个程序在隔离中运行，因此一个程序的问题不会影响其他程序。\r\n\r\n## **EVM 与 Solana 交易：快速比较**\r\n\r\n现在我们知道了 Solana 的交易是如何工作的，让我们与 EVM（以太坊虚拟机）区块链（如以太坊）处理交易的方式进行比较。这样，我们就能更好地了解是什么使 Solana 如此独特！\r\n\r\n**1\\. 执行环境：EVM 与 BPF 加载器**\r\n\r\n**EVM**：在基于 EVM 的区块链（如以太坊）中，智能合约是用 Solidity（或 Vyper）编写的，随后直接在 EVM 中运行，EVM 本质上是以太坊的智能合约引擎。交易一次只执行一笔，因此它们必须排队等候。并且，每笔交易需要根据其复杂性支付 gas（即费用）。这可能导致高费用，特别是在网络繁忙时。\r\n\r\n**Solana 的 BPF 加载器**：Solana 的程序（也称为智能合约）用 Rust 或 C 编写，然后编译成 BPF 字节码，由 **BPF 加载器** 解释并执行。这个系统是为超快速处理设计的，所以这是 Solana 费用保持低廉的重要原因。Solana 还以 **并行** 的方式处理交易，使其能够同时处理成千上万的交易，而不是 EVM 的单一排队方法。\r\n\r\n![](https://img.learnblockchain.cn/2025/03/09/16y2qEgtkiYWOiekRBbrX1w.png)\r\n\r\n**2\\. 顺序处理与并行处理**\r\n\r\n• **EVM**：EVM 顺序处理交易，就像是一条单车道的道路。每笔交易必须等上一笔完成后才能继续。这种方式在高峰时段可能导致瓶颈和高费用。\r\n\r\n• **Solana**：Solana 的并行处理就像是一条多车道的高速公路。不会与同一账户互动的交易可以同时处理，因此它能在不降低速度的情况下处理大量交易。这是 Solana 能够维持低费用和高速度的主要原因之一，即使在网络有很多用户的情况下。\r\n\r\n**3\\. 无状态与有状态程序**\r\n\r\n**EVM（有状态）**：在以太坊中，合约持有自己的数据和状态（内存），这可能很方便，但也会限制可扩展性。每笔交易直接修改这个“状态”，这意味着每个合约每次只能处理一个变更。如果你正在与一个流行的智能合约交互，请为潜在的拥堵做好准备。\r\n\r\n**Solana（无状态）**：Solana 采取不同的方法。程序是 **无状态** 的，意味着它们不自行存储数据。相反，所有数据和状态信息都保存在独立的“账户”中，程序与这些账户进行交互。这样的设计允许更多的灵活性，并实现了 Solana 的并行处理魔力，因为程序不必担心跟踪自己的状态 - 它们所需的一切读写都在外部。\r\n\r\n![](https://img.learnblockchain.cn/2025/03/09/1J8y0nUw0HCzXGvtm7dy1xQ.png)\r\n\r\n## **总结：**\r\n\r\n因此，从 PoH 保持事务有序到 BPF 加载器确保智能合约平稳运行，你可以看到 Solana 的设计注重速度和效率。每个部分：PoH、PoS 验证、账户和 BPF 加载器都在确保你的交易快速、安全和廉价方面发挥着重要作用。\r\n\r\n现在，我们在这里提到了账户，但 Solana 的账户和所有权系统是独特的，值得特别关注。敬请期待未来的文章，我们将深入解析 Solana 中账户和所有权的实际运作方式 - 因为理解这部分确实能连接整个系统。同时，如果你感兴趣，可以查看 [Solana 的文档](https://docs.solana.com/)，并随时在评论中提出问题！\r\n\r\n>- 原文链接： [tusharbhatia43.medium.co...](https://tusharbhatia43.medium.com/under-the-hood-of-solana-transactions-from-poh-to-bpf-execution-34206ce8441c)\r\n>- 登链社区 AI 助手，为大家转译优秀英文文章，如有翻译不通的地方，还请包涵～"},"author":{"user":"https://learnblockchain.cn/people/26960","address":null},"history":null,"timestamp":1741486057,"version":1}