#blockchain #ethereum #wasm

应用程序 chisel

一些用于转换 WebAssembly 二进制文件的实用程序,最重要的是用于确定性/区块链环境中的 WebAssembly,例如与 ewasm 一起使用。

6 个版本 (重大更改)

0.6.0 2020 年 1 月 15 日
0.5.0 2019 年 7 月 26 日
0.4.0 2019 年 6 月 4 日
0.3.0 2019 年 5 月 23 日
0.1.0 2018 年 11 月 15 日

#244#ethereum

每月 24 次下载

Apache-2.0

230KB
5K SLoC

wasm-chisel

Build Version

一些用于转换 WebAssembly 二进制文件的实用程序,最重要的是用于确定性/区块链环境中的 WebAssembly,例如与 ewasm 一起使用。

remapimports

提供一个包含(命名空间和名称)的导入列表,并用一组新的命名空间和名称对替换它们。

这对于与尚不支持在导入中指定命名空间的编译器一起使用非常有用。截至 2018 年中旬,这几乎包括每个编译器(一个例外是 AssemblyScript)。

它支持与 verifyimports 相同的预设。

trimexports

删除所有导出,但指定的导出。

它附带一些预设

  • ewasm:保留 main 和导出内存
  • pwasm:保留 _call

trimstartfunc

删除启动函数。

它附带以下预设

  • ewasm:如果存在,则删除 start 函数

verifyimports

验证模块的导入是否与提供的导入接口兼容。可以设置为要求导入集的整个存在,或只需要匹配标识符的现有导入的有效性。可以设置为允许或禁止未列出的附加导入。

提供了以下预设

  • ewasm:验证 ewasm EEI。禁止未列出的导入,且不需要整个接口都被导入。
  • debug:ewasm 的调试工具。
  • bignum:ewasm 的大数库。
  • eth2:根据 Scout 验证导入。

verifyexports

验证模块的导出是否与提供的导出接口兼容。可以设置为允许或禁止未列出的附加导出。

提供了以下预设

  • ewasm:验证main函数和memory是否已导出。禁止任何未列出的导出。

dropsection

从模块中删除选定的部分。

deployer

将模块包装成与ewasm兼容的构造函数。它有两个预设

  • memory:将模块作为预定义的内存部分包装
  • customsection:将模块作为自定义部分包含

repack

重新序列化模块。它将丢弃任何未知(自定义)部分。

remapstart

如果有起始部分,将其作为main导出(替换任何现有的main导出)并删除起始部分

snip

包装wasm-snip并打开从wasm中删除Rust格式化和调试功能。

dropnames

如果存在,则删除NamesSection。

CLI

chisel作为一个命令行工具可用。它支持两种用法模式,配置驱动和Unix风格,也称为oneliner

它使用在库中实现的功能以及wasm-gcwasm-utils中实现的功能。它附带一个配置文件chisel.yml

chisel run:在当前目录中搜索chisel.yml,如果未指定其他方式使用标志-c。运行配置中指定的模块,如果翻译器或创建器模块进行了更改,则输出新文件,并打印每个模块结果的简要报告。

chisel:调用Unix风格模式。它需要标志--modules--config

  • --modules接受要调用的模块的逗号分隔列表。一个有效的模块列表示例是:--modules remapimports,verifyimports

  • --config接受要调用的模块的逗号分隔的关键值选项列表,形式为module.option=value。一个有效的配置示例是:--config remapimports.preset=ewasm,verifyimports.preset=ewasm

配置文件

配置文件以规则集条目开始,名称可以是任何内容。规则集中包含其选项。

唯一必需的字段是file,它指定要雕刻的Wasm二进制的路径。

可选地,也可以通过output选项指定输出文件。

请注意,如果所有规则都以前缀短横线开头,则配置解析将不起作用。请在配置解析器泛化之前避免这样做。

ewasm:
  file: "target/wasm32-unknown-unknown/release/sentinel.wasm"
  output: "out.wasm"
  remapimports:
    preset: "ewasm"

sentinel.rs

TBA

变更日志

一个变更日志可用。

维护者

许可证

Apache 2.0.

依赖项

~10–15MB
~273K SLoC