UUPSUpgradeable
да OpenZeppelin Стандарт, предусмотренный для реализации обновляемых контрактов. УУПС Представляет собой «Универсальный Upgradeable Proxy Standard», сообщество даEthereum продвигает Контракт на способ обновления. С традицией изрежим прокси по сравнению с UUPS Обеспечивает более гибкий и эффективный механизм обновления контракта. Следующие сведения UUPSUpgradeable
Подробное введение:
_authorizeUpgrade
Функция управления: только авторизованные учетные записи (например, владельцы контрактов) могут выполнять операции обновления.OpenZeppelin из UUPSUpgradeable
Контракт предусматривает возможность Контракта на Основные функции обновления в основном включают в себя следующие части:
function __UUPSUpgradeable_init() internal onlyInitializing {
// Initialization logic, if needed
}
UUPSUpgradeable
функция инициализации, вызываемая при создании контракта с помощью инициализации. UUPS Характеристики желаемого статуса.function _authorizeUpgrade(address newImplementation) internal virtual;
onlyOwner
Контролировать доступ.Дальше мы развернём через Remix UUPSUpgradeable
договор.
Взяв в качестве примера следующий контракт, мы используем OpenZeppelin Предоставить из UUPSUpgradeable
Реализован обновляемый встречный контракт:
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
contract Counter is Initializable, UUPSUpgradeable, OwnableUpgradeable {
uint256 public count;
// initialize: required
function initialize() public initializer {
__Ownable_init(msg.sender);
__UUPSUpgradeable_init();
}
// _authorizeUpgrade: required
function _authorizeUpgrade(address) internal override onlyOwner {}
function store(uint256 _count) external {
count = _count;
}
}
В вышеуказанном договоре указано:
Процесс составления договора аналогичен процессу составления других договоров.,Но нужно обратить внимание на изда,в контрактеразвертыватькогда нам нужно выбрать Deploy with Proxy
Параметры:
Нажмите Deploy
кнопку, появится всплывающее окно:
Расскажите нам о своем выборе Deploy with Proxy
начнетсядваторговля:
Тогда мы выбираем Proceed
Кнопка, появится всплывающее окно с предложением развернуть прокси-контракт:
После успешного развертывания,С левой стороны будут две транзакции: первая транзакция развертывания контракта.,Второй контракт с прокси-адресом:
Теперь вызываем вышеуказанный договор через Адрес агентского договора:
В вышеуказанном процессе,Развертываем основное из договора,Теперь мы можем его обновить:
При обновлении контракта нам необходимо выбрать Upgrade with Proxy
,Передаются параметры и мы получаем из Адрес агентского договора в предыдущем разделе:
После успешного развертывания контракта, как и при первоначальном развертывании, мы получаем два адреса:
Нажав на нее, вы обнаружите, что мы добавили новый increase
Функция уже существует. В предыдущем разделе мы сохранили числа в контракте 1
,позвони сейчас increase
Функция может увеличить это значение до 2
:
До сих пор,Мы завершили контракт на модернизацию.