Транзакции в сети Ethereum

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

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

Эта комиссия выплачивается в единицах стоимости, называемых «газом» (gas).

Что такое транзакция в блокчейне Ethereum?


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

«Криптографически безопасный» означает, что безопасность криптовалюты обеспечивается сложными математическими алгоритмами, которые практически невозможно обойти.

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

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

«С общим состоянием» означает, что состояние, заданное в системе, является общим и открытым для всех.

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

Газ и комиссии сети


Итак, вы готовы создать транзакцию, например, сделав перевод эфира другому участнику сети, но перед вами возник обсуждаемый нами параметр – лимит газа (GAZ LIMIT). Как правильно его задать, чтобы не переплатить, и чтобы транзакция выполнилась?

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

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

Он показывает, какой объём вычислений пользователь готов оплатить в рамках запускаемой транзакции. Разберём оба параметра по-отдельности.

GAZ LIMIT

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

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

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

Таким образом, если вы укажете меньший предел газа, чем потребуется для выполнения данной транзакции, то просто лишитесь комиссии за указанный объём газа. Если укажите намного больше, то получите “сдачу” обратно, при условии, что транзакция вложилась в ваш лимит.

Ну а если вы указали большой предел газа, а транзакция оказалась неправильно написанной и затребовала весь разрешённый газ за своё выполнение, то вы лишитесь всех тех ETH, которые стоят за GAZ в соответствие с вашей ценой газа.

GAZ PRICE
Данный параметр регулирует цену за единицу газа. Задаёт его пользователь при запуске транзакции в регулируемых виртуальной машиной пределах. По сути, увеличение цены газа предлагает майнерам большую стоимость за проверку вашей транзакции.

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

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

Плата за хранение данных


Газ используется для оплаты не только вычислительных действий, но и хранения данных. Общая плата за хранение пропорциональна наименьшему использованному кратному 32 байтам числу.

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

Поэтому, если транзакция инициирует выполнение действия, в результате которого объём занимаемого хранилища сокращается, то комиссия за выполнение этой операции не взимается, ПЛЮС производится возврат средств за освобождённый объём.

В чём заключается цель сбора комиссий?


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

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

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

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

Вполне вероятно, что вы подумаете: «А я-то тут причем? Зачем я буду платить за использование хранилища?» Ну, что вам сказать, вся сеть Эфириума берет на себя плату как за вычисления, так и за использования хранилища…как-то так.

Перевод ETH с одного кошелька на другой

Чтобы отправить эфир на другой Ethereum кошелек, нужно перейти во вкладку «Перевести эфир». Там снова откройте свой Эфириум кошелек и введите к нему пароль. Далее введите адрес эфириум кошелька, на который хотите выслать эфир, количество эфира, размер лимита газа (комиссия, которая своим размером напоминает сатоши в биткоине, чем комиссия больше, тем быстрее пройдет транзакция) и нажмите «Сформировать транзакцию». После этого подтвердите желание совершить перевод ETH на другой кошелек.

А можно вообще не платить?

Так что мы собрали небольшую табличку пулов по Эфиру с указанием комиссии и минимальной выплаты.

  • Ссылка Комиссия Мин. Выплата
  • 2Miners 1% 0.1 ETH
  • Ethermine.org 1% 0.05 Eth
  • Ethpool.org 1% 0,1 Eth
  • Nanopool.org 1% 0.2 Eth
  • Ethereumpool.co 1% 0,1 Eth
  • Suprnova.cc 1% 0.001 Eth
  • www2.coinmine.pl/eth 1% 0.001 Eth
  • miningpoolhub.com 0.90% 0.01 Eth
  • eth.minepools.ru 0.50% 0.2 Eth
  • mole-pool.net 0% 0.5 Eth
  • alpereum.ch 0.20% 0.05 Eth
  • digger.ws 1% 0.2 Eth
  • eth.pp.ua 1% 0,1 Eth

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

Подробнее читайте в статье: Пулы для майнинга Эфириума

Содержание транзакций и сообщений


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

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

Все транзакции содержат следующие компоненты, независимо от их типа:

  • nonce:количество транзакций, отправленных отправителем;
  • gasPrice: количество Вэй, которое отправитель готов заплатить за единицу газа, необходимого для совершения сделки;
  • gasLimit: максимальный объем газа, который отправитель желает заплатить за выполнение этой транзакции. Эта сумма устанавливается и оплачивается заранее, прежде чем какие-либо вычисления будут выполнены;
  • to: адрес получателя. В транзакции, создающей контракт, адрес учетной записи контракта еще не существует, и поэтому используется пустое значение;
  • value: количество Вэй, которое должно быть передано от отправителя получателю. В транзакции, создающей контракт, эта величина служит стартовым балансом на вновь созданной учетной записи;
  • v, r, s: используется для создания сигнатуры, которая идентифицирует отправителя транзакции;
  • init (существует только для транзакций, создающих контракт): фрагмент кода EVM, который используется для инициализации новой учетной записи контракта. init запускается только один раз, а затем отбрасывается. Когда init запускается сначала, он возвращает тело кода учетной записи, который является частью кода, который постоянно связан с учетной записью контракта;
  • data (необязательное поле, которое существует только для вызовов сообщений): входные данные (то есть параметры) вызова сообщения. Например, если интеллектуальный контракт служит службой регистрации домена, вызов этого контракта может ожидать поля ввода, такие как домен и IP-адрес.

19-Ethereum-ICO-Cryogen-Blockchain.png В разделе «Учетные записи» мы узнали, что транзакции – как вызовы сообщений, так и транзакции по заключению договоров – всегда инициируются внешними учетными записями и передаются блочной цепочке. Еще один способ подумать о том, что транзакции – это то, что соединяет внешний мир с внутренним состоянием Эфириума.

20-Ethereum-ICO-Cryogen-Blockchain.png Но это не означает, что контракты не могут разговаривать с другими контрактами. Контракты, которые существуют в глобальном масштабе государства Эфириума, могут разговаривать с другими контрактами в том же объеме. То, как они это делают, – это «сообщения» или «внутренние транзакции» для других контрактов.

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

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

21-Ethereum-ICO-Cryogen-Blockchain.png Важно отметить, что внутренние транзакции или сообщения не содержат gasLimit. Это связано с тем, что предел газа определяется внешним создателем исходной транзакции (т. Е. Какой-либо внешней учетной записи). Ограничение на газ, которое внешние учетные записи должны быть достаточно высокими для осуществления транзакции, включая любые подзадачи, которые происходят в результате этой транзакции, такие как сообщения от договора к контракту.

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

Блоки с информацией о всех транзакциях блокчейна Ethereum


Блоки являются основными строительными элементами блокчейна. Блоки Эфириум состоят из различных компонентов, которые описываются так:

  • Заголовок блока;
  • Список транзакций;
  • Список заголовков Дядюшек (Ommers или Uncles).

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

  • Заголовок блока

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

  • Родительский хэш

Это 256- битный хэш Кечак (Keccak) заголовка блока родителя (предыдущего блока).

  • Хэш дядюшки

Здесь содержится 256- битный хэш Кечак всего списка блоков Дядюшек (Ommers, Uncles), включаемых в анный блок.

  • Выгодополучатель

Поле Выгодополучателя (Beneficiary) содержит значение 160- битного адреса того получателя, который желает получить вознаграждение за майнинг, когда данный блок будет успешно добыт.

  • Корень состояния

Поле Корня состояния (State root) содержит значение 256- битного хэна Кечак узла корня данного древа состояния. Он вычисляется после того как все транзакции были осуществлены и финализированы.

  • Корень транзакций

Значением Корня транзакций (Transactions root) является 256- битный хэш Кечак узла корня данного древа транзакции. Древо транзакции представляет полный список транзакций, включённых в этот блок.

  • Корень квитанций

Значением Корня квитанций (Receipts root) являются 256 бит хэша Кечак узла корня имеющегося древа квитанций транзакции. Это древо состоит из квитанций всех транзакций, включённых в данный блок. Квитанции транзакции вырабатываются после осуществления каждой транзакции и содержат полезную информацию по завершению транзакции (post- transaction). Дополнительные свеления о квитанциях транзакции предоставлены в следующем разделе.

  • Журналы bloom

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

  • Сложность

Это уровень сложности (difficulty) текущего блока.

  • Число

Общее число (number) всех предыдущих блоков; самым первым порождающим является блок ноль.

  • Предел газа

Это поле содержит то значение, которое представляет установленную величину предела значения потребления газа на блок.

  • Использованный газ

Это поле содержит общее потребление газа всеми включёнными в этот блок транзакциями.

  • Временной штамп

Временной штамп (Timestamp) является значением эпохи времени Unix общего времени инициализации блока.

  • Дополнительные данные

Поле Дополнительных данных (Extra data) может применяться для хранения произвольных данных, относящихся к данному блоку.

  • Смешанный хэш

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

  • Данное время

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

Следующий рисунок отображает подробную структуру всего блока и заголовка блока:


Порождающий блок (genesis block) может слегка отличаться в зависимости от тех данных, и того способа, которым он был создан из обычного блока. Он содержит 15 элементов, которые описываются здесь.

  • Квитанции транзакций

Квитанции транзакции применяются как механизм для хранения полученного состояния после исполнения некоторой транзакции. Другими словами, эти структуры используются для записи выхода исполнения определённой транзакции. Они производятся после исполнения каждой транзакции. Все квитанции сохраняются в некотором индексированном ключами древе. Хэш (256- битный Кечак) корня этого древа помещается в имеющийся заголовок блока в качестве основного корня квитанций. Он составляется из представленных здесь четырёх элементов.

  • Состояние после транзакции

Данный элемент (post-transaction state) является структурой древа, которая содержит значение состояния после исполнения определённой транзакции. Он кодируется как некий массив байт.

  • Использованный газ

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

  • Набор журналов регистрации

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

  • Фильтр bloom

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

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

Этот процесс может быть отображён следующей схемой:


Что такое заголовок блока и каково его содержание?

Все транзакции объединяются в «блоки.» Блокчейн содержит множество таких блоков, соединённых в цепочку.

В Эфириуме блок состоит из:

  • заголовка блока;
  • информации о группе транзакций, включённых в этот блок;
  • набора заголовков других блоков для оммеров текущего блока.

Заголовок блока


Давайте ненадолго вернёмся к блокам. Мы уже упоминали, что у каждого блока есть заголовок, но что именно он из себя представляет?

Заголовок блока состоит из части его содержимого и включает:

  • parentHash: хэш заголовка родительского блока (с его помощью набор блоков организуется в «цепочку»);
  • ommersHash: хэш списка оммеров текущего блока;
  • beneficiary: адрес счёта, на который перечисляется комиссия за майнинг этого блока;
  • stateRoot: хэш корневого узла trie-дерева состояний (ранее мы уже узнали, trie-дерево состояний хранится в заголовке и упрощает для лёгких клиентов верификацию чего-либо помимо состояния);
  • transactionRoot: хэш корневого узла trie-дерева, который содержит все транзакции, включённые в этот блок;
  • receiptsRoot: хэш корневого узла trie-дерева, содержащий квитанции обо всех транзакциях, включённых в этот блок;
  • logsBloom: фильтр Блюма (структура данных), состоящий из лога информации;
  • difficulty: уровень сложности данного блока;
  • number: порядковый номер текущего блока (генезисный блок имеет нулевой номер; номер каждого последующего блока увеличивается на единицу);
  • gasLimit: текущий лимит газа, расходуемого на блок;
  • gasUsed: общее количество газа, использованного на выполнение транзакций в данном блоке;
  • timestamp: UNIX-метка времени для создания данного блока;
  • extraData: дополнительные данные, относящиеся к этому блоку;
  • mixHash: хэш, который, в сочетании с nonce, служит подтверждением того, что для данного блока было выполнено достаточное количество вычислительных операций;
  • nonce: хэш, который, в сочетании с mixHash, служит подтверждением того, что для данного блока было выполнено достаточное количество вычислительных операций
    1-4eqfjxd2-dbivgvv-8si8g 22.34.45.png.

Обратите внимание, что заголовок каждого блока содержит три trie-структуры для:

  • состояния (stateRoot);
  • транзакций (transactionsRoot);
  • квитанций (receiptsRoot).

Эти trie-структуры – не что иное, как patricia-деревья Меркла, о которых мы говорили ранее.

Кроме того, в приведённых выше описаниях тоже было несколько терминов, значение которых стоит прояснить. Давайте остановимся на них подробнее.

Зависимость сложности блока и времени подтверждения транзакции


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

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

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

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

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

Неподтвержденные транзакции

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

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

Что такое «оммеры» и какова их функция?


Давайте разберемся с тем, что такое оммер (от англ. «ommer»). Оммер — это блок, родителем которого является родительский элемент текущего блока. В этой главе я вкратце опишу, для чего вообще нужны оммеры, а также из каких соображений в блоке содержится заголовки блоков для оммеров.

Их наличие, в первую очередь, обосновано тем, что время блокировки в Эфириуме намного ниже (примерно 15 секунд), чем для других блокчейнов, например, для биткоинов (примерно 10 секунд). Благодаря такой особенности скорость транзакций проведения увеличивается.

С другой стороны, одной из негативных сторон более короткого времени блокировки является то, что борьба майнеров за очередное блочное решение только усиливается. Такие конкурирующие блоки еще называют «блоки без родителя» (т.е. такие блоки не входят в основную цепочку блоков).

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

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

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

Логи с информацией о транзакциях и сообщениях


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

Логи содержат следующую информацию:

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

Генерация квитанций о транзакциях и информация в них


Квитанции о транзакциях
Логи, хранящиеся в заголовке, берутся из данных логов, которые содержатся в квитанциях о выполненных транзакциях. Точно так же, как вы получаете чек при покупке в магазине, Эфириум генерирует для каждой транзакции квитанцию с информацией о транзакции. Она включает следующие данные:

  • номер блока;
  • хэш блока;
  • хэш транзакции;
  1. количество газа, использованного при выполнении данной транзакции;
  2. общее количество газа, использованное в данном блоке после выполнения данной транзакции;
  3. логи, сгенерированные при выполнении данной транзакции;

..и так далее.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: