您正在查看: 2024年12月

Solana版本分布与选择

查看版本分布

https://www.validators.app/?locale=en&network=mainnet

目前主要版本在 2.0.15 - 2.0.18

solana 官方最新版本为v1.18.26
https://github.com/solana-labs/solana

agave 最新版本为 v2.0.18
https://github.com/anza-xyz/agave/

说明目前solana 目前网络主要运行的agave版本

从anza消息来看,核心的开发都转到了agave, 现有solana-labs/solana会逐步被废弃

https://medium.com/anza-xyz/anza-github-migration-faq-9ab94e03f8dc

如果我有新的 PR,我应该将其提交给 Agave 还是旧的 Solana Labs repo,为什么?新的 PR 应该提交给 anza-xyz/agave。solana-labs/solana repo 将很快存档。

旧的 Solana Labs 仓库会怎样? Solana Labs monorepo 最终将变为非活动状态。它不会立即归档,因为那里的问题更容易就地解决,但很快就会归档。这将是一个长达数月的过程,Agave 客户端会镜像 Solana Labs 客户端,然后两者会分道扬镳,Solana Labs 客户端将完全变为非活动状态

Solana 开发入门

Solana 的开发可以分为两个主要部分:

  1. 链上程序开发:在这里您可以创建自定义程序并将其直接部署到区块链。部署后,任何知道如何与它们通信的人都可以使用它们。您可以用 Rust、C 或 C++ 编写这些程序。Rust 目前对链上程序开发的支持最多。
  2. 客户端开发:在这里,您可以编写与链上程序通信的软件(称为去中心化应用程序或 dApp)。您的应用程序可以提交交易以在链上执行操作。客户端开发可以用任何编程语言编写。

客户端和链上端之间的“粘合剂”是 Solana JSON RPC API。客户端向 Solana 网络发送 RPC 请求以与链上程序交互。这与前端和后端之间的正常开发非常相似。使用 Solana 的主要区别在于后端是一条全球无权限区块链。这意味着任何人都可以与您的链上程序交互,而无需颁发 API 密钥或任何其他形式的权限。

客户端SDK

Language SDK
RUST solana_sdk
Typescript @solana/web3.js
Python solders
Java solanaj or solana4j
C++ solcpp
Go solana-go
Kotlin solanaKT or sol4k
Dart solana
C# solnet
GdScript godot

您还需要与 RPC 建立连接才能与网络交互。您可以与RPC 基础设施提供商合作,也 可以运行自己的 RPC 节点

脚手架

为了快速开始使用应用程序的前端,您可以通过在 CLI 中输入以下内容来生成可定制的 Solana 脚手架:

npx create-solana-dapp <project-name>

这将创建一个新项目,其中包含开始在 Solana 上构建所需的所有文件和基本配置。脚手架将包含一个示例前端和一个链上程序模板(如果您选择了一个)。您可以阅读文档 create-solana-dapp以 了解更多信息。

测试框架

测试实例

当你开始在 Solana 上进行构建时,还有一些资源可帮助你加速你的旅程:

  • Solana Cookbook:参考资料和代码片段的集合,可帮助您在 Solana 上进行构建。
  • Solana 程序示例:示例程序库,为程序上的不同操作提供构建块。
  • 指南:教程和指南引导您在 Solana 上进行构建。

获取支持

https://solana.stackexchange.com/

Solana Playground (Solpg) - 类似以太坊Remix的web开发环境

网址

Solana Playground (Solpg) https://beta.solpg.io

使用步骤

  1. 连接到 Playground
    点击屏幕左下方的“未连接”按钮

  2. 创建你的钱包
    您将看到一个保存钱包密钥对的选项。(可选)保存钱包密钥对以进行备份,然后单击“继续”。

    您现在应该在窗口底部看到您的钱包地址、SOL 余额和连接的集群(默认为 devnet)。

    您的 Playground 钱包将保存在浏览器的本地存储中。清除浏览器缓存将删除您保存的钱包。

  3. 获取 Devnet SOL
    从开发人员的角度来看,SOL 主要有两个用途:

    1. 创建可以存储数据或部署程序的账户
    2. 与网络交互时支付交易费用

以下是使用 devnet SOL 为你的钱包提供资金的两种方法
选项 1:使用 Playground 终端
要使用 devnet SOL 为您的 Playground 钱包提供资金,请在 Playground 终端中运行:

solana airdrop 5

选项 2:使用 Devnet Faucet
如果空投命令不起作用(由于速率限制或错误),您可以使用Web Faucet

  • 输入你的钱包地址(位于 Playground 屏幕底部)并选择金额
  • 单击“确认空投”以接收您的 devnet SOL

Beam-SNARK 的工作原理

零知识简洁非交互式知识论证 (Beam-SNARK) 是一种开创性的方法,它允许人们在不透露任何其他信息的情况下证明陈述的真实性。但这为什么有用呢?

零知识证明有广泛的应用场景,例如:

1. 关于私人数据的证明陈述:

  • 确认某人的银行余额超过某个限额,但不透露具体金额。
  • 核实银行在过去一年内没有与特定实体进行过交易。
  • 匹配 DNA 样本但不透露完整的基因图谱。
  • 显示高于一定值的信用评分但不透露详细信息。

2. 匿名授权

  • 证明用户有权访问网站的限制区域,而无需分享其身份(例如登录凭据)。
  • 确认在授权地区的居住权但不透露具体位置。
  • 在不透露身份的情况下验证有效地铁通票的所有权。

3. 匿名支付:

  • 无需关联身份即可进行付款。
  • 不披露收入而纳税。

4. 外包计算:

  • 委托复杂的计算,同时确保结果正确,无需重复工作。
  • 将区块链模型从通用计算转变为一方计算、其他方验证的模型。

零知识证明的底层数学和密码学简直就是奇迹。自 1985 年开创性的论文“交互式证明系统的知识复杂性”以来,该领域已经活跃了四十多年。非交互式证明的引入在区块链环境中尤为关键。

在任何零知识证明系统中,都有两个关键参与者:

  • 证明者:想要让验证者相信某个陈述的真实性的人。
  • 验证者:无需获取任何额外知识即可检查证明者主张的有效性的人。

该系统必须满足三个核心属性:

  1. 完整性:如果陈述是真实的,则证明者可以说服验证者。
  2. 健全性:作弊的证明者无法让验证者相信错误的陈述。
  3. 零知识:交互仅揭示陈述是否真实,而不揭示其他任何内容。

Beam-SNARK 将这些原理应用于通用计算,为实际应用提供了一个优雅的解决方案。

证明的媒介

为了理解 Beam-SNARK,让我们从一个简单的例子开始,而不深入研究零知识或交互性。

假设我们有一个 10 位的数组,并且我们想要向验证者(例如,程序)证明所有位都设置为 1。

假设我们有一个长度为 10 的位数组,并且我们想要向验证者(例如程序)证明所有这些位都设置为 1。

验证者每次只能检查一位。为了验证该声明,验证者可以按随机顺序检查位:

  • 一次成功检查后,验证者对该声明的信心为 10%。
  • 如果某个位为 0,则该断言立即被推翻。
  • 为了获得更高的置信度(例如 50% 或 95%),验证者必须执行更多检查,与阵列的大小成正比。这种方法对于大型数据集来说不切实际。

相反,我们可以利用具有独特属性的多项式。多项式在图形上显示为曲线,由数学方程定义。

上图曲线对应多项式:f(x) = x³ — 6x² + 11x — 6。多项式的次数由其 x 的最大指数决定,在本例中为 3。

多项式有一个优点,即如果我们有两个次数最多为 d 的不相等多项式,它们最多只能在 d 个点处相交。例如,让我们稍微修改一下原始多项式 x³ — 6x² + 10x — 5,并将其可视化为绿色:

如此微小的变化会产生截然不同的结果。事实上,不可能找到两个不相等的多项式,它们共享一条连续的曲线块(单点块的情况除外)。

此属性源自查找公共点的方法。如果我们想找到两个多项式的交点,我们需要使它们相等。例如,要找到多项式与x轴的交点(即f ( x ) = 0),我们使x ³ — 6 x ² + 11 x — 6 = 0相等,并且该等式的解将是这些公共点:x = 1、x = 2 和x = 3,您也可以清楚地看到,在上图上蓝色曲线与x轴线相交的位置,情况确实如此。

同样,我们可以将原始多项式和修改后的多项式相等来找到它们的交点。

所得到的多项式是 1 阶的,显然有一个解x = 1。因此只有一个交点:

对于任意次数为d 的多项式,任何此类方程的结果始终是次数最多为d的另一个多项式,因为没有乘法可以产生更高的次数。例如:5 x ³ + 7 x ² — x + 2 = 3 x ³ — x ² + 2 x — 5,简化为 2 x ³ + 8 x ² — 3 x + 7 = 0。代数基本定理告诉我们,次数为d 的多项式最多可以有d 个解(更多内容见下文),因此最多有d 个共享点。

因此,我们可以得出结论,在任意点处对任何多项式的求值类似于对其唯一身份的表示。让我们在x = 10 处求值示例多项式。

事实上,在所有要评估的x选择中,只有最多 3 个选择在这些多项式中具有相同的评估,而所有其他选择都会有所不同。

这就是为什么如果证明者声称知道某个多项式(无论其度数有多大),而验证者也知道的话,他们可以遵循一个简单的协议:

  • 验证者为x选择一个随机值,并在本地评估多项式
  • 验证者将x提供给证明者,并要求其计算相关多项式
  • 证明者在x 处评估多项式,并将结果提供给验证者
  • 验证者检查本地结果是否等于证明者的结果,如果是,则该语句具有很高的置信度

例如,如果我们考虑x的整数范围从 1 到 1⁰⁷⁷,则评估不同的点数为 1⁰⁷⁷ — d 。因此, x意外“击中”任何d个共享点的概率等于(这被认为是可以忽略不计的):

注意:与低效的位校验协议相比,新协议仅需要一轮,并且对该声明具有压倒性的信心(假设 d 足够小于范围的上限,则几乎为 100%)。

这就是为什么多项式是 Beam -SNARK的核心,尽管也可能存在其他证明媒介。

原文:https://medium.com/@Moonchain_com/why-and-how-beam-snark-works-94f703cf1413