Rust VM SDK:使用 Rust 在 Avalanche 上构建自定义虚拟机

  • gyuho.lee
  • 发布于 2023-01-08 17:52
  • 阅读 7

Ava Labs 发布了用于构建 Avalanche 虚拟机的 Rust SDK。

Rust VM SDK:使用 Rust 在 Avalanche 上构建自定义虚拟机

我们很高兴地宣布发布用于构建 Avalanche 虚拟机的第二个 SDK,即 Rust SDK。作为使用 Golang 的替代方案,你可以使用 Rust 在 Avalanche 加粗 Subnet 上启动你自己的区块链。查看我们的 TimestampVM 示例来开始使用(剧透警告:编写 Rust VM 时,你唯一需要使用的语言是 Rust)!

在 Ava Labs,我们持续投资于通过发布 SDK 和工具来赋能创造者,以尽可能轻松地在 Avalanche 之上启动你自己的区块链。我们期待看到 Rust 开发人员使用这个新 SDK 构建的内容,并乐于在 Discord 中提供支持。

入门:在 Avalanche 上构建你自己的区块链

要在 Avalanche 上创建你自己的区块链,你需要首先编写你自己的 虚拟机 (VM)。VM 定义了你的区块链将运行的逻辑,并且能够执行几乎任何操作,只要它实现了 AvalancheGo 公开的 协议缓冲区 (protobuf) 接口, AvalancheGo 将使用此接口通过 gRPC 进行通信。

gRPC 和 protobuf 的使用能够实现一致的对象模型,从而提高系统的可理解性。schema 是预先定义的,并且可以很容易地扩展新的信息,而不会使现有数据失效。这种通信模型还使开发人员能够使用任何他们想要的语言来实现 VM,只要它支持 gRPC 和 protobuf。如前所述,我们目前有 Golang 和 Rust 的 SDK,但计划将来添加其他 SDK。

更具体地说,AvalancheGo 是插件服务器的客户端,而虚拟机是实现 gRPC 接口的服务器。让我们看一下 `VM` 服务中的一个例子,初始化 VM:

message InitializeRequest {
  uint32 network_id = 1;
  bytes subnet_id = 2;
  bytes chain_id = 3;
  bytes node_id = 4;
  bytes x_chain_id = 5;
  bytes avax_asset_id = 6;
  bytes genesis_bytes = 7;
  bytes upgrade_bytes = 8;
  bytes config_bytes = 9;
  repeated VersionedDBServer db_servers = 10;
  // server_addr is the address of the gRPC server which serves
  // the messenger, keystore, shared memory, blockchain alias,
  // subnet alias, and appSender services
  string server_addr = 11;
}

当 AvalancheGo 初始化 VM 时,会发出初始化请求。收到此请求后,VM 可以设置 VM 和 Snowman 共识引擎之间的通道,并配置由 AvalancheGo 管理的数据库实例,其中可以存储收到的 genesis 字节。

使用 Rust SDK

Golang 中的虚拟机使用 `hashicorp/go-plugin` 作为中间件来抽象插件编排中更繁琐的方面(日志记录、兼容性检查等)。新的 Rust SDK 不仅实现了这个样板式的编排逻辑,而且还提供了一组库,简化了 Rust 中的 VM 和工具开发。例如,`avalanche-ops` 使用 Rust SDK 自动化云上的 subnet 安装,并使用 AWS KMS 执行负载测试来签署交易。Rust SDK 发布在 crates.io 上。

最小的 VM 实现,例如 `timestampvm-rs`,只需要几百行代码,并且不需要缝合任何其他编程语言来构建功能齐全的 VM(即使 Avalanche 节点完全用 Golang 编写)。以下是如何开始使用 `timestampvm-rs` 的示例:

[dependencies]
avalanche-types = { version = "0.0.x", features = ["subnet", "codec_base64"] }
use avalanche_types::subnet;
use timestampvm::vm;
use tokio::sync::broadcast::{self, Receiver, Sender};
##[tokio::main]
async fn main() -> std::io::Result<()> {
  let (stop_ch_tx, stop_ch_rx): (Sender<()>, Receiver<()>) = broadcast::channel(1);
  let vm_server = subnet::rpc::vm::server::Server::new(vm::Vm::new(), stop_ch_tx);
  subnet::rpc::plugin::serve(vm_server, stop_ch_rx).await
}

查看 “如何构建一个简单的 Rust VM” 以获得关于如何使用新 SDK 构建自定义虚拟机的完整指南。

结论

我们对 Rust 在构建高效且可扩展的区块链方面的潜力感到非常兴奋。我们期待继续改进 SDK,并与社区合作开发各种新颖的区块链设计。你可以通过订阅 Rust SDK 仓库 来关注进展。如果你有关于如何改进 SDK 的建议,请打开一个 PR!

关于 Avalanche

Avalanche 是区块链行业中最快的智能合约平台,以最终确认时间来衡量,并且拥有最多的验证者来保护任何权益证明协议的活动。Avalanche 速度极快、成本低廉且环保。任何支持智能合约的应用程序都可以通过在 Avalanche 上部署来超越其竞争对手。不相信吗?立即尝试 Avalanche。

网站 | 白皮书 | Twitter | Discord | GitHub | Documentation | Telegram | Facebook | LinkedIn | Reddit | YouTube

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

0 条评论

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