  Smart contracts are computer programs running on blockchains to implement
Decentralized Applications.The absence of contract specifications hinders
routine tasks, such as contract understanding and testing. Inthis work, we
propose a specification mining approach to infer contract specifications from
past transactionhistories. Our approach derives high-level behavioral automata
of function invocations, accompanied byprogram invariants statistically
inferred from the transaction histories. We implemented our approach as
toolSmConand evaluated it on eleven well-studied Azure benchmark smart
contracts and six popular real-worldDApp smart contracts. The experiments show
thatSmConmines reasonably accurate specifications that canbe used to facilitate
DApp understanding and development in terms of document maintenance and test
suite improvement.
