Engineering principles for writing secure, efficient, and upgradeable self-executing blockchain programs.