风险提示:理性看待区块链,提高风险意识!
什么是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智能合约开发?
推荐专栏
Boss Wallet Web3 Econom Pass
专注币圈最新资讯
通俗浅显地聊透Web3大事小情
读懂区块链生态与未来,尽在币界网!
热门币种
更多
币种
美元价格
24H涨跌幅
BTC比特币
60,963.61 USDT
¥435,103.38
-2.72%
ETH以太坊
3,368.69 USDT
¥24,042.67
-0.3%
BNB币安币
570.68 USDT
¥4,073.00
-0.28%
USDT泰达币
1.02 USDT
¥7.25
-0.19%
SOL
135.96 USDT
¥970.36
+7.66%
USDC
1.00 USDT
¥7.15
-0.01%
TON
7.59 USDT
¥54.14
+4.55%
XRP瑞波币
0.47720 USDT
¥3.41
+0.48%
DOGE狗狗币
0.12210 USDT
¥0.87140
+2.43%
ADA艾达币
0.39050 USDT
¥2.79
+3.88%
热搜币种
更多
币种
美元价格
24H涨跌幅
比特币
61034.17 USDT
¥443,407.14
-1.54%
Solana
137.36 USDT
¥997.91
-0.91%
Filecoin
4.3477 USDT
¥31.59
-2.19%
Curve
0.296 USDT
¥2.15
-6.71%
柚子
0.5733 USDT
¥4.16
-0.28%
Terra Classic
8.173E-5 USDT
¥0.00
-1.28%
Shiba Inu
1.72E-5 USDT
¥0.00
-3.75%
Conflux
0.1558 USDT
¥1.13
-1.64%
狗狗币
0.1223 USDT
¥0.89
-3.78%
dYdX
1.3774 USDT
¥10.01
-1.18%
Arweave
25.8768 USDT
¥187.99
-10.03%
Uniswap
9.2944 USDT
¥67.52
-2.17%
最新快讯
更多
已有超89%的BLAST空投被领取,领取地址超25万
2024-06-27 11:54:22
新SwellrswETH池已上线Penpie
2024-06-27 11:34:46
Custodia要求上诉法院指示地区法院撤销对Custodia主账户的拒绝
2024-06-27 11:26:52
Custodia寻求法官撤回授权美联储拒绝其主账户申请的决定
2024-06-27 11:26:52
XT即将上线新一期鲨鱼鳍理财
2024-06-27 11:26:33
WEEX唯客将于7月1日开启第二期Launchpool,投入WXT瓜分37,000ZK
2024-06-27 11:25:57
币界网实时价格午报:PEPE站上0.000012722美元/枚,涨幅达3.03%
2024-06-27 11:23:47
下载币界网APP