本文深入探讨了Solana区块链及其程序库(SPL),重点介绍了如何使用SPL快速开发和部署去中心化应用。文章详细阐述了Solana的账户模型、并行处理机制以及SPL的使用方法,为开发者提供了实现自己代币的实用步骤和命令,适合新手和有经验的开发者。
Solana 是一个高速可编程区块链,允许开发者构建和部署去中心化应用程序。Solana 维护一个专门的文档库,称为 Solana 程序库——这是一个用于 Solana 区块链上的预编译、部署和优化程序(即智能合约)的集合。
在本文中,我们将探索 Solana 的世界,并了解如何通过 Solana 程序库快速开发。不论你是 Solana 的新手还是经验丰富的开发者,你都可以轻松创建和部署自己的自定义代币或去中心化交易所(SPL)。
Solana 中的程序是存储在名为帐户的缓冲存储中的可执行代码,可以通过事务执行,类似于以太坊或其他可编程区块链上的智能合约。 然而,与以太坊不同,在以太坊中,程序和状态存储在智能合约中,而 Solana 采用了一种 无状态程序模型 方法,其中数据和程序存储在帐户中。
根据 Solana 文档,“帐户是 Solana 字典中的一个记录,它可以持有数据或是一个可执行程序 。 ”
可以把 Solana 想象成一个数据库,其中 帐户 是行,公钥充当 ID,值是存储在帐户中的信息。现在,这些信息可以以程序(即 智能合约)或程序的数据/状态的形式存在。
帐户可以通过一个独特的公钥(256 字节)来识别,通常看起来类似于:“DM6n1qcUCLzJ1RaAuA4gUbBZ9sfHP6KvEwX8oExQqPhk”。
Solana 在代码和其数据之间有一个逻辑分离,这导致存在两种类型的帐户——可执行帐户和非可执行帐户。
仅存储不可变程序代码并被标记为 ‘可执行’ 的帐户。
这些帐户存储其程序可能使用的所有数据,包含变量、资产以及程序的状态。尽管任何人都可以读取这些帐户中的数据,但只有程序的所有者(部署者)可以更改它。
这些帐户由 验证节点 维护,它们收取一种称为 租金 的维护费用,以换取存储上述信息的内存空间。租金以 lamports 支付——这是 SOL(Solana 的原生代币)的分数单位。
由于一个名为 Sealevel Parallel Runtime 的系统,Solana 的代码和程序数据被分开维护。
Sealevel Parallel Runtime 是 Solana 实现了一种并行事务处理系统。 传统的单线程区块链,如以太坊,一次只能处理一个事务以避免并发。这是因为以太坊的智能合约是 有状态的 ——意味着状态和代码被耦合在同一合约中。
通过 Sealevel 的帮助,Solana 可以并行处理数千个不冲突的事务。利用多个验证器核心,Solana 还可以以 400 毫秒的块时间执行高达 50,000 Tps。这是可能的,因为事务指令是无状态的,并且它们事先决定义要修改哪个帐户的数据。因此,不共享相同帐户数据的程序可以同时运行。
Solana 的生态系统包括两种不同类型的程序——原生程序和链上程序。 让我们看一下这两者。
原生程序负责实现 Solana 网络的核心功能,如管理账户存储的分配、创建新帐户、处理事务和执行 Solana 网络的规则。
原生程序是 Solana 核心区块链模型的一个重要组成部分。它们通常用低级语言编写,如 Rust 和 C/C++,并针对性能和安全进行了优化。原生程序可以由任何程序/用户调用,而你操作系统中的内核级程序则不能被用户直接调用和访问。
更新这些程序只能作为核心区块链升级或集群升级的一部分,以添加功能、修复错误或提高性能。
有许多原生程序帮助保护验证者。其中一些是:
系统程序负责创建新帐户,在两个帐户之间转移 SOL,分配帐户所有权,以及执行更多此类帐户管理操作。
伯克利数据包过滤器处理链上程序的部署、升级和执行。
流动性程序负责管理 SOL 代币在 Solana 区块链上的质押。
链上程序是用户编写的程序(即智能合约),直接部署在区块链上。 这些程序可以是 dapp、交易所、练习合约、多重签名钱包实现或任何其他通用程序。
与原生程序不同,链上程序并不是 Solana 集群的核心。相反,它们是由开发者在 Solana 区块链上创建和部署的自定义程序。这意味着链上程序在 Solana 区块链的运行中并不是必需的。
它们建立在原生程序提供的核心基础设施之上,使开发者能够在 Solana 区块链上构建各种应用程序和服务。
程序交互的数据存储在单独的数据帐户中,并通过指令作为引用传递。只有帐户所有者才能升级程序数据。
Solana 中的程序
Solana 程序库 (SPL) 是一组预先编写的模块化程序,可以用于在 Solana 区块链上构建去中心化应用程序 (dapps)。 SPL 的目标是通过提供一套可重用的模块组件,使开发者更容易创建 dapps,这些组件可以轻松集成到他们的应用程序中,从而减少开发者从零开始编写复杂代码的需要。
因此,SPL 使开发者能够采用“构建块”的方法构建 dapps,每个组件都可以轻松集成到应用程序中。
SPL 包含多个链上通用程序,其中代币程序及其变体是最受欢迎的,这可以帮助将它们融入你的项目,而无需从头开始实现。
要与 SPL 进行交互,你可以选择 CLI 方法或常用的 JS 方法,该方法结合了 solana/web3.js 以便让你的 JavaScript 代码与 Solana 区块链进行交互。
要与任何 Solana 集群进行交互,你还必须 设置 Solana CLI(命令行接口)。CLI 可能不是初学者最友好的工具,但它提供了访问你的 Solana 帐户最直接和最安全的方式。此外,CLI 是 Solana 核心开发者默认部署新功能的首个地方。
SPL 代币程序是 Solana 区块链上可替代代币和非可替代代币的通用实现。 它提供了一个接口和详细的实现,使开发者可以创建自己的代币。代码是用 Rust 原生编写的,其自动生成的绑定可在 C 和 JavaScript 中使用。源代码可在 SPL GitHub 仓库 中找到。
在以太坊中,ERC20 代币程序与以太坊 ERC-20 合约的工作方式不同。让我们举个例子来理解这一差异:
假设你想在以太坊区块链上发布三种不同的代币。要做到这一点,你必须为每个代币部署三份单独的合约。而每个代币合约都将跟踪其各自的状态(例如余额和转账)。
当涉及到 Solana 时,无需部署三份独立的代币程序。相反,你可以部署一个通用代币程序,可以在多个帐户上操作(例如,铸造和接收帐户)。
铸造地址将唯一标识代币类型。此信息可以作为参数传递给一个已经部署在 Solana 链上的单一静态 ERC20 程序实例。
借助 SPL 代币程序,你可以在几个步骤内创建可替代代币。在深入代币程序之前,请确保你已设置好 CLI 钱包,或 将你的 Phantom 钱包连接到 Solana 的 Devnet,并 空投足够的 Devnet SOL 到你的钱包中。
创建代币命令是对链上 SPL 代币程序的一个指令,以创建一个新代币。成功创建代币后,我们将收到一个代币 ID 以及事务签名。但确实,我们仍然需要铸造它们。
这是代币命令:spl-token create-token
运行 spl-token create-token 命令的结果
为了在单独的数据帐户中存储与我们的代币相关的信息。 代币帐户 由 SPL 代币程序拥有,该程序控制这些代币的访问权限以及 所有者 字段(这是我们的代币 ID,可以支出/转移代币)。
由于这是一个数据帐户,因此其数据可以由代币程序通过添加/铸造、转移或销毁代币来修改。
这是代币帐户创建命令:spl-token create-account
正如你在下面看到的,我们通过创建代币及其相关帐户失去了一些最小的 SOL 作为交易费用。同时,请注意初始供应量为零。这意味着我们必须通过铸造代币来添加所需的供应量。
运行 spl-token create-account 命令后的余额。
要铸造给定数量的代币,请运行以下命令:
spl-token mint
一旦命令执行,所述数量的代币将被铸造到你的文件系统钱包中,而代币供应量将得到更新。
铸造 2000 个代币后的结果
你可以通过运行以下命令检查当前代币供应量和与代币相关的帐户:
spl-token supply
spl-token accounts
检查 spl-token 供应量和帐户余额的结果
现在,让我们将代币转账到我们的 Phantom 钱包 — Solana 上一个流行的钱包。
计划是转移 ‘x’ 数量的代币给接收者——我们的 Phantom 钱包。‘资金接收者’ 负责为接收者创建一个代币帐户,如果该帐户不存在。这被称为创建 关联代币帐户。
这是转移代币的命令:
spl-token transfer --fund-recipient
代币转账结果
你将在转移成功后收到一条成功消息。
Phantom 钱包转移成功消息
你可以通过运行以下命令验证转移: spl-token accounts
注意:如果你运行代币供应命令,它仍然会显示 2000 个代币,因为供应指的是在网络中流通的代币数量,而余额则指的是你的代币帐户所持有的代币数量。
代币余额与代币供应
合约安全性和需求的一个关键方面是限制代币供应。要禁用铸造功能,只需将铸造权限设置为 ‘None’。
禁用代币铸造权限的命令: spl-token authorize mint --disable
在禁用铸造之前多铸造了 3000 个代币
禁用铸造权限的结果
如果你想减少代币供应,你可以选择销毁它。
这是销毁的命令: spl-token burn
销毁 SPL 代币
一旦销毁,供应和余额都会减少。如你所见,在这个例子中,我们的余额从 4978 降至 3978,供应量减少至 4000。
SPL 代币销毁结果
SPL 提供了完整的参考指南,说明如何使用代币程序执行更多操作,例如:
使用代币包装 SOL。
转移代币到指定的接收代币帐户。
创建非可替代代币。
Solana 程序库拥有一系列预发布的链上程序,可以轻松与之互动。借助 SPL,开发者可以专注于其 dapps 的独特功能和特性,而不是花时间在基本的、模板化的代币创建代码上。
- 原文链接: alchemy.com/overviews/so...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!