Write a Blog >>
ICSE 2023
Sun 14 - Sat 20 May 2023 Melbourne, Australia

Paper Title: (Paper #129) SmartMark: Software Watermarking Scheme for Smart Contracts

Purpose of the Research Artifact: This artifact aims to reuse and repurpose our proposed software watermarking scheme for smart contracts and dataset used in our empirical study.

First, we provide the SmartMark program implemented in Python, which is separated into two modules - EmbedWatermark and VerifyWatermark. EmbedWatermark embeds the watermark(s) of the user-supplied number and length into the given smart contract and then outputs a watermark reference object (WRO) and a hash of WRO (WRO MAC) to individual files. VerifyWatermark finds the watermark(s) embedded in the given smart contract using WRO and WRO MAC and then verifies that the extracted watermark(s) are identical to the original ones.

Second, we provide three types of smart contract datasets. i) runtime_bytecodes_27824 dataset contains the 27,824 runtime bytecodes collected from the fifteen million Ethereum Mainnet blocks deployed between 30 July 2015 to 21 June 2022. Those 27,824 smart contracts are distinct from each other. Therefore, we performed DBSCAN clustering to exclude the clone contracts from a total of 4,112,336 contracts. ii) CFG_jsons_27824 dataset includes 27,824 control flow graph (CFG) files in JSON format built from the collected runtime bytecodes using EtherSolve tool. iii) Solidity_codes_9324 contains the 9,324 Solidity source codes for the contracts that have publicly released source codes among the above 27,824 contracts.

Badges Claimed: We want to claim the Artifacts Evaluated - Reusable and Artifacts Available badges.

Technology Skills: As our program is written in Python, we ask reviewers to be familiar with Python. We have executed our program on a 64-bit Ubuntu 18.04 system with Python3.9.13, where pycryptodome package is installed. Our program takes an average of 11,088 ms and 17,258 ms for the watermarking embedding and verification process, respectively, and has no restriction on RAM capacity.

This artifact can be obtained from our GitHub repository or Figshare