Доп 2. Стандарты EIP, ERC

Предложения по усовершенствованию Ethereum (EIPs)

Репозиторий Ethereum Improvement Proposal находится по адресу github.com/ethereum/EIPs. Рабочий процесс проиллюстрирован в документе "Рабочий процесс предложения по улучшению Ethereum".

Из EIP-1: EIP расшифровывается как Ethereum Improvement Proposal. EIP - это проектный документ, предоставляющий информацию сообществу Ethereum или описывающий новую функцию для Ethereum, его процессов или среды. EIP должен содержать краткую техническую спецификацию функции и ее обоснование. Автор EIP отвечает за достижение консенсуса в сообществе и документирование особых мнений.

Рабочий процесс предложения по улучшению Ethereum Рисунок 1. Рабочий процесс предложения по улучшению Ethereum

Таблица наиболее важных EIP и ERC

Таблица 1. Важные EIP и ERC

EIP/ERC # Title/Description
EIP-1 Цель и руководящие принципы EIP
EIP-2 Изменения, связанные с хард-форком
EIP-5 Gas Usage for RETURN and CALL*
EIP-6 Renaming +SUICIDE+ Opcode
EIP-7 DELEGATECALL
EIP-8 devp2p Forward Compatibility Requirements for Homestead
EIP-20 ERC-20 Token Standard. Describes standard functions a token contract may implement to allow DApps and wallets to handle tokens across multiple interfaces/DApps. Methods include: totalSupply, +balanceOf(address)+, transfer, transferFrom, approve, allowance. Events include: Transfer (triggered when tokens are transferred), pass:[Approval] (triggered when approve is called).
EIP-55 Кодирование адреса контрольной суммы в смешанном регистре
EIP-86 Абстракция происхождения и подписи транзакций. Закладывает основу для "абстрагирования" безопасности аккаунта и позволяет пользователям создавать "контракты аккаунта", двигаясь к модели, в которой в долгосрочной перспективе все счета являются контрактами, которые могут оплачивать газ, и пользователи могут свободно определять свои собственные модели безопасности, которые выполняют любую желаемую проверку подписи и проверку nonce (вместо использования внутрипротокольного механизма, где ECDSA и схема nonce по умолчанию являются единственным "стандартным" способом защиты аккаунта, который в настоящее время жестко закодирован в обработке транзакций).
EIP-96 Изменения корня блокхэша и состояния. Хранит блокхеши в состоянии, чтобы уменьшить сложность протокола и необходимость в сложных клиентских реализациях для обработки опкода BLOCKHASH. Расширяет диапазон того, как далеко назад может уходить проверка блокчейна, с побочным эффектом создания прямых связей между блоками с очень удаленными номерами блоков для более эффективной начальной синхронизации клиентов.
EIP-100 Изменить настройку сложности на целевое среднее время блока и включение дядек.
EIP-101 Валюта спокойствия и криптовалюта абстракции. Абстрагирует эфир на более высокий уровень, позволяя эфиру и субтокенам одинаково обращаться с контрактами, снижает уровень косвенности, необходимый для пользовательских политик, таких как мультисиги, и очищает основной протокол Ethereum, снижая минимальную сложность реализации консенсуса.
EIP-105 Бинарный шардинг плюс семантика вызова контрактов. "Лесенка для шардинга" EIP, позволяющая распараллеливать транзакции Ethereum с помощью механизма шардинга двоичного дерева и создающая основу для последующей схемы шардинга. Исследования в процессе; см. https://github.com/ethereum/sharding[].
EIP-137 Служба доменных имен Ethereum - спецификация
EIP-140 Новый опкод: +REVERT+. Добавляет опкод REVERT, который останавливает выполнение и откатывает изменения состояния выполнения EVM без потребления всего предоставленного газа (вместо этого контракт должен платить только за память) или потери логов, и возвращает вызывающей стороне указатель на участок памяти с кодом ошибки или сообщением.
EIP-141 Designated invalid EVM instruction
EIP-145 Инструкции побитового сдвига в EVM
EIP-150 Изменение стоимости газа для операций с большим объемом ввода-вывода
EIP-155 Простая защита от атаки повторного воспроизведения. Атака повторного воспроизведения позволяет любой транзакции, использующей узел или клиент Ethereum до EIP-155, стать подписанной, чтобы она была действительной и выполнялась как в цепочке Ethereum, так и в Ethereum Classic.
EIP-158 Государственный клиринг
EIP-160 Увеличение стоимости EXP
EIP-161 Расчистка тройки штатов (инвариантно-сохраняющая альтернатива)
EIP-162 Начальный регистратор хэша ENS
EIP-165 Обнаружение стандартного интерфейса ERC-165
EIP-170 Ограничение размера кода контракта
EIP-181 Поддержка ENS для обратного разрешения адресов Ethereum
EIP-190 Стандарт упаковки смарт-контрактов Ethereum
EIP-196 Предварительно скомпилированные контракты для сложения и скалярного умножения на эллиптической кривой +alt_bn128+. Требуется для выполнения верификации zkSNARK в пределах лимита блочного газа.
EIP-197 Предварительно скомпилированные контракты для оптимальной проверки парности на эллиптической кривой +alt_bn128+. Объединен с EIP-196.
EIP-198 Большая целочисленная модульная экспоненция. Прекомпиляция, позволяющая проверять подпись RSA и другие криптографические приложения.
EIP-211 Новые опкоды: RETURNDATASIZE и RETURNDATACOPY. Добавляет поддержку возврата значений переменной длины внутри EVM с простым газовым зарядом и минимальными изменениями в вызывающих опкодах, используя новые опкоды RETURNDATASIZE и RETURNDATACOPY. Обработка аналогична существующей calldata, при которой после вызова возвращаемые данные сохраняются в виртуальном буфере, из которого вызывающая сторона может скопировать их (или их части) в память, а при следующем вызове буфер перезаписывается.
EIP-214 Новый опкод: STATICCALL. Разрешает не изменяющие состояние вызовы самого себя или других контрактов, запрещая любые изменения состояния во время вызова (и его подвызовов, если они есть), чтобы повысить безопасность смарт-контракта и гарантировать разработчикам, что ошибки реентерабельности не могут возникнуть в результате вызова. Вызывает дочерний контракт с флагом STATIC, установленным в true для выполнения дочернего контракта, вызывая исключение при любых попытках выполнить операции по изменению состояния внутри экземпляра выполнения, где STATIC равен true, и сбрасывает флаг после возвращения вызова.
EIP-225 Rinkeby testnet, использующий доказательство полномочий, где блоки добываются только доверенными подписчиками.
EIP-234 Добавить blockHash в опции фильтра JSON-RPC
EIP-615 Подпрограммы и статические переходы для EVM
EIP-616 SIMD-операции для EVM
EIP-681 Формат URL для транзакционных запросов
EIP-649 Metropolis Задержка бомбы сложности и уменьшение награды за блок. Задержка Ледникового периода (он же Бомба сложности) на 1 год и снижение награды за блок с 5 до 3 эфиров.
EIP-658 Встраивание кода статуса транзакции в квитанции. Находит и встраивает поле статуса, указывающее на состояние успеха или неудачи, в квитанции транзакции для вызывающих, так как больше нельзя считать, что транзакция не удалась, если и только если она израсходовала весь газ после введения опкода REVERT в EIP-140.
EIP-706 DEVp2p snappy compression
EIP-721 ERC-721 Non-Fungible Token Standard. Стандартный API, позволяющий смарт-контрактам работать в качестве уникальных торгуемых нефункциональных токенов (NFT), которые можно отслеживать в стандартизированных кошельках и торговать на биржах как ценные активы, аналогично ERC20. CryptoKitties стал первой популярной реализацией цифрового NFT в экосистеме Ethereum.
EIP-758 Подписки и фильтры для завершенных транзакций
EIP-801 ERC-801 Canary Standard
EIP-827 ERC827 Token Standard. Расширение стандартного интерфейса ERC20 для токенов с методами, позволяющими выполнять вызовы внутри +передача+ и утверждения. Этот стандарт предоставляет базовую функциональность для передачи токенов, а также позволяет одобрить токены, чтобы они могли быть потрачены другой третьей стороной на цепочке. Кроме того, он позволяет разработчику выполнять вызовы по переводам и утверждениям
EIP-930 ERC930 Вечное хранение. Контракт ES (Eternal Storage) принадлежит адресу, который имеет права на запись. Хранилище является общедоступным, что означает, что все имеют права на чтение. Оно хранит данные в отображениях, используя одно отображение для каждого типа переменных. Использование этого контракта позволяет разработчику при необходимости легко перенести хранилище на другой контракт