About DocCon
Smart contracts are gaining popularity as a means to support transparent, traceable, and self-executing decentralized applications, which enable the exchange of value in a trustless environment. Developers of smart contracts rely on various libraries, such as OpenZeppelin for Solidity contracts, to improve application quality and reduce development costs. The API documentations of these libraries are important sources of information for developers who are unfamiliar with the APIs. Yet, maintaining high-quality documentations is non-trivial, and errors in documentations may place barriers for developers to learn the correct usages of APIs. In this paper, we propose a technique, DocCon, to detect inconsistencies between documentations and the corresponding code for Solidity smart contract libraries. Our fact-based approach allows inconsistencies of different severity levels to be queried, from a database containing precomputed facts about the API code and documentations.
The DocCon Tool
DocCon is available on GitHub: https://github.com/Chenguang-Zhu/DocCon
Developers' Confirmed and Fixed GitHub Issues Based on DocCon's Error Detection Results
Note that in each GitHub issue, we reported one or multiple API documentation errors depending on the actual error.
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3359
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3360
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3361
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3362
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3363
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3366
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3367
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3368
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3369
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3370
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3374
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3375
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3376
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3377
Smart contract library developers fixed 17 API documentation errors in total:
https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3365/files
https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3421/files
https://github.com/1001-digital/erc721-extensions/commit/c4b3ec8ebbf3534f3a6f1105e13f7d674029aa3d
https://github.com/1001-digital/erc721-extensions/commit/df6bb63cc944e8f4cdfc21da4f4de0c47d3838ae
They also provided positive and detailed responses:
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3362#issuecomment-1110708897
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3363#issuecomment-1110690560
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3366#issuecomment-1111937624
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3369#issuecomment-1111948931
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3370#issuecomment-1111950696
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3374#issuecomment-1113172780
https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3374#issuecomment-1117950893
https://github.com/1001-digital/erc721-extensions/issues/12#issuecomment-1188422008
Document Templates for Extracting Document Facts
DocCon applies the following document templates for extracting document facts:
SHAs Used for the Dappsys Experiment
We used the following SHAs for Dappsys as they were the newest versions at the time of our experiment:
ds-auth: a51e7caa1f03eeffed66d67f3b38605e0f1f881d
ds-cache: 107313b0dbfb8e2b8c4d1ddfc306667fa63eb4da
ds-chief: 4a833cdaeb66313da0fb16108771a52135d23a04
ds-guard: af05632249f98bf3942b9482c5bf69e8bd45284e
ds-math: e70a364787804c1ded9801ed6c27b440a86ebd32
ds-roles: 53d56949c0f98c9b5909df9c0d95025b67f3bb75
ds-stop: 27cad71111afd06a841915c8fe710a7cd5ac7f99
ds-token: 16f187acc15dd839589be60173ad1ebd0716eb82