Sealevel — 并行处理数千个智能合约 | Solana

文章详细介绍了Solana区块链中的Sealevel技术,即并行处理数千个智能合约的运行时环境,并解释了Solana如何通过并行处理实现高性能。

了解使 Solana 成为世界上性能最强区块链的8项关键技术之一

Solana 是世界上性能最强的无许可区块链。在当前版本的 Solana 测试网络上,一组 200 个物理不同的节点在使用 GPU 运行时支持超过 50,000 笔的持续交易吞吐量。要实现这一点,需要实施多个优化和新技术,结果是网络容量的突破,标志着区块链发展新阶段的到来。

有八项关键创新,使得 Solana 网络成为可能:

在这篇博文中,我们将探讨 Sealevel,Solana 的并行智能合约运行时。在开始之前,要考虑的一件事是,EVM 和 EOS 的基于 WASM 的运行时都是单线程的。这意味着一次只能有一个合约修改区块链状态。而我们在 Solana 中构建的是一个能够并行处理成千上万合约的运行时,使用可用的 Validator 核心数量。

Solana 能够并行处理交易的原因在于,Solana 交易描述了交易在执行过程中将要读取或写入的所有状态。这不仅允许不重叠的交易同时执行,还允许仅读取相同状态的交易并发执行。

程序和账户

Cloudbreak,我们的账户数据库,是一个公共密钥到账户的映射。账户维护余额和数据,其中数据是字节的向量。账户有一个“所有者”字段。所有者是管理账户状态转移的程序的公共密钥。程序是代码,没有状态。它们依赖于分配给它们的账户中的数据向量进行状态转移。

  1. 程序只能更改它们拥有的账户的数据。
  2. 程序只能从它们拥有的账户中扣款。
  3. 任何程序都可以向任何账户充值。
  4. 任何程序都可以读取任何账户。

默认情况下,所有账户的所有者为系统程序。

  1. 系统程序是唯一可以分配账户所有权的程序。
  2. 系统程序是唯一可以分配零初始化数据的程序。
  3. 账户所有权的分配只能在账户生命周期中发生一次。

用户定义的程序由加载程序加载。加载程序能够将账户中的数据标记为可执行。用户执行以下交易以加载自定义程序:

  1. 创建一个新的公共密钥。
  2. 将硬币转移到该密钥。
  3. 告诉系统程序分配内存。
  4. 告诉系统程序将账户分配给加载器。
  5. 分块上传字节码到内存。
  6. 告诉加载程序将内存标记为可执行。

此时,加载程序验证字节码,并且加载字节码的账户可以被用作可执行程序。新的账户可以标记为由用户定义的程序所拥有。

这里的关键洞察是程序是代码,并且在我们的键值存储中,存在某些子集的键,只有该程序拥有写权限。

交易

交易指定了一个指令向量。每个指令包含程序、程序指令和交易希望读取和写入的账户列表。这个接口受到低级操作系统接口与设备的启发:

size_t

readv(int d, const struct iovec *iov, int iovcnt);

struct iovec {

char *iov_base; / 基地址。 /

size_t iov_len; / 长度。 /

};

像 readv 或 writev 这样的接口告诉内核用户希望读取或写入的所有内存。这允许操作系统提前获取、准备设备,并在设备允许时并发执行操作。

在 Solana 上,每个指令提前告诉虚拟机它希望读取和写入的账户。这是我们对虚拟机优化的根本所在。

  1. 对数百万个待处理交易进行排序。
  2. 在并行中调度所有不重叠的交易。

更重要的是,我们可以利用 CPU 和 GPU 硬件的设计方式。

SIMD 指令允许一段代码在多个数据流上执行。这意味着 Sealevel 可以执行额外的优化,这是 Solana 设计中独特的:

  1. 按程序 ID 对所有指令进行排序。
  2. 在所有账户上并发运行相同程序。

为了理解这是一项多么强大的优化,看看 CUDA 开发者指南

“CUDA架构围绕可扩展的多线程流式多处理器(SMs)构建。当主 CPU 上的 CUDA 程序调用一个内核网格时,网格中的块被枚举并分发到具有可用执行能力的多处理器。”

现代的 Nvidia GPU 拥有 4000 个 CUDA 核心,但只有大约 50 个多处理器。尽管一个多处理器一次只能执行单个程序指令,但它可以在并行的情况下对 80 个不同的输入执行该指令。因此,如果加载 Sealevel 的进程中的传入交易全部调用相同的程序指令,例如 CryptoKitties::BreedCats,Solana 可以在所有可用的 CUDA 核心上并发执行所有这些交易。

在性能方面没有免费的午餐,因此要实现 SIMD 优化,执行的指令应该包含少量分支,并且这些指令应该都采用相同的分支。多处理器受到批处理执行的最慢路径的限制。即使考虑到这一点,通过 Sealevel 的并行处理相比单线程运行时,提供了基础性的改进,极大地提高了吞吐量和可用性。

Solana 对 Sealevel 的实现,结合历史审计证明(Proof of History)、复制证明(Proof of Replication)和海湾流(Gulf Stream)等创新,共同创造了世界上性能最强的区块链。Solana 的测试网络目前正在上线。你可以访问 https://testnet.solana.com。为了成本考虑,我们仅运行少量节点。但是,我们已经在 AWS、GCE 和 Azure 等 23 个数据中心上启动了多实例,超过 200 个物理节点(不是共享硬件)进行基准测试。

运行时今天已经在运作,开发者可以在测试网部署代码。开发者今天可以用 C 构建智能合约,我们正在积极开发 Rust 工具链。Rust 将成为 Solana 智能合约开发的旗舰语言。Rust 工具链是公开可用的,作为 Solana Javascript SDK 的一部分,我们还在不断迭代软件开发工具包。

Solana 将很快推出一个公共测试版,鼓励验证者通过 Tour de SOL 运行节点——类似于 Cosmos 的“股份游戏”-挑战公众测试 Solana 网络的极限,同时为此获得代币。

  • 原文链接: medium.com/solana-labs/s...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
anatolyyakovenko
anatolyyakovenko
江湖只有他的大名,没有他的介绍。