享受沉浸式Solidity编译体验,这个开源的编译插件值得一用
共 2596字,需浏览 6分钟
·
2021-04-20 10:38
操作环境割裂,项目开发时,需要使用控制台等组件进行编译; 操作繁琐,陷入合约的传入、编译物的拷出等许多拷贝操作; 倘若合约需要修改,更是要反复进行上述操作,费时费力。
“如何轻快、便捷地编译智能合约,顺滑提速区块链应用开发效率?”的命题自然而然出现在团队的工作清单里。4月7日,我们在开源的区块链应用开发组件WeBankBlockchain-SmartDev中提供了解题思路,并打造了一款简单好用的智能合约编译插件WebankBlockchain-SmartDev-SCGP(SmartContractGradlePlugin),帮助用户在不跳出自己IDE窗口界面的情况下,便捷地编译Solidity智能合约。
智能合约编译插件概述
WebankBlockchain-SmartDev-SCGP是一款专门用于编译Solidity智能合约的gradle插件。用户只需将这个插件配置在自己的区块链应用项目中,即可通过gradle命令来编译Solidity,而编译的产物如abi、bin、java合约等,将会被自动保存在项目中的适当位置。开发者不必安装控制台,也不必拷贝相应代码。
下图是编译插件的使用对比:
关键特性一览
编译快捷
在应用开发过程中,如果需要编译智能合约,用户只需调用gradle指令,就可以将合约编译到本地,免去了任何拷贝的流程,可随时实现快捷编译。
引入轻量
gradle编译插件已经被存放在maven库中,开发者只需通过远程仓库,便可获取此插件。此外,基于“契约优于配置(Convention Over Configuration)”的原则,用户只需修改java包名等极少量配置项,其余配置项都采用默认配置,即可正常使用插件,无需再安装控制台等工具。
配置定制
在gradle编译插件的配置中,绝大多数配置都提供了默认选项。但是,用户也可以根据自己的需求,对这些配置进行定制,例如,可对编译产物进行选择、对编译输出路径进行选择。
国密兼容
在国密环境下,智能合约生成的二进制代码与非国密二进制存在差别。合约编译插件在编译的时候,既会基于ecdsa进行编译,也会基于国密进行编译。用户无需特别指定国密版本。
使用示例
在进行区块链应用的开发时,不可避免的是对合约的调试和修改。这个时候,就如在Eclipse、IDEA等IDE中修改java一样,开发者们往往希望在合约修改后,合约能够立即生效,且能够看到改动效果。
WebankBlockchain-SmartDev-SCGP合约编译插件致力于提供类似的体验。下面是一个示例,在这个示例中,用户修改完合约后,就可以轻松获取编译物,从而进行调试。
创建业务工程
创建一个空的业务工程,里面的src/main/contracts里包含了智能合约:
插件配置
用户需要在build.gradle中按如下方式引入插件。可将这段代码直接放在build.gradle首部:
buildscript {
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/groups/public/"
}
maven {
url "https://oss.sonatype.org/content/repositories/snapshots"
}
mavenLocal()
}
dependencies {
classpath 'com.webank:solc-gradle-plugin:1.0.0-SNAPSHOT'
}
}
applyplugin: 'solc-gradle-plugin'
然后进行如下配置,下面的示例是配置包名:
solc {
pkg = 'org.example.contracts'
}
完整的配置项如下:
配置项 | 必选 | 说明 |
onlyAbiBin | 否 | 是否只输出abi和bin,而不输出java合约。默认false |
pkg | 否 | java合约包名,如果生成java合约,需要配置 |
contracts | 否 | 智能合约文件路径,默认为src/main/contracts |
output | 否 | 编译输出路径,默认为src/main |
编译合约
进入java工程,并进行编译:
cd solc-plugin-example
gradle solc
abi:编译生成的abi bin:二进制文件,包含国密 java:java合约
后续调试
合约编译后,用户可基于最新的abi、bin、java合约进行开发。例如,用户可通过HelloWorld.java重新部署合约,然后进行调试等。
即刻使用
上述相关代码和技术文档已更新,欢迎体验和 star 支持。如需咨询技术问题,欢迎关注本公众号,对话框回复【小助手】进技术交流群。
文档地址:
github代码库地址:
gitee代码库地址:
https://gitee.com/WeBankBlockchain/SmartDev-SCGP
欢迎参与WeBankBlockchain的社区建设:
如项目对您有帮助,欢迎点亮我们的小星星(点击项目左上方Star按钮)。
欢迎提交代码(Pull requests)。
提问和提交BUG。
如果发现代码存在安全漏洞,可通过以下地址
https://security.webank.com/上报。