Краткий глоссарий

Этот глоссарий содержит часто используемые термины в Ethereum сообществе. Эти термины используются во всей книге, поэтому занесите его в закладки для быстрого поиска.

Account (счет)

Объект, содержащий адрес, баланс, nonce, а также необязательные хранилище и код. Счет может быть счетом контракта или счетом, принадлежащим внешнему владельцу (EOA, externally owned account).

Address (адрес)

В самом общем случае представляет собой EOA или контракт, который может принимать (адрес получателя) или отправлять (адрес отправителя) транзакции. Более конкретно, это крайние правые 160 бит хэша (см. Keccak) открытого ключа (см. ECDSA).

Assert

В Solidity assert(false) компилируется в 0xfe, недопустимый опкод, который расходует весь оставшийся газ и отменяет все изменения. Если оператор assert() не срабатывает, значит, происходит что-то неправильное, непредусмотренное или неожиданное. Поэтому вам необходимо исправить свой код. Вы должны использовать assert(), чтобы избегать ситуаций, которые никогда не должны возникать.

От старшего к младшему (Big-endian)

Позиционное представление чисел, при котором старший разряд стоит первым. Противоположность little-endian, где первой стоит младшая цифра.

Предложение по улучшению Биткоина (Bitcoin Improvement Proposals, BIP)

Набор предложений, которые сделали участники сообщества Биткойн для улучшения Биткойна. Например, BIP-21 - это предложение по улучшению схемы унифицированного идентификатора ресурсов (URI) Биткойна.

Блок (block)

Набор необходимой информации (заголовок блока) о входящих в блок транзакциях, а также набор других заголовков блока, известных как оммеры. Блоки добавляются в сеть Ethereum майнерами.

Блокчейн (blockchain)

В Ethereum - последовательность блоков, подтвержденных системой доказательств выполнения работы (proof of work), каждый из которых связан со своим предшественником вплоть до первоначального блока. Отличие от протокола Bitcoin в том, что в нем нет ограничения на размер блока; вместо этого используются различные ограничения на газ.

Байткод (bytecode)

Абстрактный набор инструкций, предназначенный для эффективного выполнения программным интерпретатором или виртуальной машиной. В отличие от человекочитаемого исходного кода, байткод выражается в числовом формате.

Византийское разветвление

Первый из двух жестких разветвлений на стадии разработки Metropolis. Он включал EIP-649: Metropolis Difficulty Bomb Delay и Block Reward Reduction, где Ледниковый период (см. ниже) был отложен на 1 год, а вознаграждение за блок было уменьшено с 5 до 3 eth.

Компиляция

Преобразование кода, написанного на языке программирования высокого уровня (например, Solidity), в язык более низкого уровня (например, байткод EVM).

Консенсус

Ситуация когда множество узлов - обычно большинство узлов в сети - имеют одинаковые блоки в локально проверенном блокчейне. Не следует путать с правилами консенсуса.

Правила консенсуса

Правила проверки блоков, которым следуют полные узлы, чтобы оставаться в консенсусе с другими узлами. Не следует путать с консенсусом.

Константинопольское разветвление

Вторая часть этапа Metropolis, первоначально запланированная на середину 2018 года. Ожидается, что среди прочих изменений будет переход на гибридный алгоритм консенсуса proof-of-work/proof-of-stake.

Счёт смарт-контракта (Contract account)

Счет, содержащий код, который выполняется всякий раз, когда он получает транзакцию от другого счета (EOA или контракта).

Транзакция создания контракта

Специальная транзакция с "нулевым адресом" в качестве получателя, которая используется для регистрации контракта и записи его в блокчейн Ethereum (см. "нулевой адрес").

Децентрализованная автономная организация (Decentralized Autonomous Organization, DAO)

Компания или другая организация, которая работает без иерархического управления. Также термин может относиться к контракту под названием "The DAO", запущенному 30 апреля 2016 года, который затем был взломан в июне 2016 года; в конечном итоге это послужило причиной жесткого разветвления (кодовое название DAO) на блоке №1,192,000, который отменил взломанный контракт DAO и привел к разделению Ethereum и Ethereum Classic на две конкурирующие системы.

Децентрализованное приложение (Decentralized application, DApp)

Как минимум, это смарт-контракт и пользовательский веб-интерфейс. В более широком смысле DApp - это веб-приложение, построенное поверх открытых, децентрализованных, одноранговых инфраструктурных сервисов. Кроме того, многие DApp включают децентрализованное хранилище и/или протокол сообщений и платформу.

Deed

Стандарт неразменных токенов (NFT), введенный предложением ERC721. В отличие от токенов ERC20, deed подтверждают право собственности и не являются взаимозаменяемыми, хотя они не признаются в качестве юридических документов ни в одной юрисдикции - по крайней мере, в настоящее время (см. также "NFT").

Сложность

Общесетевая настройка, определяющая, какой объем вычислений требуется для создания доказательства работы.

Цифровая подпись

Короткая строка данных, которую пользователь создает для документа с помощью закрытого ключа таким образом, что любой человек, имеющий соответствующий открытый ключ, подпись и документ, может проверить, что (1) документ был "подписан" владельцем данного закрытого ключа, и (2) документ не был изменен после его подписания.

ECDSA

Алгоритм цифровой подписи с эллиптической кривой. Криптографический алгоритм, используемый в Ethereum для обеспечения того, что средства могут быть потрачены только их владельцами.

Предложение по усовершенствованию Ethereum (Ethereum Improvement Proposal, EIP)

Предложение по усовершенствованию Ethereum. Проектный документ, предоставляющий информацию сообществу Ethereum и описывающий предлагаемую новую функцию, ее процессы или среду. Для получения дополнительной информации см. https://github.com/ethereum/EIPs (см. также "ERC").

Служба имен Ethereum (Ethereum Name Service, ENS)

Служба имен Ethereum. Дополнительную информацию см. на сайте https://github.com/ethereum/ens/.

Энтропия

В контексте криптографии отсутствие предсказуемости или уровень случайности. При генерации секретной информации, такой как закрытые ключи, алгоритмы обычно полагаются на источник высокой энтропии для обеспечения непредсказуемости выходных данных.

Счёт с внешним управлением (Externally Owned Account, EOA)

Учетная запись, принадлежащая внешним пользователям. Учетная запись, созданная человеческими пользователями сети Ethereum или для них.

Запрос на комментарии Ethereum (Ethereum Request for Comments, ERC)

Обозначение, присвоенное некоторым EIP, которые пытаются определить конкретный стандарт использования Ethereum.

Ethash

Алгоритм proof-of-work для Ethereum 1.0. Для получения дополнительной информации см. https://github.com/ethereum/wiki/wiki/Ethash.

Эфир (Ether)

Родная криптовалюта, используемая в экосистеме Ethereum, которая покрывает расходы на газ при выполнении смарт-контрактов. Ее символ - Ξ, греческий прописной символ Xi.

Событие (Event)

Позволяет использовать средства протоколирования EVM. Децентраилизованные приложения могут прослушивать события и использовать их для запуска обратных вызовов JavaScript в пользовательском интерфейсе. Для получения дополнительной информации см. http://solidity.readthedocs.io/en/develop/contracts.html#events.

Виртуальная машина Ethereum (Ethereum Virtual Machine, EVM)

Виртуальная машина на основе стека, выполняющая байткод. В Ethereum модель выполнения определяет, как изменяется состояние системы при выполнении серии инструкций байткода и небольшого кортежа данных об окружающей среде. Это задается с помощью формальной модели виртуальной машины состояний.

Язык ассемблера EVM

Человекочитаемая форма байткода EVM.

Вспомогательная функция (функци Fallback)

Функция по умолчанию, вызываемая при отсутствии данных или объявленного имени функции.

Кран (faucet)

Служба, предоставляющая средства в виде бесплатного тестового эфира, который можно использовать в тестовой сети.

Финни (Finney)

Номинал эфира. 1 финни = 1015 вей, 103 финни = 1 эфир.

Ветка (или вилка или fork)

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

Frontier

Начальный этап тестовой разработки Ethereum, длившийся с июля 2015 года по март 2016 года.

Ganache

Персональный блокчейн Ethereum, который можно использовать для запуска тестов, выполнения команд и проверки состояния, контролируя при этом работу цепи.

Газ

Виртуальное топливо, используемое в Ethereum для выполнения смарт-контрактов. EVM использует механизм учета для измерения потребления газа и ограничения потребления вычислительных ресурсов (см. "Turing complete").

Лимит газа

Максимальное количество газа, которое может израсходовать транзакция или блок.

Гэвин Вуд

Британский программист, сооснователь и бывший технический директор Ethereum. В августе 2014 года он предложил Solidity, контрактно-ориентированный язык программирования для написания смарт-контрактов.

Первичный блок (Genesis блок)

Первый блок в блокчейне, используемый для инициализации конкретной сети и её криптовалюты.

Geth

Go Ethereum. Одна из самых известных реализаций протокола Ethereum, написанная на языке Go.

Жесткое разветвление

Обычно возникает, когда не обновленные узлы не могут подтвердить блоки, созданные обновленными узлами, которые следуют новым правилам консенсуса. Не следует путать с мягким разветвлением, программным разветвлением или Git-веткой.

Хэш

Отпечаток фиксированной длины входных данных переменного размера, создаваемый хэш-функцией.

HD-кошелек

Кошелек, использующий иерархический детерминированный (HD) протокол создания и передачи ключей (BIP-32).

Семя HD-кошелька

Значение, используемое для генерации главного закрытого ключа и главного кода цепочки для кошелька HD. Семя кошелька может быть представлено мнемоническими словами, что облегчает копирование, резервное копирование и восстановление закрытых ключей.

Homestead

Вторая стадия развития Ethereum, запущенная в марте 2016 года на блоке № 1 150 000.

Протокол межбиржевых клиентских адресов (Inter-exchange Client Address Protocol, ICAP)

Кодировка адресов Ethereum, частично совместимая с кодировкой международного номера банковского счета (IBAN), обеспечивающая универсальность, контрольную сумму и совместимость кодировки адресов Ethereum. В адресах ICAP используется новый псевдокод страны IBAN: XE, обозначающий "eXtended Ethereum", который используется в неюрисдикционных валютах (например, XBT, XRP, XCP).

Ледниковый период

Жесткое разветвление Ethereum на блоке № 200,000 для введения экспоненциального увеличения сложности (он же Difficulty Bomb), мотивирующего переход к доказательству доли.

Интегрированная среда разработки (Integrated Development Environment, IDE)

Пользовательский интерфейс, который обычно сочетает в себе редактор кода, компилятор, среду выполнения и отладчик.

Проблема неизменяемого развернутого кода

После развертывания кода контракта (или библиотеки) он становится неизменяемым. Стандартная практика разработки программного обеспечения предполагает возможность исправления возможных ошибок и добавления новых функций, поэтому это представляет собой проблему для разработки смарт-контрактов.

Внутренняя транзакция (также "сообщение")

Транзакция, отправленная со счета контракта на другой счет контракта или EOA.

Межпланетная файловая система (InterPlanetary File System, IPFS)

Протокол, сеть и проект с открытым исходным кодом, разработанный для создания однорангового метода хранения и обмена гипермедиа в распределенной файловой системе с возможностью адресации содержимого.

Функция производных ключей (Key Derivation Function, KDF)

Также известна как "алгоритм растягивания пароля", используется форматами хранилищ ключей для защиты от атак перебора, словаря и радужной таблицы при шифровании парольной фразы путем многократного хэширования парольной фразы.

Keccak-256

Криптографическая хэш-функция, используемая в Ethereum. Keccak-256 была стандартизирована как SHA-3.

Файл хранилища ключей

Закодированный в JSON файл, содержащий один (случайно сгенерированный) закрытый ключ, зашифрованный парольной фразой для дополнительной безопасности.

LevelDB

Хранилище типа "ключ-значение"с открытым исходным кодом, реализованное в виде легковесной универсальной библиотеки с привязкой ко многим платформам.

Библиотека (library)

Особый тип контракта, который не имеет ни оплачиваемых функций, ни функции отката, ни хранилища данных. Поэтому он не может получать или удерживать эфир, а также хранить данные. Библиотека служит в качестве ранее развернутого кода, который другие контракты могут вызывать для вычислений только для чтения.

Облегченный клиент

Клиент Ethereum, который не хранит локальную копию блокчейна и не проверяет блоки и транзакции. Он предлагает функции кошелька и может создавать и транслировать транзакции.

Дерево Меркла Патрициа (Merkle Patricia Tree)

Структура данных, используемая в Ethereum для эффективного хранения пар ключ-значение.

Сообщение

Внутренняя транзакция, которая никогда не сериализуется и отправляется только внутри EVM.

Вызов сообщения

Акт передачи сообщения от одного счета к другому. Если счет назначения связан с кодом EVM, то виртуальная машина будет запущена с состоянием этого объекта, и сообщение будет обработано.

METoken

Токен Mastering Ethereum. Токен ERC20, используемый для демонстрации в этой книге.

Metropolis

Третья стадия разработки Ethereum, запущенная в октябре 2017 года.

Майнер

Узел сети, который находит достоверные доказательства работы новых блоков путем повторного хеширования.

Mist

Первый браузер с поддержкой Ethereum, созданный Ethereum Foundation. Он содержит браузерный кошелек, который стал первой реализацией стандарта токенов ERC20 (Фабиан Фогельштеллер, автор ERC20, также был главным разработчиком Mist). Mist также был первым кошельком, который ввел контрольную сумму camelCase (EIP-55; см. [EIP55]). Mist работает на полном узле и предлагает браузер с поддержкой хранилища на основе Swarm и адресов ENS.

Сеть

Ссылаясь на сеть Ethereum, одноранговую сеть, которая распространяет транзакции и блоки на каждый узел Ethereum (участник сети).

Неразменный токен (Non-fungible token, NFT)

Неразменный токен (также известный как "deed"). Это стандарт токенов, введенный предложением ERC721. NFT можно отслеживать и обменивать, но каждый токен уникален и отличен; они не взаимозаменяемы, как токены ERC20. NFT могут представлять право собственности на цифровые или физические активы.

Узел

Программный клиент, участвующий в работе сети.

Nonce

В криптографии значение, которое может быть использовано только один раз. В Ethereum используются два типа nonce: account nonce - это счетчик транзакций в каждом счете, который используется для предотвращения атак воспроизведения; proof-of-work nonce - это случайное значение в блоке, которое было использовано для доказательства работы.

Оммер

Дочерний блок предка, который сам не является предком. Когда майнер находит действующий блок, другой майнер может опубликовать конкурирующий блок, который добавляется в вершину блокчейна. В отличие от Биткойна, осиротевшие блоки в Ethereum могут быть включены более новыми блоками как оммеры и получить вознаграждение за частичный блок. Термин "оммер" является предпочтительным гендерно-нейтральным термином для обозначения брата или сестры родительского блока, но иногда его также называют "дядей".

Parity

Одна из наиболее известных интероперабельных реализаций клиентского программного обеспечения Ethereum.

Доказательство доли (PoS)

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

Доказательство работы (PoW)

Часть данных (доказательство), для нахождения которой требуются значительные вычисления. В Ethereum майнеры должны найти числовое решение алгоритма Ethash, которое соответствует заданной в масштабах сети сложности.

Открытый ключ

Число, полученное с помощью односторонней функции от закрытого ключа, которое может быть открыто для общего доступа и использоваться любым человеком для проверки цифровой подписи, сделанной с помощью соответствующего закрытого ключа.

Квитанция

Данные, возвращаемые клиентом Ethereum в качестве результата конкретной транзакции, включая хэш транзакции, номер ее блока, количество использованного газа и, в случае развертывания смарт-контракта, адрес контракта.

Атака с повторным вхождением (Re-entrancy)

Атака, заключающаяся в том, что атакующий контракт вызывает функцию контракта-жертвы таким образом, что в процессе выполнения жертва снова рекурсивно вызывает атакующий контракт. Это может привести, например, к краже средств путем пропуска частей контракта жертвы, которые обновляют балансы или подсчитывают суммы снятия.

Вознаграждение

Количество эфира, включаемое в каждый новый блок в качестве вознаграждения от сети майнеру, нашедшему решение для доказательства работы.

Рекурсивный префикс длины (Recursive Length Prefix, RLP)

Рекурсивный префикс длины. Стандарт кодирования, разработанный разработчиками Ethereum для кодирования и сериализации объектов (структур данных) произвольной сложности и длины.

Сатоси Накамото

Имя, используемое человеком или людьми, которые разработали Биткойн, создали его оригинальную эталонную реализацию и первыми решили проблему двойной траты для цифровой валюты. Их настоящая личность остается неизвестной.

Секретный ключ (он же закрытый ключ)

Секретное число, которое позволяет пользователям Ethereum подтвердить право собственности на счет или контракты путем создания цифровой подписи (см. "открытый ключ", "адрес", "ECDSA").

Serenity

Четвертая и последняя стадия разработки Ethereum. Serenity пока не имеет запланированной даты выпуска.

Serpent

Процедурный (императивный) язык программирования смарт-контрактов с синтаксисом, похожим на Python.

SHA

Алгоритм безопасного хэширования. Семейство криптографических хэш-функций, опубликованных Национальным институтом стандартов и технологий (NIST).

Синглтон

Термин компьютерного программирования, описывающий объект, который может существовать только в единственном экземпляре.

Смарт-контракт (СмК)

Программа, выполняемая на вычислительной инфраструктуре Ethereum.

Solidity

Процедурный (императивный) язык программирования с синтаксисом, похожим на JavaScript, C++ или Java. Самый популярный и наиболее часто используемый язык для смарт-контрактов Ethereum. Создан доктором Гэвином Вудом (соавтором этой книги).

Встраиваемый ассемблер Solidity

Язык ассемблера EVM в программе Solidity. Поддержка встроенного ассемблера в Solidity облегчает написание некоторых операций.

Spurious Dragon

Жесткое разветвление блокчейна Ethereum, произошедший в блоке № 2,675,000 для решения проблемы увеличения числа векторов атак типа "отказ в обслуживании" и очищения состояния (см. также "Мандариновый свисток"). Кроме того, механизм защиты от атак повторного воспроизведения.

Swarm

Децентрализованная (P2P) сеть хранения данных, используемая вместе с Web3 и Whisper для создания децентрализованных приложений.

Сабо (Szabo)

Деноминация эфира. 1 сабо = 1012 вей, 106 сабо = 1 эфир.

Мандариновый свисток

Жесткий форк блокчейна Ethereum, который произошел в блоке № 2,463,000, чтобы изменить расчет газа для определенных операций ввода-вывода и очистить накопленное состояние от атаки типа "отказ в обслуживании", которая использовала низкую стоимость газа для этих операций.

Testnet

Сокращение от "тестовая сеть", сеть, используемая для имитации поведения основной сети Ethereum.

Транзакция

Данные, зафиксированные в блокчейне Ethereum, подписанные учетной записью, указавшей конкретный адрес. Транзакция содержит метаданные, такие как лимит газа для данной транзакции.

Truffle

Один из наиболее часто используемых фреймворков для разработки Ethereum.

Тьюринг-полный

Понятие, названное в честь английского математика Алана Тьюринга: система правил манипулирования данными (например, набор команд компьютера, язык программирования или клеточный автомат) считается "полной по Тьюрингу" или "вычислительно универсальной", если она может быть использована для моделирования любой машины Тьюринга.

Виталик Бутерин

Российско-канадский программист, известный в первую очередь как соучредитель Ethereum и журнала Bitcoin.

Вайпер (Vyper)

Высокоуровневый язык программирования, похожий на Serpent, с синтаксисом, подобным Python. Предназначен для приближения к чисто функциональному языку. Создан Виталиком Бутериным.

Кошелек

Программное обеспечение, в котором хранятся секретные ключи. Используется для доступа и управления счетами Ethereum и взаимодействия со смарт-контрактами. Ключи не обязательно хранить в кошельке, вместо этого их можно получить из автономного хранилища (например, с карты памяти или бумаги) для повышения безопасности. Несмотря на название, кошельки никогда не хранят фактические монеты или токены.

Web3

Третья версия интернета. Впервые предложенная доктором Гэвином Вудом, Web3 представляет собой новое видение и фокус для веб-приложений: от централизованных и управляемых приложений к приложениям, построенным на децентрализованных протоколах.

Вэй (wei)

Наименьший номинал эфира. 1018 вэев = 1 эфир.

Whisper

Децентрализованная (P2P) служба обмена сообщениями. Используется вместе с Web3 и Swarm для создания DApps.

Нулевой адрес

Специальный адрес Ethereum, полностью состоящий из нулей, который указывается в качестве адреса назначения транзакции создания контракта.