论文地址:Self-Supervised Learning of Smart Contract Representations
SRCL:全局+局部学习,代码增强和自监督
Abstract
为了处理智能合约数据稀少,同质化问题,提出了SRCL自监督学习智能合约表征,通过局部和全局信息自动提取AST结构,然后两个判别器指导transformer编码器学习局部和全局语义特征
Introduction
与其他程序比,智能合约更不能容忍错误,“code is law”,合约一旦发布就不能修改,因为如果有修改或Bug就会导致区块链很多钱的损失
同时,智能合约数据高度同质和冗余,开发者倾向于复制现有代码而不是冒着风险从零开始写,有26%代码块是克隆了14.6次,只有20.8%的代码是原生的
基于增强的代码变体,SRCL有三部分:局部判别器,全局判别器,解码器
主要贡献:
- 通过三个自监督任务学习智能合约表示
- 三个操作生成代码变体:类型替换,值替换,对插入
- 提出了智能合约在克隆检测和克隆聚类的数据集
Approach
Constructing Structural Sequences
把每个智能合约转化为两个序列,通过先序遍历得到AST类别序列和AST值序列,没有值就硬填充
Generating Code Variants
维护一个类别词元和值词元的key-value分布M,样本是<T, V>,类别序列和值序列,然后执行类别替换(TR),值替换(VR)和对插入(PI,随机从M中再找一个对插到随机位置)
假设这样可以增加噪音的同时维持原有语义信息
Representation Learning
Global Discriminator
全局判别器执行的是真假样本预测任务,是一个分类任务。正样本是原样本和VR,负样本是TR和PI
Local Discriminator
局部判别器执行的是词元替换预测任务,预测词元是否经过增强被替换