Немного о EIP-1967
В предыдущем посте в сервисе для чтения слотов памяти присутствовала отдельная настройка для контрактов использующих ERC-1967. Мне не приходилось ранее сталкиваться с ним в работе, поэтому можете поправить меня в комментариях, если что будет не совсем точно.
Итак, EIP-1967 стандартизирует как Прокси контракты хранят информацию о контракте Исполнения и другие необходимые данные, такие как адреса beacon контрактов и админский функционал.
Особенностью данного стандарта является необычный расчет слота памяти. Если в обычной реализации формула:
bytes32(uint256(keccak256("eip1967.proxy.admin")))
то в EIP1967 она такая:
bytes32(uint256(keccak256("eip1967.proxy.admin")) -1 )
Вообще, логика данного стандарта позволяет исключить ошибки в слотах памяти между контрактами Прокси и Исполнения, так как он выбирает слоты, которые не были зарезервированы компилятором Solidity а сама необычная калькуляция слота - избежать, так называемой, атаки preimage.
Preimage атака заключатся в том, чтобы найти изначальное "сообщение", которое было зашифровано одним из криптографических способов (например, keccak или sha).
Больше о EIP-1967 можно почитать в обсуждениях на GitHub.
Я буду добавлять информацию об этом стандарте по мере работы с ним. Все будет также доступно по тегу #eip1967.
#eip1967
Post #692
621
- ❤ 4
- 👍 3