风险提示:理性看待区块链,提高风险意识!
什么是WebAssembly(Wasm)智能合约?
首页 > 币界资讯 > 区块链知识 2019-11-03 14:23:43

WebAssembly(简称 Wasm)是一种为栈式虚拟机设计的二进制指令集。Wasm 被设计为可供类似C/C++/Rust等高级语言的平台编译目标,最初设计目的是解决 JavaScript 的性能问题。Wasm 是由 W3C 牵头正在推进的 Web 标准,并得到了谷歌、微软和 Mozilla 等浏览器厂商的支持。

Wasm 具有运行高效、内存安全、无未定义行为和平台独立等特点,经过了编译器和标准化团队多年耕耘,目前已经有了成熟的社区。在区块链领域,包括本体在内,当前已经有一些公链项目正准备支持使用 Wasm 来运行智能合约。

2345截图20191103142216.png

设计目标

Ontology 目前支持的 NeoVM,具有简单轻量的特点,内置了整数、字节、结构、数组和字典等丰富的类型,由宿主完成数据的内存分配管理工作,因此很多功能可以通过少量的字节码完成。目前,很多的实用功能借助于原生合约实现,以系统调用的方式提供。

尽管这种方式也能满足目前的需求,但由于添加系统调用 API 都是对主网的分叉升级,增加了内部功能开发、编译器支持、测试团队对接和上线时生态伙伴的协调成本。

因此 Ontology 的 Wasm 集成方案的设计目标是在满足功能的前提下设计极简的 API,来避免 Ontology 公链的分叉升级;同时在 Rust 和 C++等基本的 API 基础上进行封装,构建上层公共库,供合约开发者使用。

Runtime API 设计

Wasm 以模块的形式组织,模块内部主要包括类型定义、函数、全局变量、内存段、表和导入导出项。我们提供 Runtime 原生模块作为 Wasm 虚拟机和链交互的桥梁,在虚拟机启动时会默认加载该 Runtime 模块,供 Wasm 合约导入和调用。

由于 Wasm 只定义了内存块,没有内置内存分配使用的逻辑,所以要么由 Runtime 提供 malloc、free 等内存分配管理 API,要么由合约自身进行管理。经过细致比较分析,Runtime 管理会限制内存分配算法的升级:

由于内置在 Runtime 中,可能会导致硬分叉,比如老版本分配在内存10的位置,新版本分配在20的位置,很可能导致合约执行结果的不一致;

另外如果老版本的分配算法不够优化,导致合约执行时内存不足而执行失败,新的分配算法可能使合约执行成功,也会导致合约执行分叉。

因此将内存交由合约自身管理是一个扩展性更好的选项,同时也简化了 Runtime 的 API 设计。由于内存由合约管理,因此在 Runtime 需要向合约传递数据时需要由合约预先进行内存分配。

由于 Wasm 自身只支持 u32、u64等简单的类型,对于 Runtime 需要向 Wasm 传递复杂的数据结构时,我们定义了 Abi Codec 对数据结构序列化为字节数组的形式,写入 Wasm 内存,然后由用户合约还原出原数据结构。

合约开发工具链

为方便合约的开发,在 Runtime API 的基础上,我们使用 Rust 和 C++进行了封装,提供了链基本数据结构的定义、 Abi Codec、自定义的内存分配器、合约级的数据存储以及合约 Mock 测试框架等,来极大降低用户的使用门槛。后续将会有更详细的论述。

总结

Ontology 对 Wasm 的支持将使应用业务复杂的 dApp 合约上链成本降低,丰富 dApp 生态。Ontology 作为全球著名的公链,率先支持 Wasm 合约,为 Wasm 技术的成熟贡献自己的一份力量,同时我们也欢迎更多的 Wasm 技术爱好者加入本体开发社区,共同打造技术生态。

上一篇: 区块链分片技术的现状与未来
下一篇: 如何使用C++进行本体网络Wasm智能合约开发?
推荐专栏
web3首席知识博主
一位相信价值投资的币圈KOL。稳定盈利的缠论野生交易员 #BTC行情分析师 #价值投资 #链上数据分析
爱Web 3,爱生活,爱科技,爱炒币的老韭菜
热门币种
更多
币种
价格
24H涨跌幅
BTC比特币
¥265,385.78
37,183.98 USDT
+0.44%
ETH以太坊
¥14,450.05
2,024.64 USDT
+0.17%
USDT泰达币
¥7.20
1.01 USDT
-0.03%
BNB币安币
¥1,632.68
228.76 USDT
+1.48%
XRP瑞波币
¥4.32
0.60570 USDT
+0.51%
USDC
¥7.14
1.00 USDT
+0.03%
SOLSolana
¥400.46
56.11 USDT
+1.29%
OKBOK币
¥399.62
55.99 USDT
-0.01%
ADA艾达币
¥2.69
0.37700 USDT
-0.89%
DOGE狗狗币
¥0.55410
0.07765 USDT
-0.98%
热搜币种
更多
币种
价格
24H涨跌幅
Terra Classic
¥0.00
9.585E-5 USDT
-18.53%
Gala
¥0.00
0.02573 USDT
-4.37%
dYdX
¥22.68
3.2068 USDT
-0.62%
比特股
¥0.05
0.006495 USDT
-3.38%
PancakeSwap
¥15.71
2.2207 USDT
-1.33%
Filecoin
¥31.66
4.4749 USDT
-0.34%
FTX Token
¥29.36
4.15 USDT
+15.67%
Conflux
¥1.09
0.1538 USDT
-2.41%
Yield Guild Games
¥2.57
0.3627 USDT
-0.41%
Shiba Inu
¥0.00
8.17E-6 USDT
-2.27%
比特币
¥263,037.62
37183.98 USDT
+0.44%
比原链
¥0.07
0.01001 USDT
-4.95%
最新快讯
更多
CFTC向Coinbase用户发出传票要求提供交易活动的信息
2023-11-28 19:47:05
汇款公司Kalyssi旗下钱包已集成AlchemyPay法币出入金解决方案
2023-11-28 19:26:47
PlanB:比特币可能不会再低于3.5万美元
2023-11-28 19:23:01
摩根大通和Apollo计划推出代币化“企业主网”
2023-11-28 19:14:28
汇丰、恒生、渣打、富邦华一四家外资银行入围首批“数字人民币”业务试点名单
2023-11-28 19:06:57
OKX上线MATIC链上赚币产品
2023-11-28 19:06:21
摩根大通和Apollo计划建立代币化“企业主网”
2023-11-28 19:03:57
下载币界网APP