Настройка прокси, о которой все говорят в Web3

Настройка прокси, о которой все говорят в Web3

Настройка прокси, о которой все говорят в Web3

Технический обзор: Развитие минимального обновляемого прокси (стандарт ERC1967/универсального прокси)

После многочисленных атак на управление и дорогостоящих ошибок обновления сообщество Web3 сошлось на новой настройке прокси-сервера, которая сочетает в себе возможность обновления, безопасность и эффективность использования газа. Минимальный обновляемый прокси-сервер, часто реализуемый после ERC1967 стандарт, стал фактическим шаблоном. Эта установка, иногда называемая Универсальным стандартом прокси, не просто техническая эволюция; это хан-нагруженный ответ на болевые точки прошлых шаблонов прокси.


Ключевые компоненты и их роли

Компонент Цель Пример адресного слота
Договор доверенности Делегирует вызовы логическому контракту н/д
Контракт на реализацию (логику) Содержит реальную бизнес-логику н/д
Администратор (Владелец) Управляет обновлениями 0xb53127684a568b3173ae13b9f8a6016
Слоты хранения (стандарт ERC1967) Предотвращает конфликты при хранении 0x360894a13ba1a3210667c828492db98
Логика обновления Управляется администратором через безопасную функцию н/д

Корейское зеркало: почему именно эта модель прокси?

Подобно тому, как стойкие персонажи «Горного хребта Тхэбэк» Джо Чжон-рэ терпят трудности, чтобы построить лучшее будущее, эта прокси-установка выкована из коллективного хана Web3 — травмы от неудачных обновлений и потерянных средств. Более ранние прокси, такие как ЭИП-897 «DelegateProxy» или OpenZeppelin Transparent Proxy страдал либо от коллизий хранения, либо от сложных шаблонов администрирования. ERC1967 Minimal Proxy разработан так, чтобы быть одновременно устойчивым и элегантным.


Пошаговое руководство: реализация минимального прокси-сервера ERC1967

  1. Развертывание логического контракта
  2. Напишите и разверните свою бизнес-логику как стандартный контракт (без логики обновления).

солидность
// контракты/MyLogic.sol
прагма солидность ^0.8.0;
контракт MyLogic {
uint256 публичное значение;
функция setValue(uint256 _value) публичная {
значение = _значение;
}
}

  1. Развертывание прокси-контракта
  2. Используйте минимальную реализацию прокси, ссылающуюся на адрес логического контракта.

солидность
// контракты/MyProxy.sol
прагма солидность ^0.8.0;
контракт ERC1967Proxy {
конструктор(адрес _логика, байты памяти _данные) {
слот bytes32 = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
сборка {
sstore(слот, _логика)
}
если(_data.length > 0) {
(bool успех,) = _logic.delegatecall(_data);
require(успех, "Инициализация не удалась");
}
}
fallback() внешняя кредиторская задолженность {
сборка {
пусть реализуется := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)
calldatacopy(0, 0, calldatasize())
пусть результат := delegatecall(gas(), impl, 0, calldatasize(), 0, 0)
returndatacopy(0, 0, returndatasize())
результат переключения
случай 0 { возврат (0, returndatasize()) }
по умолчанию { return(0, returndatasize()) }
}
}
}

  1. Инициализация через данные конструктора
  2. Передать данные инициализации (например, abi.encodeWithSignature("инициализация(uint256)", 42)) для установки начального состояния.

  3. Логика обновления

  4. Только администратор может обновить адрес логического контракта, хранящийся в слоте ERC1967.

солидность
функция upgradeTo(адрес newImplementation) внешний onlyAdmin {
слот bytes32 = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
сборка {
sstore(слот, новая реализация)
}
}


Целостность слота хранения: предотвращение столкновений

Эта настройка сохраняет адрес реализации в детерминированном слоте (0x3608…ббс), избегая трагических столкновений, которые преследовали предыдущие модели прокси. Это похоже на корейскую практику чансын (тотемов-хранителей деревни), стоящих на страже, обеспечивая святость хранения контракта.

Тип прокси Риск столкновения при хранении Обновление шаблона Эффективность использования газа Административное разделение
Прозрачный прокси Середина Контролируется администратором Умеренный Да
UUPS (ERC1822) Низкий Возможность самостоятельной модернизации Высокий Необязательный
Минимальный прокси-сервер ERC1967 Очень низкий Контролируется администратором Очень высокий Необязательный

С трудом полученные уроки: практические соображения

  • Улучшение безопасности: Используйте multi-sig или timelock для администратора. Корейские пословицы учат, что «тигр не оставляет после себя ничего, кроме своей шкуры» — поэтому вы также должны обеспечить полномочия на обновление, чтобы ваш проект не был опустошен злоумышленниками.
  • Инициализация: Всегда инициализируйте хранилище прокси через конструктор или специальную функцию, а не в конструкторе логического контракта.
  • Тестирование: Имитация обновлений на тестовых сетях. Использование Литейный завод или Каска для создания сценариев обновлений и проверки целостности хранилища.

Пример кода: развертывание и обновление с помощью Hardhat

Развернуть прокси

const logic = await MyLogic.deploy(); const proxy = await ERC1967Proxy.deploy(logic.address, "0x"); // данные инициализации

Реализация обновления

await proxy.upgradeTo(newLogic.address); // Вызывается только администратором

Более глубокий анализ: сравнение стоимости газа

Операция Прозрачный прокси UUPS-прокси Минимальный прокси-сервер ERC1967
Развертывание Высокий Умеренный Низкий
Обновление Умеренный Низкий Низкий
Вызов функции Умеренный Низкий Низкий

Хан на практике: почему бы просто не использовать клоны EIP-1167?

Минимальные прокси EIP-1167 эффективны, но не имеют встроенной возможности обновления. Минимальный обновляемый прокси ERC1967 — это хан-разрешающая середина: минимальная, но прочная — как дома ханок в Чонджу, устойчивая к испытанию временем и изменениями.


Заключительные замечания: лучшие практики для производства

  • Децентрализация администрирования: Используйте управление по цепочке или Gnosis Safe.
  • Модернизации монитора: Создавайте события обновления и отслеживайте их, словно геомант, читающий горные ветры.
  • Аудит: Перед развертыванием или обновлением производственных прокси-серверов закажите внешний аудит.

Пример таблицы: сводка основных шаблонов

Шаблон Возможность модернизации Безопасное хранение Газоэффективный Готово к производству
Минимальный прокси-сервер EIP-1167 Нет Да Да Ограниченный
Прозрачный прокси Да Умеренный Умеренный Да
UUPS (ERC1822) Да Да Да Да
Минимальный прокси-сервер ERC1967 Да Да Да Да

Минимальный обновляемый прокси-сервер ERC1967 — это конфигурация, о которой все говорят в Web3 не только из-за ее технических достоинств, но и потому, что она является живым свидетельством развития отрасли: стремления как к инновациям, так и к безопасности, как к скорости, так и к отказоустойчивости.

Мён Сок

Мён Сок

Аналитик данных

Мён Сок — преданный своему делу и методичный аналитик данных в ProxyLister, где он специализируется на курировании и ведении всеобъемлющих списков бесплатных прокси-серверов. С пристальным вниманием к деталям и страстью к кибербезопасности Мён гарантирует точность и актуальность данных, предоставляя надежные ресурсы для пользователей по всему миру. Его аналитические навыки и способности решать проблемы делают его бесценным членом команды, продвигая миссию компании по предоставлению надежных прокси-сервисов.

Комментарии (0)

Здесь пока нет комментариев, вы можете стать первым!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *