Вам нужен proxy смарт контракт.
Когда старый контракт устаревает, уязвимость или требуется ввести новую функцию, тогда нужно обновлять/создавать новый смарт контракт. Вы вносите в proxy контракт адрес нового/обновленного контракта, т.е. в вашем dapp будет использоваться только адрес вашего proxy, в котором вы будете вносить обновления по необходимости.
В гугл масса инфы по proxy. На Цепелине хорошо расписано, задайте - openzeppelin proxy pattern.