A large-scale empirical study of low-level function use in Ethereum smart contracts and automated replacement