简介
solc
是 Solidity 编译器的 npm 包,它能将 Solidity 代码编译成 EVM 字节码。本文将为大家介绍如何使用该包来编译 Solidity 代码并生成字节码。
安装
首先,需要在本地安装 Node.js 和 npm(Node.js 包管理器),如果已经安装,请跳过此步骤。
可以在 Node.js 官网下载安装包,安装完毕后,在终端输入以下命令进行检查:
---- -- --- --
如果输出了对应的版本号,说明已经安装成功。
然后,就可以通过以下命令来安装 solc
:
--- ------- ----
示例代码
下面我们将为大家介绍如何使用 solc
这个包来编译 Solidity 代码。
以一个简单的合约为例:
------ -------- ------- -------- ---------- - ------- ------ --------- -------- ----------------- -------- ------ - -------- - -------- - -
编写一个 JavaScript 文件,使用 solc
包来编译这个 Solidity 合约:
----- ---- - ---------------- ----- ---- - ---------------- ----- -- - -------------- ----- ------------ - ----------------------- ------------------ ----- -------------- - ----------------------------- -------- ----- ----- - - --------- ----------- -------- - ----------------- - -------- -------------- - -- --------- - ---------------- - ---- - ---- ------- --------------- - - - -- ----- ------ - ------------------------------------------------ ----- -------- - --------------------------------------------------------------------- ----- --- - ----------------------------------------------------- ------------------------ ---------- ------------------- -----
首先将 Solidity 合约读入,然后将其作为 sources
的元素,传入 solc
的编译器,并在 settings
中声明需要输出的 abi
和 evm.bytecode
。
编译后的结果是一个 JSON,通过解析它,我们可以得到编译后的字节码和 ABI。
解析
下面我们对代码进行分析。
读取 Solidity 合约
----- ------------ - ----------------------- ------------------ ----- -------------- - ----------------------------- --------
使用 Node.js 内置模块 path
来得到合约文件的完整路径,再使用 fs
模块读取文件内容。
编译 Solidity 合约
----- ----- - - --------- ----------- -------- - ----------------- - -------- -------------- - -- --------- - ---------------- - ---- - ---- ------- --------------- - - - -- ----- ------ - ------------------------------------------------
将 Solidity 合约代码传入 solc.compile()
这个方法中,得到一个 JSON 格式的编译结果 output
。
在 input
变量中,我们需要传入 Solidity 合约的源码,以及一些编译选项(比如需要输出哪些结果格式)。这里的 outputSelection
子项控制了需要输出哪些结果。abi
对应了 MyContract.sol
中定义的函数、变量等接口的集合,evm.bytecode
对应了合约的 EVM 字节码。
得到编译结果
----- -------- - --------------------------------------------------------------------- ----- --- - -----------------------------------------------------
在编译后得到的 JSON 格式中,每个合约都被转换为了一个对象。使用合约名称 MyContract
固定索引合约,使用 evm.bytecode.object
得到合约的 EVM 字节码。使用 abi
得到合约的 ABI 接口定义。
总结
本文介绍了 using solc
这个包来进行 Solidity 合约的编译,演示了一个简单的例子,并分析了源代码中的具体实现。希望对大家的 Solidity 开发有所帮助。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/57393