Исходный код smart contract: solidity — Где я могу найти примеры исходного кода Solidity /Smart Contract? [закрыто]

Содержание

Documentation for the Moonbeam Smart Contract Platform

Note: this website was translated by members of the Ambassadors program and is part of a community-led effort. The team would like to express his gratitude towards these great Ambassadors that translated all the content: Andrey (AndyPolo), Anton (AntonM), Cugut Alexei (GameOver), Lina K. (Lyn#2616), Mikhail (Mike K), and Oksana (Oksana#9601). If you want to contribute to this translation, please visit the following GitHub repository.

Данный сайт предоставляет документацию по проекту Moonbeam, смарт-контракт парачейну в сети Polkadot, который полностью совместим с Ethereum.

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

Со временем этот сайт будет развиваться и совершенствоваться по мере развития Moonbeam. Мы приглашаем Вас присоединиться к сообществу Moonbeam и внести свой вклад в этот сайт и проект.


Что такое Moonbeam?

Moonbeam — это блокчейн, ориентированный на разработчиков, которые стремятся обеспечить совместимость с существующим набором инструментов и с сетью разработчиков Ethereum, предоставляя полную реализацию EVM, API-интерфейса, совместимым с Web3, и мосты, которые соединяют Moonbeam с существующими сетями Ethereum.

Это позволяет разработчикам настраивать существующие смарт-контракты «Solidity» и интерфейсы DApp для Moonbeam с минимальными изменениями.

Moonbeam также будет парачейном в сети Polkadot. Это означает, что он будет получать общую безопасность от Polkadot Relay Chain и сможет интегрироваться с другими сетями, подключенными к Polkadot (как только эта функциональность будет доступна на Polkadot).


Как начать работу с Moonbeam

Сети

В настоящее время есть два способа как начать работу на Moonbeam:

Кошельки

В настоящее время мы протестировали Moonbeam со следующими кошельками:

Однако любой кошелек, который работает с пользовательской сетью Ethereum, должен также работать и с Moonbeam!

Инструменты:

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

Хотите, чтобы здесь был добавлен еще один инструмент Ethereum? Дайте нам знать!

Оракулы

У нас также есть несколько Оракулов, которые могут служить источником данных для Ваших смарт-контрактов:

Мосты

В настоящее время у нас есть полностью функционирующая реализация моста, который соединяет тестовую сеть Ethereum Kovan и Moonbase Alpha:


Discord

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

Element

Технические обсуждения и поддержка приветствуются в нашей комнате Element (ранее Riot), которую можно найти здесь.

Telegram

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

Twitter

Следите за нашими обновлениями в Twitter: @MoonbeamNetwork.

YouTube

Для получения видеоуроков и сопутствующего контента подпишитесь на наш канал YouTube здесь.

Новости

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

О сайте

Этот сайт создан с использованием mkdocs и основан на содержании репозитория moonbeam-docs, который находится на GitHub.

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

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

Открытый код биткоина: в чем его уникальность
Уникальность кода блокчейна в его открытости. Любой человек в мире может получить к нему доступ.  Программисты могут вносить изменения в код биткоина.

Скачать его и получить доступ к редактированию можно через официальный сайт https://bitcoin.org/ru/development.

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

Исходным кодом биткоина может воспользоваться любой программист. Со временем начали появляться новые альткоины. Многие из них были полными клонами BTC, а потому не получили распространения. Но единицы все же выжили и даже выбились в лидеры. Показательный пример — криптовалюта Litecoin. Она полностью базируется на исходном коде биткоина, но имеет два преимущества. Во-первых, ее эмиссия в 4 раза больше. Во-вторых, схема майнинга намного проще. Она позволяет применять только процессор без айсиков и видеокарт.

Исходный код биткоина: важность принципа открытости

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

Часто разработчики ПО/криптовалют скрывают исходный код. Тогда поддержкой, разработкой, а также устранением ошибок занимается ограниченный круг лиц. В криптовалютах NEM, Stellar доступ посторонних к этой информации закрыт. Это касается многих программ и проектов Facebook или Adobe. Такое ПО называется «несвободным». Внесение правок или изменений доступно авторам, имеющим юридически обоснованное право.

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

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

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

Исходный код криптовалюты никому не принадлежит, на него ни у кого нет прав. Не существует предприятия, которое бы владело Bitcoin или Monero. Такая децентрализация несет ряд преимуществ для системы, ее продвижения и развития. В программной среде одним из наиболее успешных примеров является операционная система Linux. Она имеет открытый исходный код и при этом надежнее, чем Windows.

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

Открытость исходного кода в криптовалютной сфере и секторе программного обеспечения имеет много плюсов:

  1. Мотивация для создания качественного продукта. Каждый человек, участвующий в создании или оптимизации проекта, ставит своей задачей лично использовать проект и получать от этого дивиденды. Такой участник свободен в действиях, он не ограничен контрактными обязательствами и требованиями создателя.
  2. Долгосрочная поддержка продукта. Любой разработчик однажды устает от своего проекта и у него появляется желание заняться чем-то другим. Тогда ему нужно найти последователя готового продолжить дело. Всегда находятся энтузиасты, которые привносят новое видение проекту, повышают спрос на него, улучшают качество.
  3. Возможность упрощения. Исходный код криптовалюты — пример идеального обеспечения, прошедшего множественную «огранку» с привлечением лучших программистов. В среде специалистов считается, что доступность способствует быстрому устранению багов. Со временем продукт оптимизируется, упрощается, унифицируется и становится более надежным.
  4. Легкость устранения багов. Открытость исключает трудности с тестированием или отладкой. При появлении проблем всегда найдется группа энтузиастов, готовых устранить ошибки. Многие участники сети выявляют баги и предлагают пути решения. Когда исходный код закрыт, на выявление и устранение слабого места может уйти много времени.
  5. Полная взаимосвязь. Благодаря взаимодействию участников, граница между разработчиками и обычными пользователями смазывается. Все действия с программным обеспечением ведутся на глазах криптовалютного сообщества и доступны для изучения всем.

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

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

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

Открытый код биткоина: закон и свободное ПО

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

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

Bitcoin script для заработка монет

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

Скрипт Bitcoin — это список инструкций, относящийся к транзакции, который описывает, как пользователь, которому предназначены BTC в этой транзакции, может получить к ним доступ.

Самый типичный скрипт в транзакции при пересылке средств на адрес другого пользователя в сети требует от получателя предоставить две вещи:

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

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

Заработать биткоины можно решением логических задач или выполнением операций на сайтах-кранах. За выполнение простых действий, на работу с которыми уходит практически целый день, юзеру начисляется минимальное вознаграждение. Задачи становятся доступны только через определенный промежуток времени, зависящий от типа сайта (5, 10, 30, 50, 60 минут). Данные факты практически сразу подрывают энтузиазм новых майнеров и заставляют их отказаться от использования этих ресурсов.

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

Программа поддерживает выполнение следующих действий:

  1. Переход на заданные сайты.
  2. Ввод капчи.
  3. Отражение статистики начислений.

Но чтобы скрипт по добыче биткоинов работал правильно, его нужно настроить.

Достоинства и недостатки, которыми обладает BTC script

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

  • Стабильность. Программа работает без перебоев, а покупка качественной версии позволяет избежать багов.
  • Независимость. Автоматический режим работы бота позволяет пользователю избежать длительного сидения за компьютером. Достаточно просто настроить алгоритм программы, и она сама выполнит необходимые операции.
  • Беспрерывность. Бот может работать в круглосуточном режиме при условии включенного компьютера пользователя. При дезактивации ПК скрипт также перестает работать.
  • Прибыльность. Использование программы позволяет значительно повысить уровень дохода, получаемого с кранов. Главной задачей юзера остается только отслеживание нерабочих сайтов и исключение их из списка.
  • Бесплатные версии. Для того чтобы самостоятельно убедиться в эффективности этого способа заработка не обязательно вкладывать деньги, достаточно только найти бесплатную версию программы в сети.

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

BTC скрипты: виды

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

  • Независимые. Эти скрипты встраиваются в программный код той или иной страницы крана и работают только с одним ресурсом.
  • Сеть скриптов. Для данного вида характерно объединение нескольких ботов, работающих на расширении iMacros. Они способны вести свою деятельность одновременно на нескольких платформах.
  • Автономные. Эти программы работают без участия пользователя и требуют точной настройки.
  • Скрипты для сбора с большого количества сайтов. Данный вид ботов предназначен для работы одновременно с 40 и более ресурсами.

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

Как Сделать DeFi-Токен? — Merehead

Бизнес-идея. Если вы хотите просто создать DeFi-токен, то это будет еще одна децентрализованная криптовалюта, которая сама по себе вряд ли кому-то нужна, поскольку уже есть Биткоин и другие монеты. Чтобы токен пользовался спросом, у него должна быть какая-то ценность — ценностное предложение. Такой ценностью может быть что-угодно — от очень дешевых транзакций до улучшения экологической ситуации в мире (Bitcoin с его PoW-протоколом многие обвиняют в неэкологичности).

Другими словами, вам нужно запустить финансовый сервис, который будет использовать ваш DeFi-токен. Только такой проект будет иметь шанс на успех. Оптимальный вариант в этом случае — воссоздавать традиционные финансовые инструменты в децентрализованной архитектуре. Обычно реализуют такие услуги, как денежные переводы и платежи — криптовалюты, покупка и продажа различных токенов — криптовалютные биржи, ссуду токенов — кредитные P2P-рынки.

В последние годы также начали появляться стартапы, которые связаны со страхованием (InsurAce), деривативами (Opyn), управлением активами (Balancer), бонусными баллами за покупки (Fold) и размещением процентных депозитов (Celsius Network). Дальше, скорее всего, рынок DeFi-услуг продолжает расширяться за счет децентрализованных вариаций других традиционных финансовых услуг.

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

  • Достаточный спрос. Речь о спросе потребителей на традиционный вариант финансового инструмента, который должен быть достаточным, чтобы окупить стоимость разработки проекта и приносить прибыль в дальнейшем.
  • Недовольство пользователей. В идеале оно должно быть связано с централизацией финансового инструмента. Как, например, венесуэльцы недовольны свой национальной валютой из-за сильной гиперинфляции, или как клиенты банков недовольны ими из-за утечки конфиденциальных данных, высоких комиссии и процентов по кредитам или излишней бюрократии.
  • Минимальная конкуренция. Рынок децентрализованных финансов молод, потому на нем все еще есть незанятые или почти пустующие ниши. Запуск своего проекта в такой нише проще, так как это уменьшает требования к качеству программного обеспечения и стоимости маркетинговых усилий.
  • Разумная стоимость. Создать простой криптовалютный DeFi-токен относительно просто и не сильно дорого, то есть это доступно многим. Тогда как запуск децентрализованной криптовалютной биржи, кредитного рынка или страхового сервиса потребует много времени, денег и усилий, что доступно лишь компаниям с большим бюджетом и эффективным менеджментом.

Запуск токена и разработка DApps

Выбор блокчейн-платформы. Если нужно просто запустить DeFi-токен с определенными параметрами, то это довольно просто. Достаточно выбрать одну из блокчейн-платформ и следовать ее инструкции по запуску новой монеты. Самый очевидный вариант — сеть Ethereum, которую выбирают больше половины всех блокчейн-стартапов. Вот инструкция, которая подскажет, как это сделать.

Какие есть блокчейн-платформы для запуска токенов:

  • Предлагает разработчикам DApps платформу распределенных вычислений с открытым исходным кодом. Стала популярной благодаря наличию инструментов для запуска новых токенов, смарт-контрактов и децентрализованных предложений. Работает еще с 2013 года.
  • Корпоративная вариация блокчейна Ethereum, созданная банком JPMorgan для обсаживания межбанковских транзакций. Отлично подходит для работы с приложениями, требующими большой скорости обработки.
  • Hyperledger Sawtooth. Предлагает модульную архитектуру для запуска бизнес-приложений, которые могут использовать смарт-контракты для автоматизации бизнес-процессов и взаимодействия с контрагентами.
  • Децентрализованная среда для запуска токенов с набором инструментов для разработки DApps-сервисов любой сложности. Платформа отличается довольно большим количеством настраиваемых параметров.
  • Платформа предлагает отличное решение для децентрализованного хостинга приложений, главные преимущества которого — высокая скорость и отсутствие комиссий. Отлично подходит для запуска DApps на базе IoT.
  • Данная среда создавалась с большим упором на использование возможностей Интернета вещей — от создания сервиса доставки еды с помощью дронов до развития сервисов целых умных городов.
  • Блокчейн-платформа R3 с открытым исходным кодом, ориентированная на запуск приложений в финансовом и государственном секторах. Важно отметить, что у Corda нет собственной криптовалюты, в отличие от многих других популярных блокчейнов.
Поиск компании-разработчика DeFi. Для запуска своей децентрализованной финансовой приложения, платформы, сервиса, смарт-контракта или услуги нужны обширные знания в финансах и профессиональные навыки разработки DApps на базе блокчейна. Вот почему вам нужна компания-разработчик, которая возьмет на себя техническую сторону этого процесса.

Вот как найти такого технического партнера:

  • Где искать: LinkedIn, Clutch.co, Appfutura, Goodfirms.co, Adnify, Extract.co, Contractiq, The Software Network, They Make Apps, CrunchBase.
  • Кого искать: компанию, которая специализируется на блокчейне и имеет большой опыт в разработке приложений для финансового рынка.
  • Как проверить: просмотреть портфолио, самостоятельно испробовать созданные претендентом продукты, посмотреть, что о разработчике пишут в отзывах на Goodfirms. co, Clutch.co и других аналогичных площадках.
  • Больше — в статье: «Как выбрать разработчика блокчейн-проектов».
Непосредственно процесс разработки. Процесс разработки вашего DeFi-сервиса будет выглядеть по-разному в зависимости от нескольких аспектов: выбранная сеть блокчейна, язык программирования, функции приложения, механизм консенсуса и т. д. В любом случае разработка будет состоять из следующих этапов:
  1. Бизнес-анализ. На этом этапе разработки DeFi-сервиса бизнес-аналитик определяет требования к проекту, ожидания пользователей и бизнес-цели, и создает техническую спецификацию. Спецификация описывает каждую деталь процесса разработки: от людей, ответственных за разработку и коммуникацию, до фреймворков, библиотек и операционных систем.
  2. Разработка UI/UX- дизайна. Проектирование визуальной составляющей и пользовательского интерфейса вашего DeFi-проекта. В зависимости от сложности дизайн может занимать до 20 % от общего времени разработки.
  3. Подготовительный этап. Состоит из настройки среды разработки, API, серверной части и архитектуры — всего, что будет включать разработка.
  4. Разработка + тестирование. Как правило, эти шаги происходят одновременно как один непрерывный процесс. Когда MVP готов, QA-инженер выполняет полный регрессионный тест, чтобы убедиться, что все работает.
  5. Развертывание. Создание сайта и привлечение первых клиентов любыми доступными способами. Если это мобильный сервис, то это также запуск вашего DeFi-приложения на App Store и Google Play Store.
  6. Обслуживание и поддержка. Обновления библиотек, фреймворков и операционных систем, а также внедрение новых функций и внесение изменений в приложение в соответствии с текущими потребностями.

Интеграция с другими сервисами

Для того чтобы ваш DeFi-токен был интересен пользователям, он должен быть связан с другими финансовыми сервисами. Как минимум, с банками, биржами или обменниками, на которых можно будет купить и/или и продать ваш токен. Кроме того, также нужна интеграция с популярными криптовалютными кошельками: Blockchain, Exodus, Electrum, Jaxx, BitGo, Ledger, Trezor и прочими.

Также в зависимости от ниши нужна будет интеграция и с другими сервисами. Например, торговыми площадками, поставщиками услуг и платежными шлюзами, если созданный DeFi-токен будет представлять из себя платежное средство. Или с маркетинговыми инструментами, если ваш проект будет связан с рекламой. Кроме того, для повышения пользовательского опыта также желательна интеграция с Facebook, Instagram, Twitter, LinkedIn и другими социальными сетями.

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

Стоимость создания DeFi-токена

Компания IOVlabs присоединяется к проекту Hyperledger концерна Linux Foundation, чтобы ускорить внедрение блокчейн-технологий на уровне предприятий и правительств

Компания IOVlabs, материнская компания основанной на Биткойн платформы RSK Smart Contract и ее корневой инфраструктуры RIF, присоединилась к Linux Foundation и Hyperledger. Hyperledger — это проект с открытым исходным кодом консорциума Linux Foundation, нацеленный на продвижение блокчейн-технологий, в котором принимают участие более 250 компаний, включая Citi, JP Morgan, Telefonica и IBM.

Участие в проекте Hyperledger позволит IOVlabs использовать технологию Hyperledger Besu параллельно с собственными технологиями на основе RIF для разработки проектов, ориентированных на предприятия и правительства. Besu — это удобный клиент Ethereum для общедоступных и частных контролируемых сетей.

«Мы очень рады стать частью Linux Foundation, одной из ведущих организаций по продвижению программного обеспечения и экосистем с открытым исходным кодом», — заявил генеральный директор IOVlabs Диего Гутьеррес Сальдивар. «Все программное обеспечение, используемое в сети RSK и разработанное IOV Labs, имеет открытый исходный код, а наш подход тесно связан с подходом, который используется в системе Linux. Наше участие в проектах Linux Foundation и Hyperledger ускорит принятие стандартов открытого блокчейна и будет способствовать финансовой свободе, прозрачности и доверию».

Брайан Белендорф, исполнительный директор Hyperledger, добавил: «Нацеленность IOVlabs на создание более справедливой и общедоступной финансовой системы привело к появлению нескольких интересных вариантов использования блокчейна. Мы очень рады, что в качестве основы для этой миссии будут использоваться открытые технологии Hyperledger. Мы приветствуем стремление компании IOVlabs к созданию открытых децентрализованных платформ и рады, что ее международная команда примет участие в развитии экосистемы Hyperledger».

Компания IOVlabs разработала ряд решений, основанных на блокчейне, для предприятий, включая децентрализованную сеть Gasnet, ориентированную на экосистему распределения природного газа в Аргентине, и пробную версию для центрального банка этой страны. Теперь она планирует расширить свое предложение за счет партнерства с Linux Foundation и развертывания Hyperledger Besu.

О компании IOVlabs

IOVlabs разрабатывает блокчейн-технологии, которые поддерживают развитие новой глобальной финансовой экосистемы, нацеленной на расширение возможностей, прозрачность операций и доверие между людьми. В настоящее время компания занимается разработкойсети RSK Smart Contract, платформ RIF и Taringa!
Сеть RSK является одной из самых безопасных платформ smart contract в мире. Она была разработана для использования беспрецедентных мощностей хэша Биткойн при одновременном расширении возможностей этой системы. Набор открытых и децентрализованных инфраструктурных протоколов RIF обеспечивает возможность более быстрой, более простой и масштабируемой разработки распределенных приложений (dApps) в единой среде. Taringa является крупнейшей испаноязычной социальной сетью в Латинской Америке с 30 миллионами пользователей и 1000 активными онлайн-сообществами.

Релизы

· ethereum / solidity · GitHub

Solidity v0.8.10 теперь может сообщать инварианты контрактов и свойства повторного входа через SMTChecker. Он также содержит некоторые новые оптимизации в отношении вызовов внешних функций и активировал новый генератор кода EVM для чистого режима Yul.

Подробнее см. Объявление о выпуске.

Функции языка:

  • Встроенная сборка: Поддержка .address и .selector на внешних указателях функций для доступа к их адресу и селектору функций.

Функции компилятора:

  • Генератор кода: пропустить проверку существования для внешнего контракта, если ожидаются данные возврата. В этом случае декодер ABI вернется, если контракт не существует.
  • Интерфейс командной строки
  • : принимать вложенные скобки в последовательностях шагов, переданных в --yul-optimizations .
  • Интерфейс командной строки
  • : добавьте параметр --debug-info для выбора количества дополнительной отладочной информации, которая должна быть включена в производимую сборку EVM и код Yul.
  • Интерфейс командной строки
  • : Поддержка опций выбора вывода --asm , --bin , --ir-optimized , --ewasm и --ewasm-ir в режиме ассемблера.
  • Интерфейс командной строки
  • : используйте разные цвета при печати ошибок, предупреждений и информации.
  • JSON AST: установите абсолютные пути импорта ранее, на этапе синтаксического анализа .
  • SMTChecker: выходные значения для блока . * , сообщение. * и tx.* переменных, которые присутствуют в вызываемых функциях.
  • SMTChecker: отчет об инвариантах контрактов и свойствах повторного входа. Это можно включить с помощью параметра CLI --model-checker-invariants или стандартного параметра JSON settings.modelChecker.invariants .
  • Стандартный JSON: принимать вложенные скобки в последовательностях шагов, переданных в settings.optimizer.details.yulDetails.optimizerSteps .
  • Стандартный JSON: добавьте параметр settings.debug.debugInfo для выбора количества дополнительной отладочной информации, которая должна быть включена в созданную сборку EVM и код Yul.
  • Yul Преобразование кода EVM: переключение на новое оптимизированное преобразование кода при компиляции через Yul с включенным оптимизатором.
  • Yul Optimizer: учитывайте побочные эффекты потока управления пользовательских функций на различных этапах оптимизатора.

Исправления:

  • Генератор кода: исправлено сопоставление исходного кода конструктора для неизменяемых объектов.
  • Интерфейс командной строки
  • : запретить опцию --error-recovery вне режима компилятора.
  • Интерфейс командной строки: не возвращать нулевой код выхода при сбое записи связанных файлов на диск.
  • Интерфейс командной строки: исправлено добавление лишнего символа новой строки к источникам, передаваемым через стандартный ввод, что влияет на их хэши.
  • Интерфейс командной строки: параметры выбора вывода отчета, не поддерживаемые выбранным режимом ввода, вместо их игнорирования.
  • Интерфейс командной строки
  • : при связывании принимайте только точные совпадения для имен библиотек, переданных в опцию --libraries . Имена библиотек без префикса имени файла, используемого для сопоставления любой библиотеки с этим именем.
  • SMTChecker: исправление внутренней ошибки в доступе по магическому типу ( блок , msg , tx ).
  • SMTChecker: Исправить внутреннюю ошибку в двигателе CHC при пропускании газа в опциях функции.
  • TypeChecker: Исправлена ​​внутренняя ошибка при использовании массивов и структур с определяемыми пользователем типами значений перед объявлением.
  • TypeChecker: Исправлена ​​внутренняя ошибка при использовании определяемых пользователем типов значений в функциях публичной библиотеки.
  • TypeChecker: Улучшено сообщение об ошибке для постоянных переменных с (вложенными) типами сопоставления.
  • Yul Assembler: Исправлена ​​внутренняя ошибка, когда имена функций не уникальны.
  • Yul IR Generator: Не выводить пустые переключатели / if-тела для пустых контрактов.

Важные исправления в экспериментальных функциях:

  • Yul IR Generator: Изменения в возвращаемых функциях переменных, на которые есть ссылки в аргументах вызова модификатора, не перенаправлялись должным образом, если было более одной возвращаемой переменной.

Система сборки:

  • Передавать параметры emscripten только для компоновщика только при компоновке.
  • Удалите устаревшее решение проблемы совместимости для сборок emscripten.
  • Обновите emscripten до версии 2.0.33.

Мы особенно благодарим всех участников, которые сделали возможным этот выпуск:

4molybdenum2, Адам Блисс, Алекс Берегсази, Кристиан Парпарт, Даниэль Киршнер, Давид Джалаев, Дерек Бранс, Парк Кёнхун, Харикришнан Мулакал, Хосе Лопес, Камил Оливак, Лео Ариас, Леонардо Альт, Мидхаун Мантле7, Мидхаун Мантле7, Мидхаун Мантле MrBrain295, Саураб Шарма, sgmoore, shikharvashistha, Shivam Rajput, soroosh-sdi, Sreekesh V, tcoyvwac, TerranCivilian, vowchick, William Entriken, Zachinquarantine

Если вы хотите выполнить сборку исходного кода, используйте только solidity_0.8.10.tar.gz, а не zip, предоставленный непосредственно github.

SmartContract · GitHub

SmartContract · GitHub

Закреплено Загрузка

  1. узел децентрализованной сети оракулов, мост между вычислениями и вне сети

    Идти 2. 6k 778

  2. Репозиторий для шаблонного кода для тестирования, развертывания и доставки кода надежности цепочки.

    JavaScript 181 91

  3. Ultimate Solidity, Blockchain и Smart Contract — от новичка до эксперта Полный курс | Версия Python

    3.8к 823

  4. Монорепозиторий, содержащий реализацию внешних адаптеров на JavaScript

    Машинопись 125 96

  5. Пример смарт-контракта с использованием Chainlink

    JavaScript 135 68

  6. Работа со смарт-контрактами с eth-brownie, python и Chainlink.

    Твердость 175 79

Репозитории
  • Ржавчина 11 7 1 6 Обновлено 9 декабря 2021 г.
  • звено цепи Общественные

    узел децентрализованной сети оракулов, мост между вычислениями и вне сети

  • Идти 0 0 0 1 Обновлено 9 декабря 2021 г.
  • звено цепи-реле Общественные

    SDK для создания сетевых сервисов Chainlink Relay

    1 Массачусетский технологический институт 0 0 4 Обновлено 9 декабря 2021 г.
  • Идти 7 Массачусетский технологический институт 6 0 4 Обновлено 9 декабря 2021 г.
  • Твердость 86 Массачусетский технологический институт 106 35 год 20 Обновлено 9 декабря 2021 г.
  • звено цепи Общественные

    Работа со смарт-контрактами с eth-brownie, python и Chainlink.

  • Машинопись 5 Массачусетский технологический институт 1 0 13 Обновлено 9 декабря 2021 г.
  • стартовый комплект каски Общественные

    Репозиторий для шаблонного кода для тестирования, развертывания и доставки кода надежности цепочки.

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

Организованный репозиторий исходного кода и показателей смарт-контрактов Ethereum

[Отправлено 3 ноя 2020]

Скачать PDF
Аннотация: Многие эмпирические исследования программной инженерии показывают, что существует большая потребность в для репозиториев, где исходный код собирается, фильтруется и классифицируется.В течение за последние несколько лет сервисы обозревателя блоков Ethereum стали популярными проект для изучения и поиска данных блокчейна Ethereum, таких как транзакции, адреса, токены, исходный код смарт-контрактов, цены и другие действия происходит в блокчейне Ethereum. Несмотря на наличие такого рода сервисов, извлекающих конкретную информацию, полезную для эмпирического программного обеспечения инженерные исследования, такие как изучение программных метрик смарт-контрактов может потребоваться множество подзадач, например, поиск определенных транзакций в блокировать, парсить файлы в формате HTML и фильтровать смарт-контракты для удаления дублированный код или неиспользуемые смарт-контракты.В этой статье мы решаем эту проблему. создание Smart Corpus ‘, Корпуса смарт-контрактов в организованной и обоснованной и обновленный репозиторий, где исходный код Solidity и другие метаданные о Смарт-контракты Ethereum можно легко и систематически извлекать. Мы представляем дизайн Smart Corpus и его первоначальная реализация, и мы покажем, как набор данных исходного кода смарт-контрактов на различных языках программирования можно запрашивать и обрабатывать, получать полезную информацию о смарт-контрактах и их программные метрики.Smart Corpus нацелен на создание смарт-контрактов ». репозиторий, в котором хранятся данные смарт-контрактов (исходный код, ABI и байт-код) свободно и немедленно доступны, а также классифицированы на основе основного программного обеспечения метрики, выявленные в научной литературе. Исходный код смарт-контрактов был подтвержден EtherScan, и каждый контракт имеет свой собственный показатели программного обеспечения, рассчитанные с помощью свободно доступного программного обеспечения PASO. Кроме того, Smart Corpus легко расширяется, так как количество новых смарт-контрактов увеличивается день ото дня.

История отправки

От: Джузеппе Антонио Пьерро [просмотреть письмо]
[v1] Вт, 3 ноября 2020 г. 14:18:52 UTC (1399 КБ)

(PDF) Организованный репозиторий исходных кодов и показателей смарт-контрактов Ethereum

11

{

«данные»: {

«метрики» : [

{

”адрес A ddress”: ”0 x 5 3 6 c 7 efeebff 0 6 7 a 6 9 3 9 3 1 3 3 b 1 c 8 7 a 1 6 3 a 6 b 0 5 9 8 »,

« транзакции »: 639,

« баланс »: 0 Ether

}

]

}

}

ССЫЛКИ

[1] Питер О’Донован и Доминик Т.Дж. О’Салливан. Систематический анализ реальных инициатив в области энергетических блокчейнов. Будущее

Интернет, 11 (8): 174, август 2019 г.

[2] Цзыбинь Чжэн, Шаоань Се, Хун-Нин Дай, Вейли Чен, Сянпин Чен, Цзянь Вэн и Мухаммад Имран. Обзор

по смарт-контрактам: проблемы, достижения и платформы. Компьютерные системы будущего поколения, 105: 475–491, апрель 2020 г.

[3] Б. Шала, У. Трик, А. Леманн, Б. Гита и С. Шиелес. Блокчейн и доверие для безопасного, децентрализованного предоставления услуг iot для конечных пользователей и

.IEEE Access, 8: 119961–119979, 2020.

[4] Симона Ибба, Андреа Пинна, Мария Лунесу, Микеле Маркези и Роберто Тонелли. Первичные предложения монет и гибкие методы

. Интернет будущего, 10 (11): 103, октябрь 2018 г.

[5] Александр Менс и Маркус Флатчер. Уязвимости в смарт-контрактах Ethereum. В материалах 20-й Международной конференции

по интеграции информации и веб-приложениям, стр. 375–380, Нью-Йорк, Нью-Йорк, США,

2018.Ассоциация вычислительной техники.

[6] Сидни Амани, Мириам Б.

Эгель, Максим Бортин и Марк Стейплс. На пути к проверке байт-кода смарт-контракта Ethereum

в isabelle / hol. В материалах 7-й Международной конференции ACM SIGPLAN по сертифицированным программам и доказательствам,

CPP 2018, стр. 66–77, Нью-Йорк, Нью-Йорк, США, 2018. Association for Computing Machinery.

[7] Хиен Тран, Тарек Менуер, Патрис Дармон, Абдулай Дукур и Франсуа Биндер.Система поиска смарт-контрактов в блокчейне

. В материалах 3-й Международной конференции по будущим сетям и распределенным системам, ICFNDS

’19, Нью-Йорк, Нью-Йорк, США, 2019. Association for Computing Machinery.

[8] Роберто Тонелли, Джузеппе Дестефанис, Микеле Маркези и Марко Орту. Метрики программного обеспечения смарт-контрактов: первое исследование,

2018.

[9] Летиция Джаккери и Томас Остерли. Программное обеспечение с открытым исходным кодом: источник возможностей для обучения программной инженерии

и эмпирической программной инженерии.В материалах Первого международного семинара по возникающим тенденциям в FLOSS

Исследования и разработки, FLOSS ’07, стр. 5, США, 2007. Компьютерное общество IEEE.

[10] Сантьяго Браганьоло, Энрике Роша, Маркус Денкер и St´

ephane Ducasse. Язык запросов Ethereum. В материалах

1-го Международного семинара по новым тенденциям в разработке программного обеспечения для блокчейна, WETSEB ’18, стр. 1–8,

Нью-Йорк, Нью-Йорк, США, 2018. Association for Computing Machinery.

[11] Ин Чжоу и Джозеф Дэвис. Модель надежности программного обеспечения с открытым исходным кодом: эмпирический подход. In Proceedings of the

Fifth Workshop on Open Source Software Engineering, 5-WOSSE, page 1-6, New York, NY, USA, 2005. Association

for Computing Machinery.

[12] Нане Кратцке. Волонтер вниз: как covid-19 создал самый большой простаивающий суперкомпьютер на земле. Интернет будущего, 12 (6): 98,

июнь 2020 г.

[13] Марк Габель и Чжендонг Су. Исследование уникальности исходного кода.В материалах восемнадцатого ACM

Международного симпозиума SIGSOFT по основам разработки программного обеспечения, FSE ’10, стр. 147–156, Нью-Йорк, штат Нью-Йорк,

США, 2010 г. Ассоциация вычислительной техники.

[14] Э. Темперо, К. Анслоу, Дж. Дитрих, Т. Хан, Дж. Ли, М. Люмп, Х. Мелтон и Дж. Нобл. Qualitas corpus: тщательно подобранная коллекция Java-кода

для эмпирических исследований. В 2010 г. Азиатско-Тихоокеанская конференция по разработке программного обеспечения, страницы 336–345,

2010.

[15] П. Хегедус. К анализу сложного ландшафта смарт-контрактов Ethereum на основе надежности. В 2018 IEEE / ACM

1-й международный семинар по новым тенденциям в разработке программного обеспечения для блокчейна (WETSEB), страницы 35–39, 2018.

[16] Андреа Пинна, Симона Ибба, Гавина Баралла, Роберто Тонелли и Микеле Марчези. Массовый анализ эмпирических исследований смарт-контрактов Ethereum

и метрик кода. IEEE Access, 7: 78194–78213, 2019.

[17] Джузеппе Антонио Пьерро и Роберто Тонелли.Пасо. В материалах конференции по объектно-ориентированному программированию

Системы, языки и приложения, 2020.

[18] Джон Лелигер. Контроль версий с помощью Git. O’Reilly Media, Севастополь, Калифорния, 2012.

Как проверить и опубликовать на Etherscan | Дэн Эммонс | Coinmonks

#HowToBUIDL (4 / n) Series — Проверка кода смарт-контракта

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

Аудиторы и критики играют важную роль в мире Blockchain, чтобы гарантировать, что код работает так, как задумано.

Мы будем использовать проект, упомянутый в статье #HowToBUIDL :: Deploy.

Откройте для себя и ознакомьтесь с лучшим программным обеспечением Blockchain

Есть два основных способа хорошо придерживаться принципов Blockchain:
1.Используйте репозитории с открытым исходным кодом — новые разработки можно отслеживать и публиковать
2. Проверка кода смарт-контракта — разрешить людям проверять код перед использованием

Не доверять, а проверять. Это мантра.

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

Подтвержденный код должен быть ожиданием, а не стремлением.

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

При развертывании смарт-контракта просто выгружается -байтовый код контракта, и это все, что нужно виртуальной машине Ethereum (EVM), но это , не читаемый человеком код. Проверенный код — это сглаженный код Solidity для вашего смарт-контракта. Это означает, что если ваш контракт унаследован от другого контракта или использовал что-то вроде SafeMath в качестве библиотеки , , то этот код также должен быть включен в загруженный код.

Этапы проверки и публикации исходного кода Solidity

  1. Введите исходный код контракта.
  2. Если сгенерированный байт-код совпадает с существующим байт-кодом адреса создания, контракт проверяется.
  3. Исходный код контракта опубликован и доступен для всеобщей проверки.

Сразу после развертывания смарт-контракта, как мы это делали для GreatestShow в проекте ComeOneComeAll , вы можете перейти в Etherscan и просмотреть контракт по его развернутому адресу.Как вы можете видеть, вкладка Code показала набор случайных шестнадцатеричных цифр, начинающихся с 0x60806… который является фактическим byteCode для развернутого GreatestShow , а также аргументы конструктора, которые использовались при создании контракта. Опять же, для EVM это нормально, но нам нужно помочь людям, которые хотят увидеть код.

Щелкните ссылку Verify And Publish .

Совет: ознакомьтесь с новой бета-версией Contract Verifier , которая поддерживает опцию «запустить» для проверки развернутых контрактов Truffle.Если в вашем контракте используются библиотеки и не удается выполнить проверку, вы также можете попробовать использовать средство проверки исходного кода бета-версии.

https://ropsten.etherscan.io/verifyContract2?a=0xContractAddressGoesHere

Вы должны быть на экране Проверить код контракта (версия 2.0) * Новый экран .

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

 Truffle v4.1.7 (ядро: 4.1.7) 
Solidity v0.4.23 (solc-js)

Итак, мы бы выбрали версию v0.4.23 + с фиксацией для компилятора

Имя контракта, компилятор Версия и упорядоченный код контракта на Solidity обязательны.

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

Этот инструмент помогает вам проверять контракты, разработанные с Truffle на Etherscan, или отлаживать их на Remix, объединяя ваши файлы и их зависимости в правильном порядке.

 npm install --save-dev truffle-flattener 

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

 Устройство для выравнивания трюфелей ./contracts/GreatestShow.sol> ./GreatestShowFlattened.sol 

На Mac вы можете использовать инструмент pbcopy , чтобы скопировать текст в буфер обмена.

 pbcopy 

Затем вернитесь в окно проверки Etherscan и вставьте его. Нажмите "Я не робот". reCaptcha.Далее вы увидите анимированную гифку с вращающейся шестеренкой.

Etherscan Проверка исходного кода надежности считается передовой практикой смарт-контрактов.

Тада! После успешной проверки все готово. Вы будете знать, что ваш исходный код контракта проверен (точное совпадение) , если byteCode, скомпилированный и протестированный на этом этапе проверки, совпадает с byteCode, который был ранее загружен. Если он не совпадает, он не будет проверяться. Изменение даже одной строчки кода, чтобы попытаться обмануть пользователя, было бы легко обнаружено.Теперь вы можете с гордостью отправлять пользователей и потенциальных новых клиентов в свой опубликованный и проверенный код и проект Github для ознакомления.

Престижность. Вы только что набрали очки в сообществах Open Source и Crypto Communities.

Дэн Эммонс является владельцем Emmonspired LLC , сертифицированного специалиста по биткойнам , сертифицированного разработчика Ethereum, разработчика полного стека и советника по проектам криптовалюты. Он также является создателем канала Youtube и подкаста iTunes под названием #ByteSizeBlockchain .

Смарт-контракты Ethereum: анализ и статистика их исходного кода и кодов операций

Использование смарт-контрактов неуклонно растет, принося ощутимые преимущества. Они полагаются на технологию блокчейн, чтобы упростить передачу денег, собственности, информации или всего, что люди считают подходящим. Смарт-контракты успешно применяются в приложениях IoT, где вещи принадлежат разным объектам, не имеющим взаимного доверия [1]. Смарт-контракты, в отличие от традиционных, вычислимы, это должно повысить их безопасность и снизить затраты на обеспечение соблюдения условий соглашения.Ethereum [2] - одна из самых известных платформ для определения смарт-контрактов. Обычно это выполняется с помощью языка программирования Solidity [3], который похож на JavaScript и C ++. Также можно использовать другие языки, такие как Vyper и Bamboo. Смарт-контракты Solidity не могут быть выполнены виртуальной машиной Ethereum (EVM) напрямую, поэтому они компилируются в машинные инструкции низкого уровня, то есть в байт-код. Эти инструкции определяют полный язык Тьюринга и часто представлены в удобочитаемом формате, который называется опкодами .Смарт-контракты выполняются на платформе распределенных вычислений на основе блокчейна, предлагаемой Ethereum. Было проведено множество исследований для анализа данных смарт-контрактов с различных точек зрения. В [4] авторы анализируют смарт-контракты на предмет обнаружения контрактов зомби. В эмпирическом исследовании, представленном в [5], анализируется использование контрактов с учетом области их применения. Наконец, другие исследования, такие как описанные в [6], [7], проверяют контракты с экономической, технической и юридической точек зрения.

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

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

Остальная часть этого документа организована следующим образом. Раздел 2 описывает предысторию Ethereum; Раздел 3 подробно описывает метод, который использовался для сбора данных о смарт-контрактах, и описывает результаты нашего анализа; В Разделе 4 рассматривается соответствующая работа; Раздел 5 завершает документ и описывает будущую работу.

Расшифровка данных смарт-контрактов Ethereum | Ифэй Хуан | Октябрь 2021 г.

Практика криптоданных - часть 1

Web2 -> Web3 evolution - image by author

В последних двух сообщениях этой серии я описал, что такое криптоданные и почему они представляют собой уникальную и привлекательную возможность. Я настоятельно рекомендую прочитать их, прежде чем продолжить, если вы еще этого не сделали, поскольку они предоставляют важный контекст для понимания этого сообщения. В этом посте мы запачкаем руки и обсудим технические детали декодирования данных смарт-контрактов Ethereum в удобочитаемые форматы.Это необходимый первый шаг к более глубокому пониманию основной активности пользователя. Мы сосредоточимся на Ethereum в качестве основного примера, но многие из концепций, которые мы здесь обсуждаем, будут более широко применяться ко всем совместимым с EVM цепочкам и смарт-контрактам, например Полигон, BSC, Оптимизм и т. Д.

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

С помощью этих элементов данных можно очень детально описать изменения состояния, которые произошли в приложениях и в цепочке блоков в результате транзакции. А при совокупном анализе сбор всех транзакций, трассировок и журналов для данного децентрализованного приложения web3 может обеспечить целостное и глубокое представление о пользовательских базах и их действиях в продукте.Однако сделать это сложно из-за того, что большая часть важных деталей записана в виде строк в шестнадцатеричной кодировке. См., Например, эту транзакцию для обмена пары токенов с использованием Uniswap в сети Ethereum (эта конкретная запись может быть получена путем запроса таблицы транзакций в общедоступном наборе данных Google на Ethereum, а также для просмотра на Etherscan):

 hash: 0x87a3bc85da972583e22da329aa109ea0db57c54a2eee359b2ed12597f5cb1a64 
Nonce: 449
transaction_index: 37
FROM_ADDRESS: 0x3c02cebb49f6e8f1fc96158099ffa064bbfee38b
to_address: 0x7a250d5630b4cf539739df2c5dacb4c659f2488d
значение: 0E-9
газ: 228630
gas_price: 91754307665
вход: 0x38ed173

00000000000000000000000000000000000000000000000000009502f

0000000000000000000000000000000000000000a07e38bf71936cbe39594100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000003c02cebb49f6e8f1fc96158099ffa064bbfee38b00000000000000000000000000000000000000000000000000000000616e112300000000000000000000000000000000000000000000000000000000000000030000000 00000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000528b3e98c63ce21c6f680b713918e0f89dfae555
receipt_cumulative_gas_used: 2119514
receipt_gas_used: 192609
receipt_contract_address: Нет
receipt_root: Нет
receipt_status: 1
block_timestamp: 2021-10-19 00:00:18
block_number: 13444845
block_hash: 0xe9ea4fc0ef9a13b1e403e68e3ff94bc94e472132528fe8f07ade422b84a43afc
max_fee_per_gas: Нет
max_priority_fee_per_gas: Нет
transaction_type: Нет
Receiver_effective_gas_price: 91754307665

Как вы могли заметить, глядя на транзакцию на Etherscan, она уже декодирует эту необработанную запись и предоставляет отличный контекст, который поможет вам понять детали транзакции.Хотя это чрезвычайно полезно, оно не предназначено для ответов на вопросы, требующие преобразования и агрегирования данных, например сколько общей стоимости было продано всеми пользователями Uniswap, или каково удержание пользователей Uniswap за 3 месяца. Чтобы ответить на эти вопросы, нам потребуется собрать все записи, расшифровать их и работать с соответствующими деталями в пакетном режиме. Мы рассмотрим, как это сделать, в оставшейся части этого поста.

Если мы исследуем запись необработанных данных, мы увидим, что транзакция была инициирована EOA, 0x3c02cebb49f6e8f1fc96158099ffa064bbfee38b , на адрес смарт-контракта, связанный с маршрутизатором Uniswap v2, 0x7a250d655630b4cf139d4cd4cf539b2cd2Однако соответствующие детали запроса кодируются в виде длинной шестнадцатеричной строки в поле input .

Прежде чем мы перейдем к извлечению удобочитаемых данных из ввода , будет поучительно поговорить о его структуре. Ведущий 0x является индикатором того, что эта строка является шестнадцатеричной, поэтому она не имеет отношения к фактическому информационному содержанию. После этого каждые 2 шестнадцатеричных символа представляют байт. Первые четыре байта, в данном случае 38ed1739 , представляют собой хешированную подпись вызываемой функции.Остальные байты - это хэши аргументов, передаваемых функции. Это означает, что длина входной строки может варьироваться в зависимости от конкретной вызываемой функции и требуемых параметров.

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

Частичное представление ABI маршрутизатора Uniswap v2 - изображение автора.

ABI обычно можно найти в обозревателях блоков, таких как Etherscan, вместе с исходным кодом контракта. Вот ссылка на ABI для контракта на маршрутизатор Uniswap v2.

Когда у нас будет под рукой ABI, мы можем написать для декодирования транзакции:

Несколько вещей, на которые следует обратить внимание в примере кода:

  1. Этот код предназначен для использования для пакетной обработки большого количества транзакций.Он предполагает, что данные уже присутствуют в локальном хранилище (и не загружаются в реальном времени из цепочки блоков), и хорошо подходят для инфраструктуры распределенной обработки, такой как PySpark.
  2. @lru_cache (maxsize = None) - Мы кэшируем создание объекта контракта, чтобы уменьшить накладные расходы от повторения одних и тех же вычислений для большого количества транзакций. Это предполагает, что декодирование нацелено на небольшое количество (порядка тысяч) отдельных смарт-контрактов.
  3. Он использует метод пакета web3 с открытым исходным кодом decode_function_input для извлечения данных на основе шаблонов, представленных в ABI.Однако этот метод возвращает данные, которые часто не поддаются сериализации (например, массивы байтов) и иногда в них отсутствуют понятные человеку ключи. Следовательно, очень полезно (возможно, даже необходимо) выполнить обработку после извлечения с использованием служебного метода convert_to_hex для преобразования данных в сериализуемые объекты json и присоединения понятных для человека ключей там, где они отсутствуют. Это упрощает сохранение и повторное использование декодированных данных.
  4. Этот же код можно использовать и для декодирования элементов данных трассировки .Это потому, что это просто внутренние транзакции, инициированные смарт-контрактом.

Используя код выше, дает эти декодированные входные данные

 функции называется: swapExactTokensForTokens 
аргументов: {
"amountIn": 2500000000,
"amountOutMin": 194024196127819599854524737,
"путь": [
"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
«0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 ",
" 0x528B3e98c63cE21C6f680b713918E0F89DfaE555 "
],
" to ":" 0x3c02cebB49F6e8f1FC96158099fFA064bBfeE38B ",
" крайний срок ": 1634 From aExplox 911 9000 , и пользователь вкладывает 2 500 000 000 единиц начального токена и ожидает получить назад не менее 194 024 196 127 819 599 854 524 737 единиц целевого токена.n, где n - это что-то вроде 18. n иногда называют десятичным значением токена.
  • Массив path описывает токены, которыми обмениваются в этой транзакции. Каждый элемент массива - это адрес контракта токена. Первый - это USDC (стабильная монета, привязанная к доллару), второй - Wrapped Eth (Ethereum с интерфейсом ERC20), а третий - DXO (внутриигровая валюта deep.space).
  • Соединяя 1 и 2 вместе, мы можем сделать вывод, что запрос пользователя заключается в обмене 2500 долларов США (десятичное значение доллара США 6) на ~ 194 миллиона DXO (DXO имеет десятичное значение 18).Поскольку этот конкретный парный своп недоступен напрямую, транзакция будет проводиться через промежуточный токен WETH.
  • Эта транзакция также создала 7 событий в процессе выполнения, которые могут быть получены путем запроса таблицы журналов в общедоступном наборе данных Google на Ethereum, а также просмотра на Etherscan. Два наиболее ярких записей, которые соответствуют свопы, запрашиваемых пользователями являются:

     log_index: 47 
    transaction_hash: 0x87a3bc85da972583e22da329aa109ea0db57c54a2eee359b2ed12597f5cb1a64
    transaction_index: 37
    Адрес: 0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc
    данные: 0x000000000000000000000000000000000000000000000000000000009502f

    000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093f8f932b016b1c


    темы: [
    '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822',
    '0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d'
    '0x000000000000000000000000242301fa62f0de9e3842a5fb4c0cdca67e3a2fab']

    block_timestamp: 2021-10-19 00:00:18
    block_number: 13444845
    block_hash: 0xe9ea4fc0ef9a13b1e403e68e3ff94bc94e472132528fe8f07ade422b84a43afc
    900 02 и

     log_index: 50 
    transaction_hash: 0x87a3bc85da972583e22da329aa109ea0db57c54a2eee359b2ed12597f5cb1a64
    transaction_index: 37
    Адрес:
    0x242301fa62f0de9e3842a5fb4c0cdca67e3a2fab данные: 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093f8f932b016b1c000000000000000000000000000000000000000000a137bb41b9113069a51e1

    000000000000000000000000000000000000000000000000000000000000


    темы: [
    '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822', '0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d', '0x0000000000000000000000003c02cebb49f6e8f1fc96158099ffa064bbfee38b']

    block_timestamp: 2021-10-19 00:00:18
    block_number: 13444845
    block_hash: 0xe9ea4fc0ef9a13b1e403e68e3ff94bc94e472132528fe8f07ade422b84a43afc

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

    Читатель проницательный заметит, что контракт адрес в указанных журналах, 0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc и 0x242301fa62f0de9e3842a5fb4c0cdca67e3a2fab отличается от контракта v2 маршрутизатора, 0x7a250d5630b4cf539739df2c5dacb4c659f2488d , которую EOA пользователя изначально называется. Эти два адреса соответствуют парным контрактам Uniswap v2 для пар токенов USDC-WETH и DXO-WETH.Эти контракты несут ответственность за поддержание ликвидности для соответствующей торговой пары и фактическое выполнение свопа. Контракт маршрутизатора, с которым пользователь взаимодействовал изначально, функционирует как координатор и инициирует внутренние транзакции ( трассировки ) для соответствующих парных контрактов. Следовательно, для декодирования этих событий нам также понадобится парный контракт ABI. Пример кода для декодирования журналов выглядит следующим образом:

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

    , событие генерируется: своп 
    аргументы: {
    "отправитель": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
    "до": "0x242301FA62f0De9e3842A5Fb00ec0365:" 0x242301FA62f0De9e3842A5Fb00ec0365:
    ": 0,
    " amount1Out ": 666409132118600476
    }

    и

     Событие отправлено: Swap 
    аргументы: {
    " отправитель ":" 0x7a250d5630B4cF539739dF2C5dAcb4c659F24FC015e
    "amount1In": 666409132118600476,
    "amount0Out": 19413914

    085918233,
    "amount1Out": 0
    }

    Мы можем, что эти два события действительно swap , которые следовали по пути в первоначальном запросе - USDC> WETH DXO.Мы видим, что контракт маршрутизатора (заканчивающийся 488D ) является отправителем в обоих событиях, выступая в качестве координатора. Контракт пары USDC-WETH (заканчивающийся c9dc ) обменивает 2 500 000 000 единиц USDC на 666 409 132 118 600 476 единиц WETH, а затем передает полученный WETH в контракт пары DXO-WETH (заканчивающийся 2Fab ). Контракт DXO-WETH затем обменивает 666 409 132 118 600 476 единиц WETH на 194 900 241 391 490 294 085 918 233 единиц DXO и отправляет их обратно пользователю (EOA, заканчивающийся E38B ), как первоначально запрашивалось.

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

    Обновлено: 09.12.2021 — 14:41

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *