查看原文
其他

互联网计算机上的 WebAssembly

Dfifans Internet Computer 2023-10-30


WebAssembly,又名 Wasm,是一个用于执行通用代码的虚拟机,它于 2015 年首次宣布,是主要 Web 浏览器供应商(包括 Apple、Google、Microsoft、Mozilla)之间的合作,最初的设计者将其设想为一个安全可靠的执行环境,用于在 Web 上运行不受信任的代码,并具有接近本机的性能。
WebAssembly 于 2017 年正式发布,并附带一篇论文 “Bringing the web up to speed with WebAssembly”,从那时起,WebAssembly 就可以在所有主流浏览器上无缝运行。
在设计互联网计算机的架构时,DFINITY 基金会认识到 WebAssembly 作为区块链虚拟机的潜力,并邀请了 WebAssembly 的联合设计师 Andreas Rossberg 来参与其开发。
长话短说,WebAssembly 从一开始就是互联网计算机的核心部分,并且在实现大规模、高性能、去中心化应用程序方面继续发挥着关键作用。
如今,WebAssembly 生态系统正在蓬勃发展,拥有 30 多个运行时和 20 多种编程语言,为了跟上最新发展,DFINITY 积极与该领域的专家合作。
该基金会是万维网联盟(W3C)和字节码联盟的成员,字节码联盟是一个开发 WebAssembly 高性能实现(称为 Wasmtime 运行时)的组织,本周,DFINITY 自豪地加入了卡内基梅隆大学(CMU)的 WebAssembly 研究中心。


WebAssembly 作为区块链虚拟机
互联网计算机是一个基于区块链的平台,托管通用应用程序,它旨在将区块链的去中心化和有状态等优点带到云计算中,相反,它也可以被视为将快速、可扩展、通用计算等云功能引入区块链领域。
WebAssembly 在此任务中发挥着至关重要的作用,因为它是一种通用虚拟机,旨在安全、快速和确定性,这些属性与区块链用例完美契合,其中涉及跨多个不可信节点执行不可信代码。
WebAssembly 的另一个优势是其丰富的生态系统,支持多种编程语言,这意味着开发人员无需学习自定义的区块链特定语言即可编写智能合约和去中心化应用程序。
互联网计算机如何使用 WebAssembly
说到开发人员,本节将介绍从编写代码到部署和执行的应用程序开发旅程,重点介绍 WebAssembly 在每个阶段的作用。
应用程序开发从选择一种受支持的编程语言开始,虽然 WebAssembly 支持 20 多种语言,但目前只有四种语言拥有容器开发套件(CDK)—— 一套用于构建与互联网计算机兼容的 WebAssembly 二进制文件的库和脚本,这些语言是 Motoko、Python、TypeScript 和 Rust。
由于社区项目实现了对 WebAssembly 系统接口(WASI)的支持,新语言 CDK 的开发比以前容易得多,这有望为社区将来添加更多语言铺平道路。
选择编程语言后的下一步是编写应用程序的实际代码,互联网计算机的编程模型是基于 Actor 模型的,部署的 WebAssembly 二进制文件可以被视为一个参与者,它从用户和其他参与者接收消息并向其他参与者发送消息,每个 Actor 都有自己的状态和记忆,在互联网计算机上,这些参与者被称为容器,它们是增强型智能合约。
一个应用程序可能包含多个容器,图 1 显示了构建和部署容器的过程,该容器的源代码以高级语言编写,与 CDK 库链接以生成 WebAssembly 二进制文件,之后,可以将 WebAssembly 二进制文件作为容器部署在互联网计算机上。

图 1. 构建和部署 WebAssembly 二进制文件
部署并运行后,容器会接收来自用户或其他容器的消息,并通过执行 WebAssembly 代码来处理这些消息,图 2 显示了消息执行中涉及的高级步骤。
在执行之前,WebAssembly 二进制文件会被检测并编译成机器代码,Instrumentation 将系统代码插入到 WebAssembly 二进制文件中以计算执行指令的数量,这是必要的:1)用于执行的充值 cycles(在其他区块链上也称为 Gas),2)正确处理长时间运行的执行,以确保它们不会停止区块链的进程。
互联网计算机采用称为提前编译的方案,这意味着 WebAssembly 二进制文件在执行之前被编译成机器代码。

图 2. WebAssembly 检测、编译和执行
当消息到达容器时,它开始执行消息头中指定的处理程序函数,该执行使用容器的当前状态和传入消息作为输入,并生成容器的新状态和传出消息列表作为输出,这里的挑战之一是有效地跟踪状态变化,如这篇博文中所述 - IC 内部结构:正交持久性
互联网计算机在多个节点上复制上述执行过程,并在节点之间运行拜占庭容错共识,为了保证诚实节点之间达成共识,确保确定性执行至关重要。
这就是 WebAssembly 的闪光点,因为它的设计考虑了确定性执行,请注意,WebAssembly 确实具有多线程等非确定性功能,但它们众所周知且易于禁用。
WebAssembly 和 EVM
互联网计算机上的 WebAssembly 与 EVM 相比如何?对于在以太坊网络上构建的开发人员来说,这是一个自然而然的问题,因为 WebAssembly 和 EVM 都是为区块链提供支持的虚拟机。
最显著的区别是 WebAssembly 是一种通用虚拟机,这意味着它具有从浏览器到边缘计算到嵌入式系统到区块链的广泛应用,它还可以作为主流语言的编译目标。
另一方面,EVM 是专门为以太坊设计的,并带有自己的语言 Solidity,例如,EVM 使用 256 位值并包含一些特定于域的指令,例如查询余额、计算加密哈希值。
请注意,互联网计算机以库函数而不是指令的形式提供此功能。
在计算和存储方面,虚拟机显示出数量级的差异,如下表所列。


由于 WebAssembly 更具表现力和性能,因此理论上它可以模拟 EVM,Bitfinity EVM 社区目前正在探索这种方法。
过渡到互联网计算机的以太坊开发人员经常强调编程模型中的一个显著差异:互联网计算机的设计者优先考虑可扩展性并严重依赖 Actor 模型,鉴于每个容器智能合约都充当单独的参与者,它只能通过消息传递与其他智能合约异步通信。
互联网计算机上的 WebAssembly 研发
DFINITY 认识到 WebAssembly 是互联网计算机的重要组成部分,并一直在研究和开发方面进行投资以改进 WebAssembly 集成,以下是这些项目的一些亮点:
已完成的:
  • Wasm 内存系统优化
  • Wasm 编译代码分享
  • Wasm 原生稳定内存,关于这个项目的一个有趣的说明是,它在底层使用了两个新的 WebAssembly 功能 - memory64 和 multi-memory

正在进行中的:
  • 大型 Wasm 二进制文件
  • 新 Wasm 仪表

未来潜在的探索:
  • 支持 64 位 Wasm 内存
  • 支持 Wasm 组件模型
  • 支持确定性 SIMD 指令

构建去中心化的“一切堆栈”
互联网计算机被设计为一个去中心化的“一切堆栈”,将通用应用程序托管为 WebAssembly 模块,这是一个关键组件,最终可能导致快速、可扩展的智能合约技术取代传统 IT。
以 WebAssembly 为核心,在互联网计算机上构建大规模、高性能的去中心化应用程序就变得更加可能,WebAssembly 支持多种编程语言这一事实将促进开发人员采用并为新应用程序开辟机会。
总的来说,WebAssembly 正在成为系统服务器端和客户端浏览器端的选择,互联网计算机是一个安全平台,可以在更加分布式和安全的执行环境中运行服务器 WebAssembly 组件和代码。
作为 CMU WebAssembly 研究中心的成员,DFINITY 的研发团队能够为客户和企业探索新的用例。
关注互联网计算机的技术发展:@DFINITYDev,了解有关互联网计算机的更多信息:




作者:Ulan Degenbaev翻译:Catherine

-              -


Origyn 与钻石认证领域的全球领导者签约

卡内基梅隆大学成立 WebAssembly 研究中心

Taurus 与 DFINITY 基金会合作,将为 ICP 增加托管支持





你关心的 IC 内容

技术进展 | 项目信息 | 全球活动



长按关注 IC 微信公众号

掌握最新资讯


*添加小助手微信 comiocn 进交流社群


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存