Sealevel  –  并行处理成千上万的智能合约

Solana是世界上性能最好的免证区块链。在Solana测试网的当前迭代中,当使用GPU运行时,由200个物理上不同的节点组成的网络支持每秒超过50,000个事务的持续吞吐量。实现这一目标需要实现一些优化和新技术,其结果是网络容量的突破,标志着区块链开发进入了一个新阶段。 有7项关键创新使得Solana网络成为可能: 历史证明 (POH):共识之前的时序; Tower BFT:PBFT 的 PoH 优化版本; Turbine:区块传播协议; Gulf Stream :快速事务转发协议; Pipeline VM :并行智能合约运行时; Cloudbreak :水平缩放的帐户数据库; 复制器 :分布式帐本存储 在这篇博客文章中,我们将探讨Solana的并行智能合约运行时Sealevel。在开始之前,需要考虑的一件事是基于wasm的EVM和EOS运行时都是单线程的。这意味着每次一个合约会修改区块链状态。我们在Solana中构建的是一个运行时,它可以并行处理成千上万个合约,让验证器使用尽可能多的可用内核。 Solana能够并行处理事务的原因是,Solana事务描述了事务执行时读写的所有状态。这不仅允许非重叠事务并发执行,而且还允许只读取相同状态的事务并发执行。 程序和账户 我们的帐户数据库Cloudbreak是到帐户的公钥映射。帐户维护余额和数据,其中数据是字节向量。帐户有一个“owner”字段。Owner是管理帐户状态转换的程序的公钥。程序是代码,没有状态。它们依赖于分配给它们的帐户中的数据向量进行状态转换。 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; / Base address. / size_t iov_len; / Length. / }; 诸如readv或writev之类的接口提前告诉内核用户想要读取或写入的所有内存。这允许操作系统预取、准备设备,并在设备允许的情况下并发执行操作。 在Solana上,每条指令都告诉VM它希望提前读写哪些帐户。这是我们对VM进行优化的基础。 1. 对数以百万计的待处理事务进行排序。 2. 并行安排所有非重叠事务。 更重要的是,我们可以利用CPU和GPU硬件的设计。 Solana——可伸缩的区块链 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——可伸缩的区块链 Solana对Sealevel的实现,以及历史证明、复制证明和Gulf Stream等创新,共同创造了世界上性能最好的区块链。Solana的测试网今天是实时的。您可以在http://explorer.solana.com/上看到它。出于成本考虑,我们只运行少数几个节点。但是,我们已经在许多实例上将它扩展到超过200个物理上不同的节点(不在共享硬件上),这些节点跨越了AWS、GCE和Azure上的23个数据中心,用于基准测试。 运行时今天运行正常,开发人员现在就可以在testnow上部署代码。开发人员现在可以在C语言中构建智能合约,我们正在积极地开发Rust工具链。Rust将成为Solana智能合约开发的旗舰语言。Rust工具链作为Solana Javascript SDK的一部分公开可用,我们正在进一步迭代软件开发工具包。 Solana将很快推出一个公开测试版,鼓励验证器通过Tour de SOL运行节点(类似于 Cosmos 的 Game of Stakes ,这向公众提出了一个挑战,即在测试Solana网络的极限的同时,还要为此获得令牌。