#区块链 #以太坊 #WASM

libchisel

一些有用的工具,用于转换 WebAssembly 可执行文件,最重要的是在确定性/区块链环境下使用的 WebAssembly

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 日

#195 in #webassembly


chisel 中使用

Apache-2.0

160KB
3.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

待定

变更日志

变更日志在此处可用

维护者

许可证

Apache 2.0.

依赖关系

~8–12MB
~220K SLoC