享受沉浸式Solidity编译体验,这个开源的编译插件值得一用

微众银行区块链

共 2596字,需浏览 6分钟

 · 2021-04-20

区块链应用开发过程中,智能合约编译环节总能出现一些“拦路虎”,影响开发者效率。比较典型的有:
  • 操作环境割裂,项目开发时,需要使用控制台等组件进行编译;
  • 操作繁琐,陷入合约的传入、编译物的拷出等许多拷贝操作;
  • 倘若合约需要修改,更是要反复进行上述操作,费时费力。


“如何轻快、便捷地编译智能合约,顺滑提速区块链应用开发效率?”的命题自然而然出现在团队的工作清单里。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 {    mavenCentral() 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-examplegradle solc


编译过后,会发现abi、bin、smbin、java合约已经被拷贝到项目src/main中:


  • abi:编译生成的abi
  • bin:二进制文件,包含国密
  • java:java合约


后续调试


合约编译后,用户可基于最新的abi、bin、java合约进行开发。例如,用户可通过HelloWorld.java重新部署合约,然后进行调试等。


  即刻使用


上述相关代码和技术文档已更新,欢迎体验和 star 支持。如需咨询技术问题,欢迎关注本公众号,对话框回复【小助手】进技术交流群。


文档地址:

https://smartdev-doc.readthedocs.io/zh_CN/latest/docs/WeBankBlockchain-SmartDev-SCGP/index.html

github代码库地址:

https://github.com/WeBankBlockchain/SmartDev-SCGP

gitee代码库地址:

https://gitee.com/WeBankBlockchain/SmartDev-SCGP


欢迎参与WeBankBlockchain的社区建设:

  • 如项目对您有帮助,欢迎点亮我们的小星星(点击项目左上方Star按钮)。

  • 欢迎提交代码(Pull requests)。

  • 提问和提交BUG。

  • 如果发现代码存在安全漏洞,可通过以下地址

    https://security.webank.com/上报。




浏览 14
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报