Too Long; Didn't Read
Using OpenZeppelin CLI to easily write/manage "upgradable" smart contracts. Smart contracts in Ethereum are immutable by default. There are a lot of examples in which millions of dollars worth of Ether were stolen/hacked, which could be saved if we could update the contracts. There can be several ways we can upgrade our contracts. The most obvious way is to manually migrate all states from the old contract to the new contract. This seems to work, but has several problems. Using a proxy contract with an interface where each method delegates to the implementation contract is better.