Practical on-chain security checklists for decentralized applications and smart contracts