你好,欢迎收听众享区块链大讲堂,今天的课程是以太坊技术5之Solidity第七讲。
上节课我们介绍了Solidity安全相关的内容,在实际编写智能合约的时候一定要注意安全陷阱。
本节课我会向大家介绍如何使用编译器,包括编译器的安装,使用命令行编译器以及编译得到的合约元数据。
编译器安装
在Solidity课程开始时我们讲过如果要快速学习Solidity建议使用Remix。如果要完成比较大型的合约或者需要更多的编译选项则可以选择命令行编译器solc。
solc编译器具体的安装方式可参考:https://solidity.readthedocs.io/en/v0.4.23/installing-solidity.html#。
另外可以从Solidity的源码进行编译,编译的方法参见上面的链接。
使用命令行编译器(solc)
当solc安装成功之后,使用solc --help命令会提供solc所有的功能选项和相关的解释。编译器可以生成各种类型的输出,包括简单的二进制文件、抽象语法树(解析树)的汇编以及预计要花费的gas。如果仅仅想编译一个单独的智能合约文件,可以用命令solc --bin sourceFile.sol,会在终端打印出二进制数据。在部署你的智能合约之前,编译的时候请启用优化,使用的命令为solc --optimize --bin sourceFile.sol。使用命令 solc -o outputDirectory --bin --ast --asm sourceFile.sol 可以使 solc 编译出更高级类型的输出文件,并保存到 outputDirectory中。
命令行编译器会自动从文件系统读取导入的文件,也可以通过使用prefix = path提供路径重定向:solcgithub.com/ethereum/dapp
bin/=/usr/local/lib/dapp-bin/ =/usr/local/lib/fallback file.so
上面的命令会使得编译器首先在/usr/local/lib/dapp-bin/目录下查找以github.com/ethereum/dapp-bin/开始的文件,如果没有找到,他会继续寻找/usr/local/lib/fallback目录。solc不会从映射目的之外的其他文件系统去查找读写文件。如果重映射导致有多个匹配,则会选择最长的路径。
为了安全起见,编译器会限制目录访问权限。导入语句(import)只可以访问命令行指定的源文件的路径(及其子目录)和重新映射定义的路径,其他所有内容都会被拒绝。额外的路径可以通过下面的命令来添加:solc --allow-paths /sample/path,/another/sample/path。
如果合约使用libraries,字节码中将会包含 __LibraryName______ 形式的子字符串。
领取专属 10元无门槛券
私享最新 技术干货