<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>aaa (brooke)</title>
    <link>https://soldev.cn/aaa</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Jito 推出的三明治攻击缓解机制与 Demo 示例</title>
      <description>&lt;h2 id="Jito 推出的三明治攻击缓解机制与 Demo 示例"&gt;Jito 推出的三明治攻击缓解机制与 Demo 示例&lt;/h2&gt;
&lt;p&gt;在两个月前，Jito 推出了一个新特性，用于缓解三明治攻击，而无需使用投票账户方法。这一机制的推出标志着 Jito 在提高交易安全性方面迈出了重要一步。为此，我编写了一个 &lt;a href="https://github.com/Red-T007/anti-mev-tx-demo-jito" rel="nofollow" target="_blank" title=""&gt;Demo 仓库&lt;/a&gt;，展示了如何使用这一机制，并提供了相关示例。&lt;/p&gt;
&lt;h2 id="Jito 的三明治攻击缓解机制"&gt;Jito 的三明治攻击缓解机制&lt;/h2&gt;&lt;h3 id="机制简介"&gt;机制简介&lt;/h3&gt;
&lt;p&gt;Jito 通过新增一个特殊格式的账户来实现三明治攻击的缓解。其基本规则如下：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;在 Solana 交易中，添加任何有效的 Solana 公钥，并确保该公钥以 &lt;code&gt;jitodontfront&lt;/code&gt; 开头。例如：&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;jitodontfront111111111111111111111111111111&lt;/code&gt; 或&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jitodontfront111111111111111111111111111123&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;任何包含 &lt;code&gt;jitodontfront&lt;/code&gt; 账户的交易都将被区块引擎拒绝，除非该交易出现在 Bundle 中的第一位（索引 0）。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;该账户不需要在链上存在，但必须是一个有效的公钥。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;建议将该账户标记为只读，以优化处理速度。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="允许的 Bundle 模式"&gt;允许的 Bundle 模式&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;[tx_with_dont_front, tip]&lt;/li&gt;
&lt;li&gt;[tx_with_dont_front, arbitrage, tip]&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="不允许的 Bundle 模式"&gt;不允许的 Bundle 模式&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;[tip, tx_with_dont_front]&lt;/li&gt;
&lt;li&gt;[txA_with_dont_front, txB_with_dont_front]&lt;/li&gt;
&lt;li&gt;[txA_with_dont_front, txB_with_dont_front, tip]&lt;/li&gt;
&lt;li&gt;[trade, tx_with_dont_front, arbitrage, tip]&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="重要提示"&gt;重要提示&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;该账户不需要在链上存在，但必须是一个有效的公钥。&lt;/li&gt;
&lt;li&gt;将该账户标记为只读以优化处理速度。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可选：为您的应用程序使用 &lt;code&gt;jitodontfront&lt;/code&gt; 的唯一变体（注意：使用您自己的公钥）。例如：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;jitodontfront111111111114511111111111111123&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jitodontfront111111111111234565432123456782&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;该解决方案支持 Jito 的 &lt;code&gt;sendBundle&lt;/code&gt; 和 &lt;code&gt;sendTransaction&lt;/code&gt; 接口，而不像投票账户方法那样不兼容。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;支持 Address Lookup Tables（ALT）。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="示例"&gt;示例&lt;/h3&gt;
&lt;p&gt;您可以查看以下使用该保护机制的示例 Bundle：
&lt;a href="https://explorer.jito.wtf/bundle/0748de4fd7a60c419da9fb09781157ab08e7b0adfbd664193c91f51e49af5491" rel="nofollow" target="_blank" title=""&gt;Jito Bundle Explorer 示例&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="Demo 仓库"&gt;Demo 仓库&lt;/h2&gt;
&lt;p&gt;为了展示这个机制的实现，我写了一个 &lt;a href="https://github.com/Red-T007/anti-mev-tx-demo-jito" rel="nofollow" target="_blank" title=""&gt;Demo 仓库&lt;/a&gt;，其中包含了一个基于 Jito Bundle 交易功能的演示，并实现了三明治攻击保护机制。您可以通过此仓库学习如何将这一新特性应用到 Solana 交易中。&lt;/p&gt;
&lt;h2 id="免责声明"&gt;免责声明&lt;/h2&gt;
&lt;p&gt;尽管该特性可以帮助减少三明治攻击的发生，但并不能保证完全解决所有类型的交易排序问题，特别是第三方排序问题。此外，此功能仅适用于区块引擎，无法应用于其他软件。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;此机制的推出为 Solana 生态系统中的交易提供了更高的安全性和防护，尤其是在去中心化金融（DeFi）交易中防止恶意攻击。&lt;/p&gt;</description>
      <author>aaa</author>
      <pubDate>Mon, 02 Jun 2025 21:23:06 +0800</pubDate>
      <link>https://soldev.cn/topics/184</link>
      <guid>https://soldev.cn/topics/184</guid>
    </item>
    <item>
      <title>一个为所有对学习和构建 Solana 感兴趣的人提供的全面、真实的资源中心</title>
      <description>&lt;p&gt;欢迎阅读&lt;a href="https://github.com/helius-labs/solana-awesome" rel="nofollow" target="_blank" title=""&gt;原文&lt;/a&gt;翻译&lt;a href="https://github.com/brooke007/solana-awesome-zh" rel="nofollow" target="_blank"&gt;https://github.com/brooke007/solana-awesome-zh&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="solana-awesome"&gt;solana-awesome&lt;/h2&gt;
&lt;p&gt;一个为所有对学习和构建 Solana 感兴趣的人提供的全面、真实的资源中心&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#solana-%E7%AE%80%E4%BB%8B" title=""&gt;Solana 简介&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#solana-%E5%9F%BA%E7%A1%80" title=""&gt;Solana 基础&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#%E5%BC%80%E5%8F%91%E8%80%85%E8%B5%84%E6%BA%90" title=""&gt;开发者资源&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E9%80%9A%E7%94%A8%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%BA%90" title=""&gt;通用学习资源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#anchor-%E5%BC%80%E5%8F%91" title=""&gt;Anchor 开发&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E9%9D%9E-anchor-%E7%A8%8B%E5%BA%8F%E5%BC%80%E5%8F%91" title=""&gt;非 Anchor 程序开发&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%B5%8B%E8%AF%95%E7%A8%8B%E5%BA%8F" title=""&gt;测试程序&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E7%A8%8B%E5%BA%8F%E5%AE%89%E5%85%A8" title=""&gt;程序安全&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#crates-%E5%92%8C-sdks" title=""&gt;Crates 和 SDK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7" title=""&gt;开发工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%B5%8F%E8%A7%88%E5%99%A8" title=""&gt;浏览器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%80%A7%E8%83%BD%E4%BB%AA%E8%A1%A8%E6%9D%BF" title=""&gt;性能仪表板&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%B8%B8%E6%88%8F" title=""&gt;游戏&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%8E%8B%E7%BC%A9" title=""&gt;压缩&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#solana-%E7%A7%BB%E5%8A%A8%E7%AB%AF" title=""&gt;Solana 移动端&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#solana-%E6%94%AF%E4%BB%98" title=""&gt;Solana 支付&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#%E9%AA%8C%E8%AF%81%E8%80%85" title=""&gt;验证者&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#agave-%E5%AE%A2%E6%88%B7%E7%AB%AF" title=""&gt;Agave 客户端&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#firedancer" title=""&gt;Firedancer&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%9B%B4%E6%96%B0" title=""&gt;更新&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E7%BB%93%E6%9E%84" title=""&gt;结构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#%E8%BF%90%E8%90%A5-%E7%BB%B4%E6%8A%A4%E5%92%8C%E7%BB%8F%E6%B5%8E%E5%AD%A6" title=""&gt;运营、维护与经济学&lt;/a&gt;&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%A7%82%E7%82%B9%E5%92%8C%E6%96%87%E7%AB%A0" title=""&gt;观点和文章&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#solana-%E7%9A%84%E6%9C%AA%E6%9D%A5" title=""&gt;Solana 的未来&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="Solana 简介"&gt;Solana 简介&lt;/h2&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 架构新手指南&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Anvit Mangal&lt;/td&gt;
&lt;td&gt;&lt;a href="https://anvit.hashnode.dev/a-dummys-guide-to-solana-architecture" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana 架构的总体概述&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;那么 Solana 到底是怎么回事&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;hana&lt;/td&gt;
&lt;td&gt;&lt;a href="https://2501babe.github.io/posts/solana101.html" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;对 Solana 基础知识的一种有趣的视角，适合技术读者&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;在 Solana 上编程 - 简介&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Paul X&lt;/td&gt;
&lt;td&gt;&lt;a href="https://paulx.dev/blog/2021/01/14/programming-on-solana-an-introduction/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;对在原生 Rust 中进行 Solana 编程的介绍&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana：单体&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Ceteris&lt;/td&gt;
&lt;td&gt;&lt;a href="https://members.delphidigital.io/reports/solana-the-monolith#more-than-just-scaling-with-hardware-bda3" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Delphi Digital 对 Solana 的全面深入研究&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana：工作原理 - Solana 协议的执行概述&lt;/td&gt;
&lt;td&gt;报告&lt;/td&gt;
&lt;td&gt;Lostin&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/solana-executive-overview" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana 核心协议的整体概述。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 编程模型：Solana 开发简介&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xIchigo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/the-solana-programming-model-an-introduction-to-developing-on-solana" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;关于 Solana 架构、账户模型和交易的介绍性文章&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h2 id="Solana 基础"&gt;Solana 基础&lt;/h2&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;使 Solana 成为第一个 Web 规模区块链的 8 项创新&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Anatoly Yakovenko&lt;/td&gt;
&lt;td&gt;&lt;a href="https://medium.com/solana-labs/7-innovations-that-make-solana-the-first-web-scale-blockchain-ddc50b1defda" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana &lt;u&gt;modus operandi&lt;/u&gt; 的八项关键技术概述&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 共识&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Ryan Chern&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/consensus-on-solana" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一篇阐明历史证明在 Tower BFT（Solana 的共识机制）的插槽中的作用的文章&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 交易的生命周期&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Umbra Research&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.umbraresearch.xyz/writings/lifecycle-of-a-solana-transaction" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana 运行时如何处理交易以及 Solana 和 Ethereum 上的交易执行之间的差异的概述&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 上的本地费用市场&lt;/td&gt;
&lt;td&gt;推文&lt;/td&gt;
&lt;td&gt;7Layer&lt;/td&gt;
&lt;td&gt;&lt;a href="https://x.com/7LayerMagik/status/1615569374647287808" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个解释 Solana 区块空间结构的 Twitter 帖子，阐明了费用市场是什么、它们如何工作以及为什么它们有用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;优先级费用：了解 Solana 的交易费用机制&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xIchigo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/priority-fees-understanding-solanas-transaction-fee-mechanics" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解 Solana 的交易费用机制、优先级费用以及如何以编程方式实现它们&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 费用&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Umbra Research&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.umbraresearch.xyz/writings/solana-fees-part-1" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解当今 Solana 的费用如何运作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 内部原理&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Sec3&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.sec3.dev/blog/solana-internals-part-1-what-are-the-native-on-chain-programs-and-why-do-they-matter" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个深入探讨 Solana 内部原理的 4 部分系列，适合技术读者&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 节点 - Solana RPC、验证器和 RPC 提供商入门&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Mert Mumtaz&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/solana-nodes-a-primer-on-solana-rpcs-validators-and-rpc-providers" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解 Solana 节点、不同类型、它们的重要性以及顶级 RPC 提供商&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 权益证明 + 历史证明入门&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Shinobi Systems&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.shinobi-systems.com/primer.html" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;深入探讨历史证明 (PoH) 是什么以及它是如何工作的，适合技术读者&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 的海湾流：无内存池，问题多多&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Lostin&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/solana-gulf-stream" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;对海湾流（Solana 的无内存池交易转发协议）的探索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;股权加权服务质量：您需要了解的一切&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xIchigo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/stake-weighted-quality-of-service-everything-you-need-to-know" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解 SWQoS、Solana 如何处理交易以及验证器和股权日益增长的重要性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 白皮书&lt;/td&gt;
&lt;td&gt;白皮书&lt;/td&gt;
&lt;td&gt;Anatoly Yakovenko&lt;/td&gt;
&lt;td&gt;&lt;a href="https://solana.com/solana-whitepaper.pdf" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana 的圣经文本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;关于 Solana 本地费用市场的真相&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Lostin&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/solana-local-fee-markets" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;本文对 Solana 当前本地费用市场的状态以及需要改进的地方进行了通俗易懂的分析。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Turbine：Solana 上的区块传播&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Ryan Chern&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/turbine-block-propagation-on-solana" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解 Solana 上的区块传播、它与 Ethereum 的比较以及区块传播和数据可用性的未来研究途径&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;了解 Solana 上的 Slot、Block 和 Epoch&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Mert Mumtaz&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/solana-slots-blocks-and-epochs" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;深入探讨 Solana Slot、Block 和 Epoch 如何协同工作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 代币扩展入门&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Yash Agarwal&lt;/td&gt;
&lt;td&gt;&lt;a href="https://blog.superteam.fun/p/primer-on-solanas-token-extensions" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;深入探讨 Solana 令牌扩展 (Token 2022)，探索它们的用例，以及它们为何可能成为 Solana 令牌化叙事的下一个主要催化剂。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h2 id="开发者资源"&gt;开发者资源&lt;/h2&gt;&lt;h3 id="通用学习资源"&gt;通用学习资源&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;60 天 Solana&lt;/td&gt;
&lt;td&gt;教程&lt;/td&gt;
&lt;td&gt;Rareskills&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.rareskills.io/solana-tutorial" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个为具有 Ethereum 或 EVM 开发的初级或中级背景的工程师设计的 60 天 Solana 课程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;从头开始创建一个 Solana dApp&lt;/td&gt;
&lt;td&gt;教程&lt;/td&gt;
&lt;td&gt;Loris Leiva&lt;/td&gt;
&lt;td&gt;&lt;a href="https://lorisleiva.com/create-a-solana-dapp-from-scratch" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个关于构建简化版 Twitter 作为 Solana dApp 的系列&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rust + Solana 高级开发课程&lt;/td&gt;
&lt;td&gt;教程&lt;/td&gt;
&lt;td&gt;ICB&lt;/td&gt;
&lt;td&gt;&lt;a href="https://careerbooster.io/courses/rust-solana-advance-development-course" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个免费的高级 Solana 开发课程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana Bootcamp&lt;/td&gt;
&lt;td&gt;视频&lt;/td&gt;
&lt;td&gt;Solana Foundation&lt;/td&gt;
&lt;td&gt;&lt;a href="https://youtu.be/0P8JeL3TURU?si=jl41rZ5Nrfx3O-Im" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个视频海盗主题训练营，用于快速掌握 Solana 编程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana Bytes&lt;/td&gt;
&lt;td&gt;视频&lt;/td&gt;
&lt;td&gt;Solana Foundation&lt;/td&gt;
&lt;td&gt;&lt;a href="https://youtu.be/pRYs49MqapI?si=PlKGMeGdJI7y3EdF" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一系列解释核心开发和 Solana 概念的短视频&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 课程&lt;/td&gt;
&lt;td&gt;教程&lt;/td&gt;
&lt;td&gt;freeCodeCamp&lt;/td&gt;
&lt;td&gt;&lt;a href="https://web3.freecodecamp.org/solana" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;旨在作为 Solana 开发介绍的引导式互动项目&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 教程&lt;/td&gt;
&lt;td&gt;视频&lt;/td&gt;
&lt;td&gt;Solana Foundation&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.youtube.com/@SolanaTutorials/videos" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;关于 Solana 和 Anchor 的综合视频&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SolDev 的 Solana 开发课程&lt;/td&gt;
&lt;td&gt;教程&lt;/td&gt;
&lt;td&gt;Various&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.soldev.app/course" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个学习 Solana 开发的完整课程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana Cookbook&lt;/td&gt;
&lt;td&gt;文档&lt;/td&gt;
&lt;td&gt;Various&lt;/td&gt;
&lt;td&gt;&lt;a href="https://solanacookbook.com/#contributing" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个开发者资源，提供在 Solana 上构建的基本概念和参考资料&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="Anchor 开发"&gt;Anchor 开发&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anchor 简介：构建 Solana 程序的初学者指南&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xIchigo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/an-introduction-to-anchor-a-beginners-guide-to-building-solana-programs" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;学习您需要知道的一切，以开始使用 Anchor 在 Solana 上进行构建。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anchor&lt;/td&gt;
&lt;td&gt;文档&lt;/td&gt;
&lt;td&gt;Coral&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/coral-xyz/anchor" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Anchor 的官方文档，适用于 Solana 的 Sealevel 运行时框架。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;使用 React 和 Anchor 的全栈 Solana 开发&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Solana 基金会&lt;/td&gt;
&lt;td&gt;&lt;a href="https://solana.com/developers/guides/getstarted/full-stack-solana-development" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;逐步演示如何构建、测试和部署一个 Anchor 程序和 React 前端。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;开始使用 Anchor 框架&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Solana 基金会&lt;/td&gt;
&lt;td&gt;&lt;a href="https://solana.com/developers/guides/getstarted/intro-to-anchor" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;介绍 Anchor，涵盖一个简单程序、IDL 和 TypeScript 客户端。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anchor / Solana 开发简介&lt;/td&gt;
&lt;td&gt;视频&lt;/td&gt;
&lt;td&gt;Harry Papacharissiou, Chainlink&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.youtube.com/live/Ru-ywR7rtgY?si=eLjKys3tkrehmKzJ" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;适合初学者的 Solana 和 Anchor 开发简介。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Poseidon&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Turbin3&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Turbin3/poseidon" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;转换 Solana 程序的翻译器，将其从 TypeScript 转换为 Anchor。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 智能合约教程：使用 Anchor 框架&lt;/td&gt;
&lt;td&gt;视频&lt;/td&gt;
&lt;td&gt;Josh's DevBox&lt;/td&gt;
&lt;td&gt;&lt;a href="https://youtu.be/CmG5_sIas1Q?si=oM19MuJB_x0pTV64" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;介绍 Anchor，属于 &lt;a href="https://youtube.com/playlist?list=PL53JxaGwWUqCr3xm4qvqbgpJ4Xbs4lCs7&amp;amp;amp;amp;amp;si=Kc1EqSTxlH8f7zob" rel="nofollow" target="_blank" title=""&gt;“Solana 开发教程”系列&lt;/a&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anchor 书籍&lt;/td&gt;
&lt;td&gt;文档&lt;/td&gt;
&lt;td&gt;Coral&lt;/td&gt;
&lt;td&gt;&lt;a href="https://book.anchor-lang.com/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一本入门书籍，帮助您开始学习 Anchor。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="非 Anchor 程序开发"&gt;非 Anchor 程序开发&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pinocchio&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Anza&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/anza-xyz/pinocchio" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;创建没有依赖项的 Solana 程序。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Steel&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Regolith Labs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/regolith-labs/steel" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana 智能合约框架。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="测试程序"&gt;测试程序&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 程序测试指南&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xIchigo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/a-guide-to-testing-solana-programs" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解如何测试 Solana 程序，从理论到实际示例。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bankrun&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Kevin Heavey&lt;/td&gt;
&lt;td&gt;&lt;a href="https://kevinheavey.github.io/solana-bankrun/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;为 Solana 程序编写的轻量级、灵活的测试框架，使用 Node.js。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LiteSVM&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;LiteSVM 团队&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/LiteSVM/litesvm" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;快速、轻量级的测试库，创建针对程序开发者优化的进程内 Solana 虚拟机。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mollusk&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Joe Caulfield&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/buffalojoec/mollusk" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;小巧快速的 SVM 程序测试工具。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;solana-program-test&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Anza&lt;/td&gt;
&lt;td&gt;&lt;a href="https://crates.io/crates/solana-program-test" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个基于 Rust 的测试框架，围绕 BanksClient 进行开发。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;solana-test-framework&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Halborn&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/halbornteam/solana-test-framework" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Halborn 开发的 &lt;strong&gt;solana-program-test&lt;/strong&gt; 的扩展。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;使用 Anchor 进行测试&lt;/td&gt;
&lt;td&gt;视频&lt;/td&gt;
&lt;td&gt;Harry Papacharissiou, Chainlink&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.youtube.com/live/_9xS3ZvDIIU?si=YNJnfEMlGCKRFT6W" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;在 Chainlink 2022 春季黑客马拉松中进行的关于测试 Anchor 程序的直播。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="程序安全"&gt;程序安全&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 程序安全的穿越指南&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xIchigo, bl0ckpain&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/a-hitchhikers-guide-to-solana-program-security" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解 Solana 程序安全以及如何缓解常见漏洞。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sealevel 攻击&lt;/td&gt;
&lt;td&gt;GitHub 仓库&lt;/td&gt;
&lt;td&gt;Coral&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/coral-xyz/sealevel-attacks" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;常见的针对 Solana 编程模型的攻击示例以及使用 Anchor 避免它们的推荐示例。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 审计和安全资源&lt;/td&gt;
&lt;td&gt;GitHub 仓库&lt;/td&gt;
&lt;td&gt;0xsanny&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/0xsanny/solsec" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;用于研究 Solana 智能合约安全、审计和漏洞的资源合集。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana：审计师的入门介绍&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;OtterSec&lt;/td&gt;
&lt;td&gt;&lt;a href="https://osec.io/blog/2022-03-14-solana-security-intro" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;关于 Solana 的安全性，探讨基础运行时环境、安全边界和影响的安全导论。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 智能合约：常见陷阱及如何避免&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Neodyme&lt;/td&gt;
&lt;td&gt;&lt;a href="https://neodyme.io/en/blog/solana_common_pitfalls/#intro" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;关于常见 Solana 安全陷阱及其缓解措施的简要介绍。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="Crates 和 SDKs"&gt;Crates 和 SDKs&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;helius&lt;/td&gt;
&lt;td&gt;Crate&lt;/td&gt;
&lt;td&gt;Helius&lt;/td&gt;
&lt;td&gt;&lt;a href="https://crates.io/crates/helius" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个异步 Helius Rust SDK，用于构建 Solana 的未来。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;helius-sdk&lt;/td&gt;
&lt;td&gt;SDK&lt;/td&gt;
&lt;td&gt;Helius&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.npmjs.com/package/helius-sdk/v/latest" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个 Helius Node.js SDK，用于构建 Solana 的未来。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;solana-program&lt;/td&gt;
&lt;td&gt;Crate&lt;/td&gt;
&lt;td&gt;Anza&lt;/td&gt;
&lt;td&gt;&lt;a href="https://crates.io/crates/solana-program" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;所有 Solana 链上 Rust 程序的基础库。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;solana-sdk&lt;/td&gt;
&lt;td&gt;Crate&lt;/td&gt;
&lt;td&gt;Anza&lt;/td&gt;
&lt;td&gt;&lt;a href="https://crates.io/crates/solana-sdk" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;官方 Solana SDK，用于用 Rust 编写客户端应用程序。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href="/solana" class="user-mention" title="@solana"&gt;&lt;i&gt;@&lt;/i&gt;solana&lt;/a&gt;/web3.js&lt;/td&gt;
&lt;td&gt;SDK&lt;/td&gt;
&lt;td&gt;Anza&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.npmjs.com/package/@solana/web3.js/v/latest" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个为 Solana 构建的 JavaScript 客户端，基于 Solana JSON RPC API。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="开发工具"&gt;开发工具&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bubblegum&lt;/td&gt;
&lt;td&gt;程序&lt;/td&gt;
&lt;td&gt;Metaplex&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/metaplex-foundation/mpl-bubblegum" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;创建和管理 Metaplex 压缩 NFT。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Builderz dApp Scaffold&lt;/td&gt;
&lt;td&gt;工具&lt;/td&gt;
&lt;td&gt;Builderz Labs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/builderz-labs/builderz-solana-dapp-scaffold" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个开源的 Next.js Solana dApp 脚手架。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Builderz xNFT Scaffold&lt;/td&gt;
&lt;td&gt;工具&lt;/td&gt;
&lt;td&gt;Builderz Labs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/builderz-labs/builderz-xNFT-scaffold-next" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个开源的 Next.js Solana xNFT 背包脚手架。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cNFT 垃圾邮件过滤器&lt;/td&gt;
&lt;td&gt;工具&lt;/td&gt;
&lt;td&gt;Solarnius&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/filtoor/cnft-spam-filter" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个开源、轻量和可移植的 cNFT 垃圾邮件分类器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;create-solana-dapp&lt;/td&gt;
&lt;td&gt;工具&lt;/td&gt;
&lt;td&gt;Solana 基金会&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/solana-developers/create-solana-dapp" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;创建 Solana dApps 的 CLI。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dreamcast&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Joey Meere&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/joeymeere/dreamcast" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;在几分钟内获取和交互 Anchor 程序。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gill&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Solana 基金会&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/solana-foundation/gill" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;用于与 Solana 区块链交互的 JavaScript/TypeScript 客户端库。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kite&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Helius&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/helius-labs/kite" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;现代 TypeScript 框架，适用于 &lt;a href="/solana" class="user-mention" title="@solana"&gt;&lt;i&gt;@&lt;/i&gt;solana&lt;/a&gt;/web3.js 2.0。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kinobi&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Metaplex&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/metaplex-foundation/kinobi" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;为您的 Solana 程序生成强大的客户端。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lighthouse&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Jac0xb&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Jac0xb/lighthouse" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana 断言协议。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Metaboss&lt;/td&gt;
&lt;td&gt;工具&lt;/td&gt;
&lt;td&gt;Metafrost&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/samuelvanderwaal/metaboss" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Metaplex NFT 标准的瑞士军刀工具。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PubKey Link&lt;/td&gt;
&lt;td&gt;工具&lt;/td&gt;
&lt;td&gt;Beeman&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/pubkeyapp/pubkey-link" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;基于 Solana 的免费开源 Discord 验证。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PubKey Stack&lt;/td&gt;
&lt;td&gt;工具&lt;/td&gt;
&lt;td&gt;Beeman&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/pubkeyapp/pubkey-stack" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个用于使用 PubKey 堆栈生成应用程序的起始工具。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shank&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Metaplex&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/metaplex-foundation/shank" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;从 Solana Rust 合同中提取 IDL。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skeet&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Skeet Dev&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/elsoul/skeet" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个开源的 TypeScript 无服务器框架。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solita&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Metaplex&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/metaplex-foundation/solita" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana IDL 到 API 生成器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sol4k&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Sasha Shpota&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sol4k/sol4k" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;用于 Solana 的 Kotlin 客户端，可与 Java 或任何其他 JVM 语言以及 Android 一起使用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Squads CLI&lt;/td&gt;
&lt;td&gt;工具&lt;/td&gt;
&lt;td&gt;Squads&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Squads-Protocol/squads-cli" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;通过简单的 CLI 与 Squads 多签程序进行交互。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Turnkey Rust Client&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Eliascm17&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Eliascm17/turnkey" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;与 Turnkey API 进行交互的 Rust 接口，允许通过安全 enclave 安全存储和签名交易。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Umi&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Metaplex&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/metaplex-foundation/umi" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;用于 JavaScript 客户端的 Solana 框架。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wallet Adapter&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Anza&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/anza-xyz/wallet-adapter" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;適用于 Solana 应用程序的模块化 TypeScript 钱包适配器及组件。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="浏览器"&gt;浏览器&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOL CLI Explorer&lt;/td&gt;
&lt;td&gt;探索器&lt;/td&gt;
&lt;td&gt;cavemanloverboy&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cavemanloverboy/sol" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个用于 Solana 区块链的命令行探索器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana Explorer&lt;/td&gt;
&lt;td&gt;探索器&lt;/td&gt;
&lt;td&gt;Solana Labs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://explorer.solana.com/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana 集群的官方探索器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SolanaFM&lt;/td&gt;
&lt;td&gt;探索器&lt;/td&gt;
&lt;td&gt;SolanaFM 团队&lt;/td&gt;
&lt;td&gt;&lt;a href="https://solana.fm/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个友好的 Solana 浏览器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solscan&lt;/td&gt;
&lt;td&gt;探索器&lt;/td&gt;
&lt;td&gt;Solscan 团队&lt;/td&gt;
&lt;td&gt;&lt;a href="https://solscan.io/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;用户友好且实时扫描 Solana 生态系统的工具。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;XRAY (旧版)&lt;/td&gt;
&lt;td&gt;探索器&lt;/td&gt;
&lt;td&gt;Helius&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/helius-labs/xray" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;由 Helius 提供的可读性强的 Solana 交易探索器。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="性能仪表板"&gt;性能仪表板&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chainstack Compare&lt;/td&gt;
&lt;td&gt;节点性能监控仪表板&lt;/td&gt;
&lt;td&gt;Chainstack&lt;/td&gt;
&lt;td&gt;&lt;a href="https://compare.chainstack.com/dashboard" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;在时间上比较 Solana 节点的 RPC 性能仪表板，包括交易落地率。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="游戏"&gt;游戏&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundation Kit&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Star Atlas&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/staratlasmeta/FoundationKit" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;为虚幻引擎 4 和 5 创建的插件，允许虚幻游戏客户端连接和与 Solana 交互。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GameShift&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Solana 实验室&lt;/td&gt;
&lt;td&gt;&lt;a href="https://gameshift.solanalabs.com/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个平台，方便游戏开发者通过单一 API 轻松集成 Web3 元素。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Godot SDK&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;ZenRepublic, Virus-Axel&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Virus-Axel/godot-solana-sdk" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;使 Godot 能够制作链上和 Solana 集成游戏的 GDExtension。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Honeycomb Protocol&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Honeycomb Protocol 团队&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.honeycombprotocol.com/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;为游戏开发者设计的一整套 Web3 工具。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MagicBlock&lt;/td&gt;
&lt;td&gt;游戏引擎&lt;/td&gt;
&lt;td&gt;MagicBlock 团队&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.magicblock.gg/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一款用于链上 SVM 游戏的多功能引擎。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana Unreal SDK&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;Bifrost Technologies&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Bifrost-Technologies/Solana-Unreal-SDK" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;用于在 Solana 上使用虚幻引擎 5 构建区块链游戏的完整虚幻插件和工具包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana Unity SDK&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;MagicBlock 团队&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.magicblock.gg/SolanaUnitySDK/overview" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一套全面的开源工具，方便在基于 Unity 的游戏中轻松访问 Solana。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thugz BC Plugin Packaged&lt;/td&gt;
&lt;td&gt;框架&lt;/td&gt;
&lt;td&gt;ThugzLabs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/ThugzLabs/Thugz-BC-Plugin-Packaged-for-UE5.0" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Thugz Labs BC 插件的打包版本，适用于虚幻引擎。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Turbo&lt;/td&gt;
&lt;td&gt;游戏引擎&lt;/td&gt;
&lt;td&gt;Jozanza&lt;/td&gt;
&lt;td&gt;&lt;a href="https://turbo.computer/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;特别为快速制作低分辨率、基于精灵的 2D 游戏而构建。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="压缩"&gt;压缩&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;关于 Solana 状态压缩的所有知识&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xIchigo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/all-you-need-to-know-about-compression-on-solana" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解状态压缩、压缩 NFT（cNFT）以及如何获取、铸造或转移它们。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;使用并发梅克尔树压缩数字资产&lt;/td&gt;
&lt;td&gt;白皮书&lt;/td&gt;
&lt;td&gt;Jarry Xiao, Noah Gundotra, Austin Adams, Anatoly Yakovenko&lt;/td&gt;
&lt;td&gt;&lt;a href="https://drive.google.com/file/d/1BOpa5OFmara50fTvL0VIVYjtg-qzHCVc/view" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;状态压缩背后的理论。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;使用 JavaScript 创建压缩 NFT&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Solana 基金会&lt;/td&gt;
&lt;td&gt;&lt;a href="https://solana.com/developers/guides/javascript/compressed-nfts" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;创建树、铸造、读取和转移 cNFT 的逐步指南。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;探索 Solana 上的 NFT 压缩&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Mert Mumtaz&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/solana-nft-compression" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解如何在 Solana 上处理 NFT 压缩。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;如何使用 TypeScript 铸造 Solana 压缩 NFT（cNFT）&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;kishi.sol&lt;/td&gt;
&lt;td&gt;&lt;a href="https://medium.com/@KishiTheMechanic/how-to-mint-solana-compressed-nfts-cnfts-with-typescript-be9d0fa7ce30" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;使用 TypeScript 铸造 cNFT 的逐步指南。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;状态压缩&lt;/td&gt;
&lt;td&gt;文档&lt;/td&gt;
&lt;td&gt;Solana 基金会&lt;/td&gt;
&lt;td&gt;&lt;a href="https://solana.com/docs/advanced/state-compression" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;状态压缩的官方文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;状态压缩与压缩 NFT&lt;/td&gt;
&lt;td&gt;GitHub 仓库&lt;/td&gt;
&lt;td&gt;solana-developers&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/solana-developers/compressed-nfts" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;使用压缩 NFT 的示例代码。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;同时在 Solana 上铸造多个压缩 NFT (cNFT) 的小贴士&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;kishi.sol&lt;/td&gt;
&lt;td&gt;&lt;a href="https://medium.com/@KishiTheMechanic/tips-for-minting-multiple-compressed-nfts-cnfts-simultaneously-on-solana-4e01e06bae00" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;同时铸造多个 cNFT 的小贴士。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ZK 压缩&lt;/td&gt;
&lt;td&gt;文档&lt;/td&gt;
&lt;td&gt;Helius x Light Protocol&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.zkcompression.com/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一种旨在减少状态成本几个数量级的新原语。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="Solana 移动端"&gt;Solana 移动端&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5 分钟内构建 cNFT 铸币移动应用&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Anam Ansari&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/build-a-cnft-minter-mobile-app-in-under-5-minutes" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;涵盖如何构建 cNFT 铸造 Android 应用程序的教程。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iOS 上的密钥托管&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Mike Sulistio&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.solanamobile.com/blog/ios-wallet-signing" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;深入探讨 iOS 上密钥托管的模式和挑战。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;移动 dApp 架构&lt;/td&gt;
&lt;td&gt;文档&lt;/td&gt;
&lt;td&gt;Mike Sulistio&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.solanamobile.com/getting-started/mobile-dapp-architecture" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;移动 dApp 架构概述，包括移动钱包适配器协议。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;发布 Solana 移动应用的指南&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xSolanaGirl&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/publishing-solana-mobile-apps" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;在 Solana 移动 dApp 商店发布的必要步骤和资源。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 移动堆栈&lt;/td&gt;
&lt;td&gt;文档&lt;/td&gt;
&lt;td&gt;Solana Mobile Team&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.solanamobile.com/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;有关在 Solana 上进行移动开发的全面资源。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 移动教程应用&lt;/td&gt;
&lt;td&gt;GitHub 仓库&lt;/td&gt;
&lt;td&gt;solana-mobile&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/solana-mobile/tutorial-apps" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;展示 Solana 移动堆栈（SMS）的教程应用程序集合。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 的令牌门控 - Solana 移动教程&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xSolanaGirl&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/token-gating-on-solana-mobile-tutorial" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;学习如何使用 Saga Genesis Token 创建令牌门控体验。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="Solana 支付"&gt;Solana 支付&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shopify 和 Solana Pay：逐步指南（2023）&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Owen Venter&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/solana-pay-shopify" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;集成 Solana Pay 到 Shopify 商店的详细指南，涵盖商户设置和客户流程。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana Pay&lt;/td&gt;
&lt;td&gt;GitHub 仓库&lt;/td&gt;
&lt;td&gt;Anza&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/anza-xyz/solana-pay" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一种新的去中心化支付标准。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana Pay Android 示例&lt;/td&gt;
&lt;td&gt;GitHub 仓库&lt;/td&gt;
&lt;td&gt;Solana Mobile Team&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/solana-mobile/solana-pay-android-sample" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;针对 Android 钱包处理外部生成的 Solana Pay URI 的集成指南&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana Pay: 所有你需要知道的事情&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Owen Venter&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/solana-pay" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana Pay 是一种标准协议和参考实现的集合，可以实现去中心化支付。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;用 100 秒解释 Solana Pay&lt;/td&gt;
&lt;td&gt;视频&lt;/td&gt;
&lt;td&gt;Abdullah Raza&lt;/td&gt;
&lt;td&gt;&lt;a href="https://youtu.be/nV6Y8nXS5-U?si=kMU8KVhs-1ONc21K" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个有趣且简明扼要的解释，讲述了 Solana Pay 的工作原理、用途和优点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana Pay 规范&lt;/td&gt;
&lt;td&gt;文档&lt;/td&gt;
&lt;td&gt;Anza&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/anza-xyz/solana-pay/blob/master/SPEC.md" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana Pay 的规范文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h2 id="验证者"&gt;验证者&lt;/h2&gt;&lt;h3 id="Agave 客户端"&gt;Agave 客户端&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agave&lt;/td&gt;
&lt;td&gt;GitHub 仓库&lt;/td&gt;
&lt;td&gt;Anza&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/anza-xyz/agave" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Anza 的 Solana Labs 验证者客户端的分支。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agave 过渡&lt;/td&gt;
&lt;td&gt;文档&lt;/td&gt;
&lt;td&gt;Anza&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/anza-xyz/agave/wiki/Agave-Transition" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana Labs 客户端迁移到新的 Agave 客户端的过程。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anza 的新 SVM API&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Joe Caulfield&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.anza.xyz/blog/anzas-new-svm-api" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;定义 SVM 以及项目能够构建的内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana Labs 验证者客户端&lt;/td&gt;
&lt;td&gt;GitHub 仓库&lt;/td&gt;
&lt;td&gt;Solana Labs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/solana-labs/solana" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;OG 验证者客户端。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agave 运行时&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Joe Caulfield&lt;/td&gt;
&lt;td&gt;&lt;a href="https://fluff-ranunculus-275.notion.site/The-Agave-Runtime-d1f8d3608e5d4529b120e09e80b48887" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;深入探讨 Agave 运行时。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="Firedancer"&gt;Firedancer&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breakpoint 2023: Firedancer 更新&lt;/td&gt;
&lt;td&gt;视频&lt;/td&gt;
&lt;td&gt;Dan Albert&lt;/td&gt;
&lt;td&gt;&lt;a href="https://youtu.be/hEEWMiMuEF8?si=tiW4lJFisBAOgwXb" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dan Albert 在 Breakpoint 2023 上介绍的 Firedancer 更新。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breakpoint 2023: FPGA 以 8M TPS 工作&lt;/td&gt;
&lt;td&gt;视频&lt;/td&gt;
&lt;td&gt;Kaveh Aasaraai, Kevin Bowers&lt;/td&gt;
&lt;td&gt;&lt;a href="https://youtu.be/1oQg2_b_gv8?si=G5VE8g4UAu-AE6Zw" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;在 Breakpoint 2023 上的演讲，演示 Firedancer 如何在一台 8 年旧的机器上，以 7 年旧的 FPGA 实现 800 万 TPS。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breakpoint 2023: 网络通信的快速 Reed-Solomon 编码&lt;/td&gt;
&lt;td&gt;视频&lt;/td&gt;
&lt;td&gt;Philip Taffet&lt;/td&gt;
&lt;td&gt;&lt;a href="https://youtu.be/rXB8NO15Mv4?si=XI4f5VtMaEHfd2w5" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;在 Breakpoint 2023 的演讲，讲述 Firedancer 如何优化 Reed-Solomon 编码以用于其网络通信。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breakpoint 2023: Securing Firedancer&lt;/td&gt;
&lt;td&gt;视频&lt;/td&gt;
&lt;td&gt;Felix Willhelm&lt;/td&gt;
&lt;td&gt;&lt;a href="https://youtu.be/K6H1TRbiaR4?si=U8P904PT7oFlI8Eb" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;在 Breakpoint 2023 的演讲，讨论 Firedancer 的安全考虑和实现。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firedancer&lt;/td&gt;
&lt;td&gt;GitHub 仓库&lt;/td&gt;
&lt;td&gt;Firedancer 团队&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/firedancer-io/firedancer" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Firedancer 是 Jump Crypto 的 Solana 共识节点&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firedancer 可靠性努力&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Richard Patel&lt;/td&gt;
&lt;td&gt;&lt;a href="https://jumpcrypto.com/writing/firedancer-reliability/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;本文介绍了 Firedancer 如何提高 Solana 的吞吐量和可靠性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firedancer 的 fd_quic 技术里程碑&lt;/td&gt;
&lt;td&gt;主题&lt;/td&gt;
&lt;td&gt;Firedancer 团队&lt;/td&gt;
&lt;td&gt;&lt;a href="https://x.com/jump_firedancer/status/1654124396062158850" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一个关于 Firedancer 高性能实现 QUIC 和 Solana 吸收网络协议的 Twitter 线程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jump Crypto 着手构建新的验证者客户端，以提高 Solana 区块链的吞吐量和可靠性&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Kevin J Bowers&lt;/td&gt;
&lt;td&gt;&lt;a href="https://jumpcrypto.com/writing/jump-crypto-sets-out-to-build-new-validator-client-for-the-solana-blockchain-to-increase-the-throughput-and-reliability-of-the-network/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Jump Crypto 的 Firedancer 宣告&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;跳跃与光速的比较&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Kevin J Bowers&lt;/td&gt;
&lt;td&gt;&lt;a href="https://jumpcrypto.com/writing/jump-vs-the-speed-of-light/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;“光速太慢了”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firedancer 是什么？深入了解 Solana 2.0&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xIchigo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/what-is-firedancer" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解关于 Firedancer 的所有信息，这是 Jump 开发的 Solana 新独立验证者客户端&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="更新"&gt;更新&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;关于 Solana 的 v1.16 更新你需要知道的一切&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xIchigo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/all-you-need-to-know-about-solanas-v1-16-update" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解 Solana 的 v1.16 更新，这是 Solana Labs 验证者客户端的最新升级&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;关于 Solana 的 v1.17 更新你需要知道的一切&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xIchigo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/all-you-need-to-know-about-solanas-v1-17-update" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解 Solana 的 v1.17 更新，这是 Solana Labs 验证者客户端的最新升级，以及最近的二月份网络故障&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;关于 Solana 的 v1.18 更新你需要知道的一切&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xIchigo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/all-you-need-to-know-about-solanas-v1-18-update" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解关于 Solana Labs（现为 Agave）客户端的最新更新，以及新的中央调度程序&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agave v2.0 更新你需要知道的一切&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Lostin&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/agave-v2-update" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;总结了 Solana Agave 2.0 的关键特性和优化，包括系统调用、经济变化和 ZK ElGamal 证明&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agave v2.1 更新：你需要知道的一切&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Lostin&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/agave-v21-update-all-you-need-to-know" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;总结了 Solana Agave 2.1 客户端更新中需要关注的所有主要发布周期特性和优化&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="结构"&gt;结构&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;介绍中央调度器：Agave v1.18 的可选功能&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Rex St. John&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.anza.xyz/blog/introducing-the-central-scheduler-an-optional-feature-of-agave-v1-18" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;介绍 Agave v1.18 更新中的新中央调度器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;关于 Solana 9 月 14 日故障的反思&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Jump Crypto&lt;/td&gt;
&lt;td&gt;&lt;a href="https://jumpcrypto.com/writing/reflections-on-the-sept-14-solana-outage/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;对早期 Solana 故障事件的深入分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 银行阶段和调度器&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Andrew Fitzgerald&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apfitzge.github.io/posts/solana-scheduler/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;深入解释 Solana Labs 验证器客户端在块生产中使用的历史、当前和即将到来的调度算法和设计&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;从基本原理看 Solana 的发行&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Matt Resnick&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.anza.xyz/blog/solana-issuance-from-first-principles" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;从根本上了解 Solana 的发行及当前的发行是否最优&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;聚焦：Solana 的调度器&lt;/td&gt;
&lt;td&gt;视频&lt;/td&gt;
&lt;td&gt;Solana Foundation&lt;/td&gt;
&lt;td&gt;&lt;a href="https://youtu.be/R7hq8ampBio?si=oCLdEVJs46clJ2gv" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;对 1.17 版调度器的关键分析，交易如何通过银行阶段，以及未来 1.18 版调度器的工作原理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana eBPF 虚拟机&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Joe Caulfield&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.anza.xyz/blog/the-solana-ebpf-virtual-machine" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;了解 rBPF 虚拟机的工作原理，以及验证者如何使用它执行程序&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 验证者 101：交易处理&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Jito Labs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.jito.wtf/blog/solana-validator-101-transaction-processing/" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;对交易生命周期的技术深入探讨&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="运营、维护与经济学"&gt;运营、维护与经济学&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;如何设置 Solana 验证者&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;John Sloboda&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/how-to-set-up-a-solana-validator" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;学习如何启动和运行 Solana 主网验证者&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;运行 Solana 验证者：全面解析&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Fikunmi Ajayi-Peters&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apfikunmi.medium.com/running-a-solana-validator-a95cdfd6488a" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;关于验证者、运行一个的经济学与盈利能力的全面指南&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;设置 Solana 验证者&lt;/td&gt;
&lt;td&gt;文档&lt;/td&gt;
&lt;td&gt;Solana Foundation&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.solanalabs.com/operations/setup-a-validator" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana 官方文档，关于运行验证者的信息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;从第一原则看 Solana 的发行&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Max Resnick&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.anza.xyz/blog/solana-issuance-from-first-principles" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;学习 Solana 的发行方式及当前发行是否最优&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 验证者经济学：入门&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Ryan Chern&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/solana-validator-economics-a-primer" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana 验证者经济学的入门指南&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 验证者运营最佳实践&lt;/td&gt;
&lt;td&gt;文档&lt;/td&gt;
&lt;td&gt;Solana Foundation&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.solanalabs.com/operations/best-practices/general" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solana 官方文档推荐的最佳实践&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;验证者利润计算器&lt;/td&gt;
&lt;td&gt;工具&lt;/td&gt;
&lt;td&gt;Cogent Crypto&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cogentcrypto.io/ValidatorProfitCalculator" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;用于估计验证者在假设场景下的收益的工具&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="观点和文章"&gt;观点和文章&lt;/h3&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;超越技术男：重新思考加密领域中的偶像崇拜&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xIchigo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/beyond-the-tech-bro-rethinking-hero-worship-in-crypto" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;个人崇拜、大人物的历史理论、思想的力量、去中心化领导、草根组织、加密乐观主义。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;狗币、猫视频和颠覆&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Mikel Ayala&lt;/td&gt;
&lt;td&gt;&lt;a href="https://medium.datadriveninvestor.com/dog-coins-cat-videos-and-disruption-79cfa4ff69c0" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;对 meme 币、注意力经济、在线社区和数字原生资本的批判性分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;铸造去中心化的知识——每个革命都需要一个火花&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;M3taversal&lt;/td&gt;
&lt;td&gt;&lt;a href="https://medium.com/@m3taversal/forging-decentralized-knowledge-every-revolution-needs-a-spark-59b8c80c1db6" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;对一项变革性 Web3 项目的本质进行批判性分析，旨在创建一个经得起时间考验的知识库。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana：如何颠覆区块链&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Lee Nguyen&lt;/td&gt;
&lt;td&gt;&lt;a href="https://open.substack.com/pub/stationoneohone/p/solana-how-it-revolutionized-blockchain?r=3hghbx&amp;amp;amp;amp;amp;utm_campaign=post&amp;amp;amp;amp;amp;utm_medium=web" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;从创始到未来的 Solana 故事。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 夏季&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Packy McCormick&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.notboring.co/p/solana-summer" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;关于 Solana 故事的全面而引人入胜的阅读。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOL 生存者&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;0xsmac&lt;/td&gt;
&lt;td&gt;&lt;a href="https://0xsmac.substack.com/p/sol-survivor" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;关于 Solana 成为一个引人注目的资产和网络的独特视角。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;几亿用户之路&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;James Carlin&lt;/td&gt;
&lt;td&gt;&lt;a href="https://clean-winter-ede.notion.site/The-Billion-User-Path-5310014e09cb49bc83e9ee099ca12c7f" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;对区块链的未来以及用户破十亿用户的乐观分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Helius 宣言&lt;/td&gt;
&lt;td&gt;宣言&lt;/td&gt;
&lt;td&gt;Mert Mumtaz&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.helius.dev/blog/manifesto" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Helius 的使命是提高全球开发者的经济潜力。我们相信，这只有通过加密基础设施才能实现。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 繁荣的那一年&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Ryan Shea&lt;/td&gt;
&lt;td&gt;&lt;a href="https://writing.ry.sh/the-year-solana-blew-up-6d50cccb4615" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;对于任何对 Solana 感兴趣的人来说，这是一篇必读的文章。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;为什么选择 Solana&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Mert Mumtaz&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.mertimus.com/p/why-solana" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;关于在 Solana 上构建的个人观点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 论点 - 最快的马是如何从灰烬中崛起的&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Ryan Watkins, Wilson Withiam, Daniel Cheung&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.syncracy.io/writing/solana-thesis" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一篇全面的论文，解释 Solana 的“为什么”。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h2 id="Solana 的未来"&gt;Solana 的未来&lt;/h2&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;标题&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;作者 (s)&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 中的异步程序执行 (APE)&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Anatoly Yakovenko&lt;/td&gt;
&lt;td&gt;&lt;a href="https://x.com/aeyakovenko/status/1804937522998591577" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一篇推特文章，讨论异步执行以及独立于其他程序运行投票程序的目标。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solana 上的状态增长问题&lt;/td&gt;
&lt;td&gt;文章&lt;/td&gt;
&lt;td&gt;Anatoly Yakovenko&lt;/td&gt;
&lt;td&gt;&lt;a href="https://x.com/aeyakovenko/status/1796569211273445619" rel="nofollow" target="_blank" title=""&gt;链接&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;一篇推特文章，讨论 Solana 状态的快速增长及其潜在解决方案。&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h3 id="参考"&gt;参考&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;原文：&lt;a href="https://github.com/helius-labs/solana-awesome" rel="nofollow" target="_blank" title=""&gt;solana-awesome&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;作者：&lt;a href="[%E5%8E%9F%E4%BD%9C%E8%80%85%E9%93%BE%E6%8E%A5](https://github.com/helius-labs)" title=""&gt;helius-labs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;译者：[brooke007]&lt;/li&gt;
&lt;li&gt;日期：2025-03-31&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>aaa</author>
      <pubDate>Mon, 31 Mar 2025 08:21:14 +0800</pubDate>
      <link>https://soldev.cn/topics/162</link>
      <guid>https://soldev.cn/topics/162</guid>
    </item>
    <item>
      <title>教你代币安全监测</title>
      <description>&lt;ul&gt;
&lt;li&gt;原文：&lt;a href="https://github.com/Solana-ShenZhen/blog/blob/main/tokencheck.md" rel="nofollow" target="_blank"&gt;https://github.com/Solana-ShenZhen/blog/blob/main/tokencheck.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;作者：&lt;a href="https://x.com/_Brooke007" rel="nofollow" target="_blank" title=""&gt;brooke007&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;炒币的时候经常会遇到一些盘，如果你盲目的冲进去，可能就完蛋了。比如说 &lt;code&gt;https://dexscreener.com/solana/36kqsauU1HLRxecizvXWMosV1t1mQEeaeXDEfZLvkRY4&lt;/code&gt; 这个盘，最高的时候涨到 773.2M，然后迅速砸盘，一切都发生在三个小时以内。这就是因为他的 mint authority 还存在，每当有人买入，他就迅速冻结那个人币，导致别人只能买不能卖。你现在看这个盘可能发现 mint authority 已经是 none 了，但是之前是还有的，他修改 authority 是&lt;code&gt;https://solscan.io/tx/3v3EuUm19Vii9vNNfexvgg7rFgy1wcmtGQemRZ94yUsk1awY9eLRGPpVUPMPxmL5WsDUi5Du8a5Ray4V1eCb55ot&lt;/code&gt;这个交易。&lt;/p&gt;

&lt;p&gt;本文将简单判断代币是否是貔貅盘以及计算计算 LP 燃烧的比例。判断代币是否还有 mint 权限是看&lt;code&gt;mint authority&lt;/code&gt; ,判断代币是否是貔貅盘，本质上是看代币的  &lt;code&gt;freeze authority&lt;/code&gt;是否还在。计算 LP 燃烧的比例则是直接通过 pool 的 address，来看这个池子里的 lp 供应量（supply）和 储备量，来计算整个的比例判断 burn 了的比例
先引入一些包&lt;/p&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;nu64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;u8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Layout&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@solana/buffer-layout&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PublicKey&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@solana/web3.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ParsedAccountData&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@solana/web3.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;LIQUIDITY_STATE_LAYOUT_V4&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@raydium-io/raydium-sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;dotenv&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dotenv&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;logger&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./logger&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后自定义 boollayout 以及 publickeylayout 类，这两个的作用主要是定义在 buffer 中如何读取和存储这两个类型的数据&lt;/p&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PublicKeyLayout&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Layout&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PublicKey&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;property&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;offset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;PublicKey&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PublicKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;offset&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PublicKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;offset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toBytes&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nx"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;publicKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PublicKeyLayout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BoolLayout&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Layout&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;property&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;offset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;offset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BoolLayout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接下来就是定义 token 的结构&lt;/p&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Token&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;mintAuthorityOption&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;mintAuthority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PublicKey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;supply&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bigint&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;decimals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;isInitialized&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;freezeAuthorityOption&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;freezeAuthority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PublicKey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MintLayout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;struct&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Token&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="nf"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mintAuthorityOption&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nf"&gt;publicKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mintAuthority&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nf"&gt;nu64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;supply&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nf"&gt;u8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;decimals&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nf"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;isInitialized&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nf"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;freezeAuthorityOption&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nf"&gt;publicKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;freezeAuthority&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;解析直接调用 decode 方法即可&lt;/p&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchAndParseMint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;mint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PublicKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;solanaConnection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Connection&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Token&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;solanaConnection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAccountInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mint&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;MintLayout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;获取池子的信息 然后计算比例&lt;/p&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchLiqudityPoolState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;pool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PublicKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;solanaConnection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Connection&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;solanaConnection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getMultipleAccountsInfo&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PublicKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pool&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;parsed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="na"&gt;v&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
      &lt;span class="nx"&gt;LIQUIDITY_STATE_LAYOUT_V4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lpMint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;lpMint&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lpReserve&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;lpReserve&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;accInfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;solanaConnection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getParsedAccountInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PublicKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lpMint&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mintInfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;accInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;ParsedAccountData&lt;/span&gt;&lt;span class="p"&gt;)?.&lt;/span&gt;&lt;span class="nx"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lpReserve2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lpReserve&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mintInfo&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;decimals&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;actualSupply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mintInfo&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;supply&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mintInfo&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;decimals&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;//Calculate burn percentage&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;maxLpSupply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actualSupply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lpReserve&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;burnAmt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lpReserve&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;actualSupply&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;burnPct&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;burnAmt&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;lpReserve&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;burnPct&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;完整的代码可以参考&lt;a href="`https://github.com/brooke007/tokencheck`" title=""&gt;我的 github&lt;/a&gt;&lt;/p&gt;</description>
      <author>aaa</author>
      <pubDate>Tue, 15 Oct 2024 14:03:08 +0800</pubDate>
      <link>https://soldev.cn/topics/81</link>
      <guid>https://soldev.cn/topics/81</guid>
    </item>
    <item>
      <title>W 币用户持有者向 Binance 的转账分析</title>
      <description>&lt;p&gt;Wormhole 最近推出了质押。许多用户开始往 Binance 转入 W，这篇文章分析了最近一周的往币安转入的记录。
发现最少的也往里面转了 500560000 个 W 在币安，下面将给出图表。
&lt;img src="https://i3.mjj.rip/2024/06/24/f9e0bc36e74ecb6a6247a7c7303cd9bc.png" title="" alt="f9e0bc36e74ecb6a6247a7c7303cd9bc.png"&gt;
这张图可以看出，币的数量集中在 0.050 到 1.024 的范围，后面的人数将持续减少。
这张表是通过&lt;code&gt;vybenetwork&lt;/code&gt;的 api 以及一些 python 分析得到的。
使用&lt;code&gt;vybenetwork&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;defaultdict&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;

&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.vybenetwork.xyz/token/transfers?mintAddress=85VBFQZC9TZkfaptBWjvUw7YbZjy52A6mjtPGjstQAmQ&amp;amp;receiverAddress=5tzFkiKscXHK5ZXCGbXZxdw7gTjjD1mBwuoFbhUvuAi9&amp;amp;timeStart=1717998402&amp;amp;timeEnd=1718603202&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;accept&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-API-KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR-API-KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;transactions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;transactions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;sorted_transactions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transactions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;merged_transactions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defaultdict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;receiverAddress&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;transaction&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;sorted_transactions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;senderAddress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;receiver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;receiverAddress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;merged_transactions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;
&lt;span class="n"&gt;merged_transactions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;receiverAddress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;receiver&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;senderAddress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;receiverAddress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;receiverAddress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;merged_transactions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ascending&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sorted_transactions.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;另外通过得到&lt;code&gt;sorted_transactions.csv&lt;/code&gt;得到柱状图代码如下&lt;/p&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;

&lt;span class="n"&gt;file_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sorted_transactions.csv&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; 

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;prices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;min_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;prices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;max_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;prices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;num_bins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;
&lt;span class="n"&gt;bins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;linspace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;num_bins&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;hist&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bin_edges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;histogram&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prices&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bins&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;bars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bin_edges&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;hist&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;diff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bin_edges&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;edgecolor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;black&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;align&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;edge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hist&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_height&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_x&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_width&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;ha&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;center&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bottom&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;people&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;people distribution of every price bin&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;xticks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bin_edges&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rotation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;y&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;savefig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chart_of_sorted_distribution2.png&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>aaa</author>
      <pubDate>Mon, 24 Jun 2024 13:10:18 +0800</pubDate>
      <link>https://soldev.cn/topics/32</link>
      <guid>https://soldev.cn/topics/32</guid>
    </item>
    <item>
      <title>服务于 DePIN 的区块链基础设施的设计思路</title>
      <description>&lt;p&gt;原文：&lt;a href="https://learnblockchain.cn/article/8227" rel="nofollow" target="_blank"&gt;https://learnblockchain.cn/article/8227&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;本文描述了设计一个面向 DePIN 提供区块链底层服务的基础设施应考虑哪些问题，以及如何完成设计。该方案基于 BoAT3 Oracle。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;概述&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;随着模块化区块链技术的落地，区块链解决了困扰已久的性能问题，这为需要高吞吐量，服务于海量用户的 DApp 的落地创造了条件。DePIN 是典型的这类场景。DePIN 属于 RWA，其价值相对稳定，可预期，且能将区块链服务带向更广泛的用户，成为区块链大规模使用的推手，让区块链服务于现实世界，因此成为热门技术。
然而 DePIN 项目本身横跨 IoT 设备，区块链，传统互联网服务，经济学等多个领域，涉及硬件，软件，密码学等多种技术，从头到尾地构建 DePIN 项目是件复杂，困难的工作。本文尝试分析 DePIN 项目的运行原理，并介绍如何使用 DePIN App Chain 快速构建 DePIN 项目。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;DePIN 项目运行原理&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src="https://i2.mjj.rip/2024/06/09/077b90183e270a40a26f2c211503cef8.webp" title="" alt="077b90183e270a40a26f2c211503cef8.webp"&gt;&lt;/p&gt;

&lt;p&gt;DePIN 项目的运行原理一般为：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PoPW 生成和上传&lt;/strong&gt;：矿工们购买矿机并搭建 DePIN 项目网络。矿机一般是具有联网能力的，能提供特定服务能力的 IoT 设备（如太阳能电池板，信号基站等）。IoT 设备在工作中会收集其工作的证明，称为 PoPW(Proof of Physical Work)。IoT 设备将该 PoPW 发送至 DePIN 网络。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PoPW 的验证和保存&lt;/strong&gt;：DePIN 网络中使用技术方法验证该 PoPW 的正确性，有效性。这一般是通过链下的 Oracle 服务完成的。验证完成后，正确且有效的 PW（Physical Work）数据可能会被保存下来供后期追溯和验证。因为 IoT 设备一般数量巨大，PW 总数据量一般会很大，因此 PW 数据一般被保存在链下（如 FIL，Arweave 等去中心化可信存储网络），并将其抽象汇总后，将批量数据的承诺保存在链上。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;奖励发放&lt;/strong&gt;：可信 Oracle 或链上合约通过 PW 数据计算出矿工奖励，并完成发放。奖励可能需要矿工主动在链上领取，也可能在链上直接转账，这取决于信任和成本的设计。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;奖励兑换&lt;/strong&gt;：矿工将获取的链上 Token 奖励通过 CEX,DEX 等渠道兑换成法币，覆盖其购买和运行矿机的成本，并获取利润，形成价值飞轮。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;让我们拿起放大镜，来把上述流程看的更仔细一些！&lt;/p&gt;
&lt;h2 id="2.1 PoPW 的生成"&gt;2.1 PoPW 的生成&lt;/h2&gt;
&lt;p&gt;IoT 设备在工作中会不断产生 PW 数据，如太阳能电池板的发电数据，基站的服务数据等。但如何能让 DePIN 网络相信这台 IoT 设备矿机没有凭空捏造自己的数据，甚至有人在没有矿机的情况下，凭空创造出这些数据呢？一般有两种方法：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;IoT 设备都包含通讯模组，通讯模组中一般会包含 TEE 模组，TEE 模组中可以安全地保存私钥并进行密码学运算。项目方可以在生产矿机时在 TEE 内生成非对称密钥对（公私钥），并取出公钥，将公钥在区块链上注册为 DID（此工作也可由 IoT 相关芯片生产商等完成）。由于 TEE 的安全设计，项目方和矿工均无法获得其私钥。IoT 设备生成的 PW 数据可以被发送至 TEE，由其内保存的私钥签名后，签名数据即为 PoPW，将此 PoPW 发送至 Oracle 后，Oracle 可通过链上注册的设备 DID 查询到该设备的公钥，从而验证签名的正确性。该方案原理简单，安全性可信度都非常高，但对 IoT 设备采用的通信模组有一定要求。幸运的是 BoAT3 Infra 已经适配了多种通信模组芯片，可以满足各种 DePIN 项目对 IoT 设备的需求。项目方仅需在其矿机中使用适配的通信模组即可。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;市场上有很多 IoT 平台，以及云服务厂商提供数据存储加工功能。IoT 设备生成的数据会被送至这些平台存储和处理。可以由这些平台做信用背书，送至平台的原始数据由平台的私钥签名后，作为 PoPW 使用。该方案要求送至平台的，未经加工的原始数据被平台签名作为信任来源。因此需额外信任平台不会作恶。安全性略低于方案 1，但适用范围更广。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="2.2 PoPW 的验证：BoAT3 Oracle"&gt;2.2 PoPW 的验证：BoAT3 Oracle&lt;/h2&gt;
&lt;p&gt;DePIN 网络中的 IoT 设备矿机数量一般很多，如上万台，甚至上百万台。因此生成的 PoPW 数量也非常巨大。这些 PoPW 在链上验证会产生巨大的成本，且没有必要。因此这些数据一般是通过 Oracle 完成验证的。BoAT3 Oracle 可以处理上述 1，2，方式产生的 PoPW。其原理如下：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://i2.mjj.rip/2024/06/09/77d2c609a091822f64048ea046b47ee7.webp" title="" alt="77d2c609a091822f64048ea046b47ee7.webp"&gt;&lt;/p&gt;

&lt;p&gt;PoPW 被传至 BoAT3 Oracle 后，Oracle 通过链上 DID 合约获取其公钥，使用公钥验证 PoPW 合法性。如果合法性验证通过，就会将 PW 数据传输至 Connector，表示该 PW 已被认可，Connector 中的运行逻辑由 DePIN 项目方决定，可以将该 PW 数据发送至链上合约进行奖励，也可以按照奖励规则收集到合适数量/时间的 PW 后进行奖励。&lt;/p&gt;

&lt;p&gt;PW 数据量一般很大，不会直接将 PW 数据全部上链，而是将其保存在去中心化存储网络中（例如 FIL, Arweave)，计算出其数据承诺（如将数据构建 Merkle 树，Merkle 树根即为数据承诺），将数据承诺以及获取数据的方法放至链上。每次奖励周期均可在链下获取生成奖励的原始数据。&lt;/p&gt;
&lt;h2 id="2.3 BoAT3 Oracle 和 DePIN 项目脚手架"&gt;2.3 BoAT3 Oracle 和 DePIN 项目脚手架&lt;/h2&gt;
&lt;p&gt;因为 DePIN 项目涉及到的模块相对比较多，为了便于项目开发和实施，BoAT3 Oracle 提供的了几个工具供 DePIN 项目方使用，主要包括：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BoAT3 cli：用来创建基于 BoAT3 Oracle 的 DePIN 项目的命令行工具&lt;/li&gt;
&lt;li&gt;BoAT3 scaffold：提供 DePIN 项目合约/物模型/Connector 参考实现的脚手架应用&lt;/li&gt;
&lt;li&gt;BoAT3 console：用于 DePIN 项目信息查看/购买的网站&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2.4 奖励发放和兑换"&gt;2.4 奖励发放和兑换&lt;/h2&gt;
&lt;p&gt;奖励发放一般由 Oracle 完成，可以在链上直接发放；也可以将发放承诺/证明上链，由矿工在链上领取，这样可以减少链上交易，降低发放成本。&lt;/p&gt;

&lt;p&gt;无论使用哪种方式发放，都需要向社区证明奖励的发放符合规则。每次奖励发放时，Oracle 通过 PW 数据计算哪些矿工可以获取奖励，以及获取多少奖励。可以将所有奖励细节生成一棵 merkle 树，每个叶子都是一个奖励的 Hash，这个 Hash 由奖励的期数，获得奖励的账户，奖励数量等数据组成。奖励树的树根可以和 PW 数据树的树根，以及其他奖励相关数据一起输入智能合约。智能合约中可以允许社区成员对奖励的分发发起并完成挑战，如果社区成员挑战成功，则 Oracle 抵押的 Token 将被罚没，并将其中可观的部分奖励给挑战者。挑战过程可以约束 Oracle 必须按规则完成奖励的分发。&lt;/p&gt;

&lt;p&gt;矿工获取奖励后，可以通过 DEX 或 CEX 将奖励兑换成稳定币或提现成法币，可以补贴其运行矿机，维护 DePIN 网络的成本，也可以激励其进一步购买矿机，扩大 DePIN 网络规模，形成 DePIN 网络的增长飞轮。&lt;/p&gt;
&lt;h2 id="2.5 其他 PoPW 模型"&gt;2.5 其他 PoPW 模型&lt;/h2&gt;
&lt;p&gt;除了上述模型外，也有其他可用于 DePIN 项目的模型。例如通过区块链生成有时限的可信挑战，如每小时都在变化的随机数。该挑战会被下发至每台矿机，矿机需要在其有效时间内，结合自身的 IoT 工作数据完成挑战，并将其生成 PoPW，发回 DePIN 网络。DePIN 网络根据挑战来验证 IoT 设备的工作是否真实有效。该方案无需对 IoT 设备芯片生产商或 IoT 平台等产生信任和依赖。但如何设计完善可信的挑战机制是件很有挑战的工作，而完成挑战也许需要额外消耗 IoT 设备的计算能力和资源等，对设备硬件有较高要求。&lt;/p&gt;
&lt;h2 id="3. 构建满足 DePIN 要求的区块链和基础设施"&gt;3. 构建满足 DePIN 要求的区块链和基础设施&lt;/h2&gt;&lt;h2 id="3.1 需求和整体架构"&gt;3.1 需求和整体架构&lt;/h2&gt;
&lt;p&gt;DePIN 项目对区块链等基础设施有如下要求：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;性能和成本要求。DePIN 项目中经常包含数以万计甚至百万计的 IoT 设备，这些 IoT 设备在每个奖励周期内都会生成很多交易。因此 DePIN 项目要求区块链具有高性能，高安全性的同时，还需有非常低的成本。Rollup 作为模块化区块链方案可以同时满足这些要求，成为支持 DePIN 项目的合理选择。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;存储要求。PW 或 PoPW 数据因为数量巨大，一般存储在链下，且能够被无审查地访问，有些数据还会要求长期保存。可以考虑使用可信，低成本的去中心化存储方案，如 FIL, Arweave 等，也可考虑使用云存储。需注意任何人均可读取数据。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DID 服务。链上应提供 DID 服务，可信地保存并读取 IoT 设备或服务平台的信息及公钥，用来验证 PoPW。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AA 钱包服务。两个场景可能需要 AA 钱包服务：&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IoT 设备直接签发交易上链。很多 TEE 内拥有数字签名能力，可直接签发交易上链。但 IoT 设备的账号中一般不会有余额支付 gas fee，因此需要项目方使用 AA 钱包代付 gas fee.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DePIN 终端用户使用。DePIN 项目服务的终端用户很多不是 web3 用户，不熟悉钱包操作，也没有可用于支付 gas fee 的 Token，因此需要项目方使用 AA 钱包代付 gas fee，并提供类似于 web2 的用户体验。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;全链服务。不太可能在一条区块链上承载很多 DePIN 项目，而 DID 和 AA 钱包等服务都需要考虑其一致性。例如同一个 IoT 设备如果需要参与多个 DePIN 项目的服务（如项目间协作），而不同 DePIN 项目可能使用了不同的区块链，因此需要该设备在不同链上注册相同的 DID；对一个终端用户来说，也可能希望在使用不同区块链上的 DePIN 服务时不需要重复注册 AA 钱包。因此各种链上服务需要具有全链服务能力。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;跨链服务。不同 DePIN 项目可能需要协作，提供给用户更方便的服务。这些 DePIN 项目可能位于不同区块链上，因此需要可信的跨链服务完成 DePIN 项目间协作。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;经济学支持。DePIN 项目可能数量众多，场景各式各样，大部分项目的影响力可能并不大。如果各个项目都使用自己的 Token，很可能会造成资金碎片化，用户体验也不好。因此如果能有统一的经济学机制，既可以在项目初期减少用户摩擦和扩大潜在用户群，将产品快速推向用户，又可以形成合力，提高 DePIN 项目整体影响力。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;密钥可信初始化。集成于 IoT 设备里的密钥需要进行可信初始化，作为 PoPW 信任的来源。它需要做到让矿工，项目方，云服务等各个参与方都无法获取设备私钥，但可将设备公钥提取出，提交至设备 DID，后续可供 BoAT3 Oracle 验证 PoPW。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;基于以上需求，考虑支持 DePIN 项目的区块链和基础设施的架构如下：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://i2.mjj.rip/2024/06/09/84f8c9186855d9620ebcf31d61feec91.webp" title="" alt="84f8c9186855d9620ebcf31d61feec91.webp"&gt;&lt;/p&gt;

&lt;p&gt;整个系统是基于 Rollup 的三层结构，包括如下核心部分：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;以太坊主网。以太坊主网作为 Layer 1，成为整个系统的安全，信任的来源。为 L2 提供 DA，结算和共识。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rollup L2。可以使用基于 OP 或 ZK 的著名 Rollup 项目，例如 Optimism, Arbitrum，ZKSync 等。这一层拥有高安全性和可信度，同时成本比较低。但由于其 DA 使用以太坊主网，所以其性能和成本尚不足以支撑大规模 DePIN 项目落地。很多支撑 DePIN 项目的，跨越多条区块链的公共服务合约会部署在这一层。例如统一的经济学，无信任跨链，全链 DID 服务等。这一层上拥有丰富的链上生态，DePIN 项目可以在这一层与丰富的链上生态互动，获得如 DEX，借贷等链上生态的支持。矿工们在 L3 的 DePIN App Chain 上获得的奖励可以轻松地跨链到 L2 层，兑换成稳定币等。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DePIN App Chain L3。这一层是 Layer3，采用 OP 或 ZK Rollup，其结算层为 L2，使用第三方 DA。其安全性和信任继承于 L2。由于采用了第三方 DA，其性能不再受制于以太坊 L1 的区块 gas limit，而且成本进一步降低。性能和成本足以支撑 DePIN 项目大规模落地。由于 DePIN 项目可能数量众多，因此一条 DePIN App Chain 可能无法支持全部项目，可能会有多条 DePIN App Chain 并行工作。它们可以通过位于 L2 的无信任跨链合约完成项目间，链间跨链协作。DePIN 项目的智能合约，以及 DID 合约等直接服务于 DePIN 项目的合约均运行于该层。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DA（Data Availability) 服务。采用第三方 DA 服务，如 Celestia, EigenDA 等。它们均采用 DAS 技术，可以保障承载的数据被完全公开给社区，避免数据扣留攻击，这对 Rollup 的安全来说是至关重要的。而且采取三方 DA 可以避免消耗以太坊 L1 的 gas 份额用于 DA，是大规模链上吞吐量扩展的基础。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;数据存储服务。PW 或 PoPW 数据是构建 DePIN 项目的基础，奖励的发放一般基于该数据计算完成；另外 Rollup 如果需要进行安全挑战，则安全挑战数据可能也部分来源于 PW 数据。因此这些数据需要被安全可信地保存，可以被追溯，被授权用户可以自由读取（一般来说是完全开放的）。数据存储服务可以使用 FIL, Arweave 等去中心化存储，也可以使用云存储。为了保证数据一定能被访问到，防止数据扣留，针对数据访问的挑战流程是必要的。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;下面我们来一起深入了解这些模块，以及为什么这样设计。&lt;/p&gt;
&lt;h2 id="3.2 为什么使用 Rollup 构造区块链"&gt;3.2 为什么使用 Rollup 构造区块链&lt;/h2&gt;
&lt;p&gt;Rollup 采用了模块化区块链设计，能在最大程度上继承结算链（如以太坊）的安全性。以扩展以太坊性能为例，从以太坊 L1 角度思考，L2 的安全性和信任均来自于 L1，应做到用户们只信任 L1 的情况下，仍能认为 L2 上执行的交易，以及交易结果是可信的，安全的；甚至 L1 与 L2 的智能合约之间可以互相调用。落实到实现层面，L2 需要满足如下三个要求：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;L1 需要知道 L2 上发生了哪些交易&lt;/li&gt;
&lt;li&gt;L1 需要知道 L2 上最新的世界状态，并且 L2 有能力证明世界状态是正确的&lt;/li&gt;
&lt;li&gt;L1 和 L2 之间能完成可信的消息跨链&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sequencer（定序器）是 L2 上的共识模块，L2 上的交易都会被发送到 Sequencer 处理，Sequencer 可能是中心化的，也可能是去中心化的。Sequencer 会对收到的交易排序，并打包出块。每隔一段时间，Sequencer 会将 L2 上这段时间的所有交易压缩后，使用 calldata 提交到 L1，该过程称为 DA（Data Availability)。Sequencer 还会定期将 L2 最新的状态根提交到 L1 里的智能合约中。L2 通过 OP 或 ZK 方式保证提交的状态根是正确的。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;OP：即 Optimism，乐观地认为 L2 上的 Sequencer 不会作恶，提交的状态根是正确的。但是会等待一个挑战期（一般 7 天），在挑战期内任何节点如认为状态根是错误的，均可对其发起挑战。如果挑战成功，则挑战者可以获得 Sequencer 抵押在 L1 上的抵押金。挑战是通过在 L1 上重放对 L2 上有争议的具体某笔交易，或某个 opcode 来达成的。OP 技术方案可以保证该挑战能够公平可信地完成。L2 上一般会运行着很多节点，只要有一个节点是诚实的，当它发现作恶行为时就一定会发起挑战。因此对 Sequencer 来说，作恶行为不仅意味着会失去 L1 上抵押的抵押金，其作恶提交的错误状态根也会被重置，因此方案是安全的。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ZK：即 Zero Knowledge , 使用零知识证明技术，生成一个 ZK Proof, 能够证明 L2 上的世界状态在应用当前的交易后，会转换为新的世界状态。该 ZK Proof 会被提交到 L1，在 L1 的智能合约中被验证。如果该 ZK Proof 能够验证通过，则证明当前提交的状态根是正确的。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;证明 L2 的状态根正确后，即可认为所有通过 DA 提交到 L1 的交易均被正确执行了，且执行后的状态根也是正确的。因此如果这些交易中有跨链调用交易，也是可以安全执行的。&lt;/p&gt;

&lt;p&gt;从 L2 上 Sequencer 之外的节点来看，它们并不直接信任由 Sequencer 通过 p2p 网络发出的区块，而是信任已经通过 DA 提交到 L1 的区块，并监督这些区块后续的状态根；从 L2 的用户来看，他/她们也不信任 L2 Sequencer 直接给出的交易回执和状态，而是只相信已经被提交到 L1 的区块，以及在 L1 上被验证的状态根。因此在 Rollup 架构里，信任和安全是来源于 L1 的，而不是来源于 L2。所以 Rollup 的安全性和可信度接近 L1 本身，这是一种安全可信的，效率极高的区块链扩容方案。因此选择使用 Rollup 作为服务于 DePIN 的区块链基础设施是非常合适的。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://i2.mjj.rip/2024/06/09/02d011d3cf27bd08d8132b41d6c8d762.webp" title="" alt="02d011d3cf27bd08d8132b41d6c8d762.webp"&gt;&lt;/p&gt;
&lt;h2 id="3.3 为什么使用 L2+L3 架构"&gt;3.3 为什么使用 L2+L3 架构&lt;/h2&gt;
&lt;p&gt;虽然可以使用 Rollup 安全地扩展以太坊的性能，但是受限于 EVM 的性能和其顺序执行特性，即使加快出块速度，调高 gas limit，单条 Rollup 的性能上限也并不高，一般认为在千级别。而 DePIN 应用所需的性能是比较高的，因此一条 Rollup 无法承载太多 DePIN 应用。&lt;/p&gt;

&lt;p&gt;DePIN 应用的场景很丰富，因此很多 DePIN 应用都会有定制需求，如隐私保护等。这些定制需求可能会需要在 Rollup 层修改来满足，而不是在合约层就能满足。因此这些 DePIN 应用需要定制的 Rollup。&lt;/p&gt;

&lt;p&gt;综上，我们不可能用一条 Rollup 就支持所有 DePIN 项目的需求，DePIN 应用的大规模落地必定是要求多链协作的。这些协作的链之间需要一个可以信任的公共基石来进行信息的同步和交换，以及完成一些公共服务，如统一的经济学中代币的发行，我们称之为管理链，相应的，承载各个 DePIN 项目的链称为应用链，应用链包含多条 DePIN App Chain L3 链。&lt;/p&gt;

&lt;p&gt;虽然以太坊主网是管理链的理想选择，但以它的成本比较高，性能偏低，因此以太坊上的主流 Rollup L2 是管理链的理想选择，如 Optimism, Arbitrum 等。而以管理链作为结算层的 L3 是承载应用链的合理选择，它们可以提供足够的安全性，性能扩展和足够低的链上成本。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://i2.mjj.rip/2024/06/09/b998a0d63167e57ed804f20cb4063218.webp" title="" alt="b998a0d63167e57ed804f20cb4063218.webp"&gt;&lt;/p&gt;
&lt;h2 id="3.4 DA 服务"&gt;3.4 DA 服务&lt;/h2&gt;
&lt;p&gt;DA 在 Rollup 里是非常重要的模块，它不仅让 L1 了解到 L2 上发生的交易，还是安全性的重要来源。以 OP Rollup 为例，当社区节点对 Sequencer 提交的 L2 状态根有异议，对其发起挑战时，需要在 L1 上重放有歧义的交易或 opcode，从而确认哪一方是对的。挑战中需要在合约里提交这个有歧义的交易或 opcode，此时需要使用之前提交的 DA 数据来验证挑战中提交的内容与 DA 数据是一致的。因此 DA 数据必须是可以被所有社区成员获取的，并且是可以被验证的。&lt;/p&gt;

&lt;p&gt;最简单和安全的 DA 方案是使用以太坊 L1 作为 DA，所有 L2 交易数据被压缩后，通过 calldata 方式提交到 L1，并保存于 L1 的区块数据里。因此当挑战发生时，仅需从 L1 区块数据里便能读出所有所需的 DA 数据，不存在数据扣留风险。但 calldata 是要消耗以太坊 L1 的区块 gas 的，以太坊 L1 区块有 gas limit，因此以太坊 L1 的 gas limit 将直接决定 Rollup 扩展性能的上限。按测算，以当前的 gas limit 计算，即使所有区块 gas fee 都用作 DA，也仅能将以太坊 TPS 提升至几千级别。即使采用 L2+L3 的架构，仅使用以太坊作为 DA，也无法进一步提升性能。因为交易数据的压缩是有限的，一笔 L3 上发生的交易，压缩后提交到 L2，再由 L2 提交到 L1，其压缩率并不会比 L2 上直接提交的交易更高。&lt;/p&gt;

&lt;p&gt;因此服务于 DePIN 的 Rollup，需考虑使用第三方 DA。该 DA 需解决数据扣留攻击的风险，即发布给 DA 的数据必须能够全部无条件被任何人公开获取，任何 DA 节点都没有能力扣留住数据不对外公布。因此 L3 Sequencer 仅需将交易数据发送到第三方 DA，并将如何获取该 DA 数据的方式（如 Celestia 上的名字空间和数据 commitment）和数据承诺等提交至 L2（即结算层）即可。L3 上的其他节点可以在 L2 上获取相关数据后，各自从第三方 DA 获取交易数据，完成链上状态的计算和挑战等工作。通过使用第三方 DA，交易数据不再大量消耗以太坊 L1 的区块 gas，这给以太坊 L1 带来了近乎无限的扩展能力，这也是 DePIN 项目所需的能力。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://i2.mjj.rip/2024/06/09/db2b7044004aa90f0684f9d925f67887.webp" title="" alt="db2b7044004aa90f0684f9d925f67887.webp"&gt;&lt;/p&gt;

&lt;p&gt;DA 服务一般采用 DAS(Data Availability Sample) 防止数据扣留，DAS 一般基于 Reed-Solomon 编码。假设交易数据有 N bytes，将 N bytes 交易数据转换为一个 (N-1) 阶多项式，交易数据就是该多项式的系数，即它们是该多项式上的 N 个点。在该多项式的曲线上随机抽取另外 N 个点，则使用这 2N 个点中的任意 N 个即可恢复原始数据。DA 网络中有大量轻客户端，轻客户端会分别随机对数据进行抽样。如果第一次抽样中数据可正常返回，则证明至少 50% 的数据是可获取的，进行第二次抽样时数据仍可返回，则证明至少 75% 的数据是可获取的，抽样成功的次数越多，则数据扣留的几率越小。当不重复的抽样达到 N 次及以上时，则通过已抽样数据就可以恢复所有数据，不存在数据扣留的可能性。抽样失败的节点会被惩罚。&lt;/p&gt;

&lt;p&gt;使用第三方 DA 服务将交易数据存储在以太坊之外，虽然流程变复杂了，安全性上需要额外信任第三方 DA 服务，但它可以极大降低对以太坊上 gas fee 的消耗，进而将以太坊的性能扩展极限提升至几乎无限，并可以极大地降低 Rollup 使用成本，因此是值得的。Celestia, EigenDA 等均提供成熟的，高性能的 DA 服务。&lt;/p&gt;
&lt;h2 id="3.5 存储服务"&gt;3.5 存储服务&lt;/h2&gt;
&lt;p&gt;存储服务与 DA 服务不同。DA 服务的目标是数据公开和分发，专门保存 Rollup 里的 DA 交易数据，服务于 Rollup 安全，相当于区块链的区块数据；而存储服务用于保存 PW 或 PoPW 数据，即 IoT 设备上生成的工作数据，主要为链下数据。&lt;/p&gt;

&lt;p&gt;不同的 DePIN 项目对 PW 数据有不同的保存需求，有的需要有一定的隐私保护能力，需要对数据做脱敏或权限管理；有的需要长期保存数据，甚至永久保存。因此不同 DePIN 项目可以按自己实际需求选择合适的存储服务。&lt;/p&gt;
&lt;h2 id="3.6 全链 DID 服务"&gt;3.6 全链 DID 服务&lt;/h2&gt;
&lt;p&gt;不同 DePIN 项目间可以互相协作，构建更丰富的 DePIN 生态。这需要能跨项目地为每个 IoT 设备提供唯一标识，且能依据此标识获取关于该设备的各种数据（如密码学能力，公钥等），DID 可以提供该服务。因为不同 DePIN 项目可能位于不同链上，因此该 DID 服务需要提供全链服务能力，即在系统内支持的所有链上，每个 IoT 设备均具有不重复的 DID，且通过该 DID 可获取该设备的数据。&lt;/p&gt;

&lt;p&gt;让不同链上的任意设备具有不重复的 DID，有两种常见方案：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;具有统一的 DID 注册和更新入口，注册时检查其是否重复，再同步到所需的链。&lt;/li&gt;
&lt;li&gt;确定各条链的命名规则，通过命名空间保证 DID 不重复。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;在当前场景下，方案 b 是不合适的。因为当需要多个 DePIN 项目间协作，获取其他链上设备的 DID 时，不可能通过跨链查询完成，最好的方式是把需要的设备 DID 可信地同步到每条需要的链上（由于采用 L3，实际成本并不高），并在这些链之间保证数据一致性。对方案 b 来说，会导致名字空间的混乱，且无法保证数据一致性。因此此处考虑方案 a。方案 a 中包含 3 部分：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;位于 Arweave 上的 DID 合约。该合约保存所有 DID 的数据。所有 DID 均需在此合约中完成注册；DID 数据的更新也需调用此合约完成。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PermWeb 里的服务程序。可对 Arweave 上 DID 合约的数据进行查询，加工和处理。其中 Merkle 根部分是一个特殊的服务，它会把 DID 合约里的所有 DID 数据计算生成一棵 Merkle 树，并把树根依照多种策略提交至各个 DePIN App Chain 的 DID 服务合约中。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;位于各条 DePIN App Chain 上的 DID 服务合约。这些合约服务于各自所在的链，即每条链上用到的 DID 均保存在该合约中。该合约只有导入接口，没有注册和修改接口。当导入一条新的 DID 时，需通过之前输入的 Merkle 根对该 DID 进行正确性校验，校验通过才允许导入。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://i2.mjj.rip/2024/06/09/9154068d86ab429a45d191e610c0cb37.webp" title="" alt="9154068d86ab429a45d191e610c0cb37.webp"&gt;&lt;/p&gt;

&lt;p&gt;工作流程分为三步：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;所有设备在 Arweave 的智能合约里注册其 DID，注册时会检查名字是否冲突，冲突的名字不允许注册，需修改为不重复方可注册。注册时除了 DID，还可以提供设备的其他属性，如公钥，设备 id，设备能力，访问方式等。&lt;/li&gt;
&lt;li&gt;所有注册设备的 DID 数据会 PermWeb 上的 Merkle 树服务计算生成一棵 Merkle 树，树根会被依照策略提交至各条 DePIN App Chain 的 DID 服务合约中。&lt;/li&gt;
&lt;li&gt;将 DID 按需导入至目标 DePIN App Chain 的 DID 服务合约中。导入时的 Merkle 验证会保证导入的 DID 数据与注册时的一致。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Arweave 不仅提供永久数据保存，而且其支持 EVM 合约和通过 PermWeb 对保存的数据进行查询和处理，因此非常适合用来保存全链 DID 数据。DID 数据的条目虽然多，但所需的总存储量并不大，因此其成本也是合适的。&lt;/p&gt;
&lt;h2 id="3.7 密钥可信初始化"&gt;3.7 密钥可信初始化&lt;/h2&gt;
&lt;p&gt;IoT 设备安全容器中保存的密钥是验证 PoPW 的信任来源，必须做到密钥被安全可信地初始化，私钥不可被任何一方读出，公钥可被提交至 DID 合约中，供任何人通过 DID 读取。可信初始化有多种可能方式：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;在芯片生产和初始化阶段，由生产商直接操作安全容器，完成密钥对的生成，并读出公钥，将公钥数据提供给购买方，即 DePIN 项目方。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;通过去中心化 TSM（Trusted Service Manager）系统进行空中初始化。DePIN App Chain 会构建去中心化 TSM 服务网络，通过去中心化方式和密码学算法，配合通用的芯片内安全容器接口，完成密钥对的初始化过程，并读出公钥，直接写入 DID 合约。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;方案一是业界成熟方案，成本低，适合一次性大批量初始化芯片。安全容器可以位于通信模组中，而通信模组可以适配到各种不同用途的 IoT 设备中，因此可将其作为通用产品使用。可以一次性批量生产大量芯片后，向多个不同 DePIN 项目方供应该芯片。并由芯片生产方或可信第三方批量在链上初始化 DID 数据。&lt;/p&gt;

&lt;p&gt;方案二更加灵活，可在任意阶段通过无线网络和去中心化 TSM 网络完成对芯片内密钥对的初始化。由于密钥种子来自多个去中心化参与方，因此只要去中心化 TSM 网络中有一个诚实参与方，整个流程就是安全可信的，没有任何参与方可以解码出芯片内的私钥。&lt;/p&gt;
&lt;h2 id="3.8 经济学支持"&gt;3.8 经济学支持&lt;/h2&gt;
&lt;p&gt;经济学是 DePIN 项目的引擎和重要组成部分。DePIN 项目可以使用自己的 Token，也可以使用生态 Token 作为项目 Token。甚至可以两者兼而有之，在项目启动阶段使用有价值的，已经被认可的生态 Token 作为激励和应用 Token，迅速推进网络建设并获得用户和价值支撑，降低使用摩擦；在发展壮大后将网络规模和服务能力作为价值支撑，转换为使用自己的 Token 获得更高的价值捕获。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://i2.mjj.rip/2024/06/09/94d54b88de090c2d080db7fb5321ae63.webp" title="" alt="94d54b88de090c2d080db7fb5321ae63.webp"&gt;&lt;/p&gt;

&lt;p&gt;多个 DePIN 项目使用统一的生态 Token 可以形成合力，对项目方和 DePIN App Chain 生态的发展都有好处。从 DePIN App Chain 生态的角度而言，更多项目使用生态 Token，可以捕获更多价值，也给生态的发展带来更多可能性；从项目方角度而言，在项目启动阶段其网络价值较低，不易吸引用户，此时如果使用已经具有价值的生态 Token，可以提高项目价值，降低用户使用的摩擦；从终端用户和投资者角度看，拥有生态 Token 便可以使用多种 DePIN 应用服务，获取多个项目成长的预期，是件方便划算的事情。&lt;/p&gt;

&lt;p&gt;除了 Token 经济学外，DePIN 项目的发展还需要很多其他生态经济支持，如 DEX, 借贷等传统 DeFi 支持；除此之外，鉴于 DePIN 的 RWA 属性，也会产生现实世界里的法币需求。DePIN App Chain 生态会对接多种工具，帮助项目方构建链上链下的经济学，帮助项目成长。&lt;/p&gt;
&lt;h2 id="3.9 全链服务"&gt;3.9 全链服务&lt;/h2&gt;
&lt;p&gt;由于各种原因，DePIN 项目方可能会将其项目部署在各种各样的区块链网络上，如 polygon, Solana 等 L1 网络，或 Arbitrum, Optimism, zkSync 等 L2 网络。&lt;/p&gt;

&lt;p&gt;通过上述分析，读者们会发现各项核心服务并不依赖于特定区块链。只要在某条区块链上部署了区块链服务合约，并通过跨链将管理链上可信的服务实体（BoAT3 Oracle），数据 (DID) 或资产（DePIN 生态 Token 等）在该区块链上实例化，该区块链就可以成为应用链中的一员，与其他基于 DePIN App Chain L3 构建的应用链所获得的能力几乎是一样的。唯一的区别在于，由于链的运行原理不同，这条区块链可能并没有结算层，或其结算层不是现有的管理链，因此该链无法在系统内与其他链进行无信任的跨链协作，但这可以通过其他跨链方式完成。&lt;/p&gt;
&lt;h2 id="4. 示例"&gt;4. 示例&lt;/h2&gt;
&lt;p&gt;下面以一个简单的示例来说明怎样基于 DePIN App Chain 生态构建一个 DePIN 项目。例子中的各项基础设施，从 IoT 设备到数据平台的服务，都是成熟可购买的，但项目的设计，资源的整合，社区的运营和服务，需要项目方精心设计和落地。&lt;/p&gt;

&lt;p&gt;该例子使用太阳能电池，构建一个去中心化绿色能源网络，该网络旨在促进清洁能源的生产和使用。项目方收集太阳能电池发电的数据，以此数据证明清洁能源的生产过程是可信的，并依据此数据发出绿证。绿证可用于碳排放抵消，比特币绿化等多种场景。除绿证收入外，项目方通过发行的 Token 鼓励矿工们构建该绿色网络。&lt;/p&gt;

&lt;p&gt;太阳能电池的发电数据可通过连接逆变器的数采器获得。矿工们可以直接购买集成好项目方的数采器的光伏系统，也可以购买项目方提供的数采器后自行安装。项目方生产数采器时会使用已经内置了密钥的安全芯片，项目方委托供应商在链上生成 DID，并写入公钥（项目方也可获得公钥后自行生成 DID，并写入公钥）。&lt;/p&gt;

&lt;p&gt;电池板发电过程中会不断产生发电数据，如实时发电功率，发电量等。数采器会对这些数据进行采样，并发送给通信模块；数采器中的安全芯片会使用私钥对这些数据签名，即生成 PoPW，然后将 PoPW 发送给 BoAT3 Oracle。BoAT3 Oracle 根据收到的数据从 DID 合约中读取该电池板的公钥，通过公钥验证收到的 PoPW 的合法性。如果数据是合法的，则会提取出其中的有效数据部分，并使用自身私钥对其签名，表示对数据的认可，由 BoAT3 Oracle 签名的数据称为 PW（Physical Work）。BoAT3 Oracle 会将 PW 提供给项目方，项目方会将收集到的 PW 数据和原始 PoPW 签名批量保存至存储网络，如 FIL，Arweave 或云存储。&lt;/p&gt;

&lt;p&gt;项目方会针对提供了有效发电数据的矿工进行奖励。奖励使用 DePIN 生态 Token。为了降低链上成本，可能会随机抽取部分矿工发放奖励，因为抽取是随机的，所以从更长时间来看，所有诚实的矿工都会公平地收到奖励。奖励数量由矿工的发电量决定，会将发电量抽象为奖励权重，计算所有获奖矿工的总权重后，每个矿工按自己的发电量权重获取奖励。项目方在链下计算每位矿工获得的奖励，并通过 Oracle 发放奖励。但同时会将奖励计算相关的所有数据公开至存储或 DA 网络，供社区验证和挑战。发放奖励时在合约中提供的数据至少包括：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;本次奖励发放的期数相关数据。通过此数据可确定哪些矿工，哪些数据参与了此次奖励发放。&lt;/li&gt;
&lt;li&gt;用于计算哪些矿工获得奖励的随机数。&lt;/li&gt;
&lt;li&gt;如何获得 PW 原始数据。如使用的 IPFS 网络及文件 CID。&lt;/li&gt;
&lt;li&gt;奖励细节的 Merkle 树树根和总权重。该 Merkle 树包含了每个获奖矿工的获奖相关数据，如 PW 数据 ID，矿工 DID，奖励数量等。确保挑战时可通过这些数据在链上验证奖励发放规则是否被严格遵守。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;针对本次奖励发放，开启挑战期。在挑战期内，任何人均可针对奖励的公平性，正确性发起挑战，包括矿工获得的奖励数量是否正确，未获得奖励的矿工是否确实不该获得奖励，等等。这些挑战均在链上，使用 Oracle 提交的数据完成，而这些数据进一步都来自于矿工提交的 PoPW，任何人都可以独立下载并验证所有数据和奖励的公平性。挑战期结束后，矿工可以提取奖励。&lt;/p&gt;

&lt;p&gt;提取奖励后，矿工可以将获得的 DePIN 生态 Token 在 CEX，DEX 等兑换成稳定币或法币，补贴其购买和运行矿机的成本，形成正向经济循环。DePIN 网络向终端用户提供服务，如碳排放抵消，绿化比特币等；这些服务的价格是稳定的，终端用户可以购买生态 Token 后，将其燃烧铸造成价值稳定的应用 Token，使用应用 Token 购买各种服务。&lt;/p&gt;

&lt;p&gt;在购买矿机的过程中，矿工也许需要资金进行初始投资的资助。可以使用 DePIN App Chain 生态的链上借贷服务获取资金，资金的回报可通过挖矿所得的生态 Token 或服务于终端用户所得的应用 Token 支付。由于挖矿等活动均在链上完成，因此资金回报可通过智能合约自动完成利润计算，将利润分账至资金方。&lt;/p&gt;
&lt;h2 id="5. 总结"&gt;5. 总结&lt;/h2&gt;
&lt;p&gt;Rollup 技术解决了区块链扩容难题，使得区块链可以在保持高度安全，可信的前提下，获得极大的性能扩展和极低的使用成本，这给 DePIN 应用的大规模落地创造了条件。&lt;/p&gt;</description>
      <author>aaa</author>
      <pubDate>Sun, 09 Jun 2024 01:09:27 +0800</pubDate>
      <link>https://soldev.cn/topics/25</link>
      <guid>https://soldev.cn/topics/25</guid>
    </item>
  </channel>
</rss>
