Ethereum smart contracts are immutable to change, which makes them much harder to be maintained compared to traditional programs. This thesis aims to help developers maintain smart contracts developed by Solidity on Ethereum. We first conducted an empirical study to investigate what kinds of maintenance issues will smart contract developers encounter, and how do developers maintain smart contracts? Then, we introduce two methods that use online posts and historical destructed smart contracts to find new smart contract defects. Finally, we proposed DefectChecker, a symbolic execution-based tool to detect the defined contract defects.