Прокси контракты, как они работают, какие бывают и как это работает в EVMPack. Часть 1
Прокси-контракты: Сравнение подходов OpenZeppelin и EVMPackОбновление смарт-контрактов в mainnet - задача нетривиальная. Развернутый код неизменяем, и любая ошибка или необходимость добавить функционал требуют сложных и рискованных миграций. Для решения этой проблемы используется паттерн «прокси», позволяющий обновлять логику контракта, сохраняя его адрес и состояние.Что такое прокси-контракт?Прокси-контракт - это простой контракт-переадресатор. Он хранит адрес основного, «логического» контракта. При вызове функции на прокси, он перенаправляет вызов (через delegatecall) на контракт с логикой.Особенность delegatecall в том, что код исполняется от имени прокси-контракта, то есть в его контексте хранилища (storage). Это позволяет менять адрес контракта с логикой, в то время как все данные (состояние) остаются на адресе прокси. Для обновления достаточно просто указать прокси новый адрес реализации. Ну и что дальше?