Reviewing problematic smart contracts
Before we write upgradable smart contracts, let's write a simple smart contract that we would like to update in the future as part of enhancements. Using this smart contract, we will understand the problems encountered when we want to upgrade it. The smart contract is called a Bank
contract, with a couple of function implementations to debit and/or credit an account. It maintains a global state for each account along with its balance in a mapping data type. Since the mapping has public visibility, a getter
function is intrinsically generated to access the account balance. There is also a constructor that would initially assign a specified balance to the bank's address. Since the bank is deploying this contract, the value of msg.sender
in the constructor will have the value of the bank's address:
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0 contract Bank { ...