Читаем Больше денег: что такое Ethereum и как блокчейн меняет мир полностью

2. Вычислить комиссию за транзакцию по формуле STARTGAS × GASPRICE и определить адрес отправителя по цифровой подписи. Вычесть величину комиссии из баланса отправителя и прирастить одноразовый код отправителя. Если баланс отправителя меньше значения взимаемой комиссии, выдать ошибку.

3. Присвоить GAS = STARTGAS и взимать определенное количество газа за каждый обработанный майнером байт транзакции.

4. Переслать сумму транзакции с аккаунта отправителя на аккаунт получателя. Если аккаунта получателя не существует, создать его. Если аккаунт получателя – контракт, запустить код контракта, где контракт будет вычислен либо до конца, либо пока не закончится газ.

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

6. В противном случае вернуть отправителю комиссию за весь оставшийся газ и отправить майнеру комиссию, уплаченную за потраченный газ.

Для примера рассмотрим следующий код контракта:

if!self.storage[calldataload(0)]:

self.storage[calldataload(0)] = calldataload(32)

Заметим, что в реальности контракт пишется на низкоуровневом EVM-коде, но этот пример для ясности написан на Serpent, одном из наших высокоуровневых языков, который можно скомпилировать до EVM-кода. Предположим, что до транзакции хранилище нашего контракт-аккаунта было пустым, а затем посылается транзакция с 10 единицами эфира, 2000 газа, 0,001 GASPRICE и 64 байтами данных, где байты 0–31 представляют число 2, а байты 32–63 – строчку CHARLIE[114]. Здесь функция изменения состояния сработает так.

1. Убедиться, что транзакция валидна и корректно оформлена.

2. Убедиться, что у отправителя есть как минимум 2000 × 0,001 = 2 единицы эфира. После успешной проверки вычесть 2 эфира из баланса аккаунта отправителя.

3. При 2000 газа, если предположить, что транзакция занимает 170 байт и комиссия за байт равна 5, вычтем 850, и останется 1150 единиц газа.

4. Вычесть еще 10 единиц эфира из баланса аккаунта отправителя и добавить их к балансу получателя.

5. Запустить выполнение кода. В нашем примере это совсем просто: код проверяет, есть ли в хранилище контракт-аккаунта информация по адресу 2, замечает, что ее там нет, и прописывает туда значение CHARLIE. Предположим, это стоит 187 единиц газа, и газа остается 1150 – 187 = 963.

6. Добавить 963 × 0,001 = 0,963 единиц эфира в аккаунт отправителя и выдать получившееся состояние.

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

Отметим, что с точки зрения возврата сообщения работают эквивалентно транзакциям: если при выполнении сообщения заканчивается газ, то происходит откат к моменту вызова этого сообщения в контракте, но не к моменту начала всего контракта. Это означает, что один контракт может «безопасно» вызвать другой: если контракт A вызовет контракт B с g газа, то выполнение A гарантированно приведет к потере не более g газа. Наконец, обратим внимание, что существует операционный код CREATE, который создает контракт; его механика выполнения в целом аналогична CALL, за исключением того, что результат выполнения определяет код вновь созданного контракта.

<p>ВЫПОЛНЕНИЕ КОДА</p>

Код, понимаемый контрактами Ethereum, пишется на низкоуровневом байткод-языке на основе стека, который мы назвали «код виртуальной машины Ethereum», или EVM-код. Код состоит из последовательности байтов, и каждый байт представляет какую-либо операцию. В целом выполнение кода представляет собой бесконечный цикл, состоящий из повторного выполнения операции текущего счетчика программ (начиная с 0) и последующего его увеличения на 1. Процесс может закончиться в случае достижения конца кода, ошибки в коде или обнаружения в коде инструкции STOP/RETURN. Есть три типа мест, где операции могут хранить данные:

◊ стек, контейнер типа last-in-first-out, куда можно записывать и откуда можно извлекать значения;

◊ память, байтовый массив произвольного размера;

◊ долговременное хранилище контракта, информация в котором хранится парами «ключ – значение». В отличие от стека и памяти, которые очищаются после выполнения кода, в хранилище параметры могут находиться долго.

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

Принцип выполнения EVM-кода на удивление прост. Во время вычисления все текущее состояние представляет собой кортеж (block_state, transaction, message, code, memory, stack, pc, gas), где block_state – полное состояние, содержащее информацию о балансах и состояниях хранилищ всех аккаунтов. В начале каждого раунда выполнения берется pc-байткод (или 0, если pc >= len(code)), выполняется инструкция, соответствующая этому байту, и каждая из инструкций по-своему действует на кортеж.

Перейти на страницу:

Все книги серии Individuum

Больше денег: что такое Ethereum и как блокчейн меняет мир
Больше денег: что такое Ethereum и как блокчейн меняет мир

В 2013 году девятнадцатилетний программист Виталик Бутерин опубликовал концепцию новой платформы для создания онлайн-сервисов на базе блокчейна. За десять лет Ethereum стал не только второй по популярности криптовалютой, но и основой для целого мира децентрализованных приложений, смарт-контрактов и NFT-искусства. В своих статьях Бутерин размышляет о развитии криптоэкономики и о ключевых идеях, которые за ней стоят, – от особенностей протокола Ethereum до теории игр, финансирования общественных благ и создания автономных сетевых организаций. Как блокчейн-сервисы могут помочь людям добиваться общих целей? Могут ли криптовалюты заменить традиционные финансовые инструменты? Ведут ли они к построению прекрасного нового мира, в котором власть будет принадлежать не правительствам и корпорациям, а людям, объединенным общими ценностями и интересами, или служат источником неравенства и циничных финансовых спекуляций? В этой книге Бутерин предстает увлеченным мыслителем, глубоким социальным теоретиком и активистом, который рассуждает о том, что гораздо больше денег, не боится задавать сложные вопросы и предлагать решения противоречивых проблем.

Виталий Дмитриевич Бутерин

Публицистика
Инцелы. Как девственники становятся террористами
Инцелы. Как девственники становятся террористами

В современном мире, зацикленном на успехе, многие одинокие люди чувствуют себя неудачниками. «Не целовался, не прикасался, не обнимался, за руку не держался, друзей нет, девственник» – так описывают себя завсегдатаи форумов инцелов, сообществ мужчин, отчаявшихся найти пару. Тысячи инцелов горько иронизируют над обществом, мечутся между попытками улучшить внешность и принятием вечного (как им кажется) целибата и рассуждают, кого ненавидят больше: женщин или самих себя. А некоторые решают отомстить – и берутся за оружие.В книге «Инцелы» практикующий шведский психиатр Стефан Краковски приоткрывает дверь в этот мир. Он интервьюирует инцелов, анализирует кризис мужественности и исследует связи радикальных одиночек с ультраправыми движениями, чтобы ответить на важные вопросы: как становятся инцелами? Насколько они опасны? И что мы можем сделать, чтобы облегчить их бремя, пока еще не поздно?В формате PDF A4 сохранен издательский макет книги.

Стефан Краковски

Психология и психотерапия
Отец шатунов. Жизнь Юрия Мамлеева до гроба и после
Отец шатунов. Жизнь Юрия Мамлеева до гроба и после

Биографии недавно покинувших нас классиков пишутся, как правило, их апологетами, щедрыми на елей и крайне сдержанными там, где требуется расчистка завалов из мифов и клише. Однако Юрию Витальевичу Мамлееву в этом смысле повезло: сам он, как и его сподвижники, не довольствовался поверхностным уровнем реальности и всегда стремился за него заглянуть – и так же действовал Эдуард Лукоянов, автор первого критического жизнеописания Мамлеева. Поэтому главный герой «Отца шатунов» предстает перед нами не как памятник самому себе, но как живой человек со всеми своими недостатками, навязчивыми идеями и творческими прорывами, а его странная свита – как общность жутковатых существ, которые, нравится нам это или нет, во многом определили черты и характер современной русской культуры.В формате PDF A4 сохранен издательский макет книги.

Эдуард Лукоянов

Биографии и Мемуары / Критика / Литературоведение / Документальное
Новые боги. Как онлайн-платформы манипулируют нашим выбором и что вернет нам свободу
Новые боги. Как онлайн-платформы манипулируют нашим выбором и что вернет нам свободу

IT-корпорации успешно конкурируют с государствами в том, что касается управления людьми. Наши данные — новая нефть, и, чтобы эффективно добывать их, IT-гиганты идут на многочисленные ухищрения. Вы не считаете себя зависимым от соцсетей, мессенджеров и видеоплатформ человеком? «Новые боги» откроют глаза на природу ваших отношений с технологиями. Немецкий профессор, психолог Кристиан Монтаг подробно показывает, как интернет стал машиной слежки и манипуляций для корпораций Кремниевой долины и компартии КНР, какие свойства человеческой натуры технологические гиганты используют для контроля над пользователями — и что мы можем сделать, чтобы перестать быть рабами экрана.В формате PDF A4 сохранён издательский дизайн.

Кристиан Монтаг

ОС и Сети, интернет / Обществознание, социология / Психология и психотерапия

Похожие книги

Дальний остров
Дальний остров

Джонатан Франзен — популярный американский писатель, автор многочисленных книг и эссе. Его роман «Поправки» (2001) имел невероятный успех и завоевал национальную литературную премию «National Book Award» и награду «James Tait Black Memorial Prize». В 2002 году Франзен номинировался на Пулитцеровскую премию. Второй бестселлер Франзена «Свобода» (2011) критики почти единогласно провозгласили первым большим романом XXI века, достойным ответом литературы на вызов 11 сентября и возвращением надежды на то, что жанр романа не умер. Значительное место в творчестве писателя занимают также эссе и мемуары. В книге «Дальний остров» представлены очерки, опубликованные Франзеном в период 2002–2011 гг. Эти тексты — своего рода апология чтения, размышления автора о месте литературы среди ценностей современного общества, а также яркие воспоминания детства и юности.

Джонатан Франзен

Публицистика / Критика / Документальное