202411 论文研读-Leveraging Large Language Models for Automatic Smart Contract Generation

来源:2024 IEEE 48th Annual Computers, Software, and Applications Conference (COMPSAC)
作者:Emanuele Antonio Napoli; Fadi Barbàra; Valentina Gatteschi; Claudio Schifanella
单位:意大利都灵大学 意大利都灵理工大学
发表时间:2024 7月

一、技术背景

智能合约自动化的常用方法主要是基于模板和使用DSL,两种方法对于生成代码具有可预测性、一致性和安全性,但相对应的面对复杂合约条款,甚至于口语化的自然语言条款合约,表现效果不佳,局限明显,同时对于不同区块链平台的扩展性差,与此同时,LLM的兴起使得机器在处理自然语言的能力得到显著进步,通过LLM来完善智能合约自动化成为新兴的方法。

二、论文贡献

文章针对于智能合约自动生成流程,提出了通过利用LLMs的自然语言理解和生成功能来自动生成智能合约,方法的核心思想是为非专家人员提供智能合约开发功能。 拟议的流水线采用CO-STAR 方法来优化 prompt 创建以实现高质量输出,同时还采用了 Slither漏洞检测工具来评估生成的智能合约的正确性和可靠性。此外,文章提出了一个基于可编译性、漏洞和评论存在等指标的基准测试套件,以便从生成的智能合约的一致性、LLM 的温度效应和提示选择方面评估管道的有效性

三、系统方法框架

对于文章拟议的智能合约自动化生成的自治框架,主要包括LLM、安全工具和一套针对输出代码的全面测试和基准测试。通过调研,文章实验采用的LLM是OpenAI 的 gpt-4-0125-preview 模型,安全工具使用的Slither2并选用Solidity语言作为智能合约语言,对于评估方面,文章采用多属性综合加权评估,评估标准参考下图,主要考虑可编译性、漏洞评估、Solidity版本、生成合同数量、合约中的函数数量、代码是否存在注释以及是否有初始参数。

系统对于智能合约自动化这一自洽框架生成主要分为五个环节,输入选择、提示词嵌入、LLM调用、合约代码生成、安全检测。

四、实验评估

文章实验主要分为两个部分实验,一是对于提示词的代码生成效果和一致性,二是对于LLM温度参数选择对于代码生成效果的影响。

对于提示词嵌入部分,文章作者采用了CO-STAR提示词框架来完成嵌入。通过下面表格中的提示词构造组件,生成了17个不同的提示词组合,并从中筛选出6个代表性提示词(如PR12到PR17)进行实验。每个提示词都在以下维度上有所不同:上下文(Context)、目标(Objective)、风格(Style)、受众(Audience)和需求(Requirements)。

对于选取的6个提示词,控制参数一致,对于每个提示词进行了4次重复实验,对比重复实验的结果,实验结果通过箱型图绘制主要评估指标包括可编译性、漏洞检测结果、注释数量、已初始化参数数量、生成的合约数量和函数数量,最后通过加权平均来综合评估生成代码质量的一致性。测试结果选取了编译效果和综合评估效果作为示例。

通过对于提示词实验评估,实验中测试的PR15、PR16、PR17在生成智能合约时更具稳定性和质量。
结果表明,包含更加详细提示如具体需求和目标,可以提高模型输出代码的可编译性和一致性。

温度参数控制模型生成输出的随机性,即生成内容的创造性
对于实验中采用的gpt-4-0125-preview 模型,文章作者使用温度值【0.0、0.2、0.5、0.7、1.0】作为参数区间,测试不同参数对于模型生成合约代码质量的影响

实验结果表明温度值的变化对生成合约的整体质量和可编译性影响不大,说明模型在不同温度下生成的智能合约代码具有较高的稳定性

五、总结

论文总结:文章提出了通过利用LLMs的自然语言理解和生成功能来自动生成智能合约的流水线,采用了gpt和Slither2,同时提出了了一个基于可编译性、漏洞和评论存在等指标的基准测试套件,以便从生成的智能合约的一致性、LLM 的温度效应和提示选择方面评估管道的有效性。相较于其他同样基于LLM的方法,文章简化了交互流程,同时引入了智能合约漏洞检查和结构化指标套件,严格评估其性能和有效性

启发:
1.对于智能合约代码生成的提示词嵌入部分,相较于few-shot和one-shot技术或者思考链框架,逻辑性强、目标和层次明确的CO-STAR提示词框架对于模型的代码生成起到了关键作用。
2.文章中对于温度参数对于模型代码生成的影响探讨,在实验结果上,较少的样本数量可能对于总体的影响把控不明确,对于后续合约代码实施环节,文章没有过多的涉及,所以对于生成代码的运行部署,同样需要进一步的研究。