  This paper presents DeCon, a declarative programming language for
implementing smart contracts and specifying contract-level properties. Driven
by the observation that smart contract operations and contract-level properties
can be naturally expressed as relational constraints, DeCon models each smart
contract as a set of relational tables that store transaction records. This
relational representation of smart contracts enables convenient specification
of contract properties, facilitates run-time monitoring of potential property
violations, and brings clarity to contract debugging via data provenance.
Specifically, a DeCon program consists of a set of declarative rules and
violation query rules over the relational representation, describing the smart
contract implementation and contract-level properties, respectively. We have
developed a tool that can compile DeCon programs into executable Solidity
programs, with instrumentation for run-time property monitoring. Our case
studies demonstrate that DeCon can implement realistic smart contracts such as
ERC20 and ERC721 digital tokens. Our evaluation results reveal the marginal
overhead of DeCon compared to the open-source reference implementation,
incurring 14% median gas overhead for execution, and another 16% median gas
overhead for run-time verification.
