A blockchain is a growing list of records called blocks, which are linked using cryptography. This paper introduces typical blockchain consensus algorithms, reviews blockchain applications and discusses technical challenges as well as recent advances