Хотите узнать механизм работы контракта, применяемый на АО? Итак, давайте возьмем код контракта и выясним. Используйте апплет Python, чтобы легко получить контракт указанного процесса.

Автор: txohyeah

Проверил: outprog

Источник: Гильдия контента – Новости

Введение в АО

Что такое АО?

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

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

АО состоит из трех подразделений: МУ/СУ/КУ.

MU: Получает сообщения, отправленные пользователями, чтобы убедиться, что они подписаны.

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

БЧ: Обработайте сообщение и подсчитайте результат.

Что такое процесс, выполняемый на AO?

AO, по сути, представляет собой суперпараллельный компьютер, построенный на основе протокола данных, где данные существуют в форме базового элемента «Сообщение», определенного в AO. Далее Процесс играет важную роль в обработке Сообщения и является базовой единицей обработки сообщений на АО. Процесс выполняется на CU и может рассматриваться как виртуальная машина на CU. Таким образом, Process содержит базовую возможность получать и отправлять сообщения внутри сети. Затем разработчики создают возможности обработки сообщений для Process, добавляя в Process обработчики. Контракт, который будет обсуждаться позже, фактически развертывается путем отправки сообщения в Process и последующего использования встроенного обработчика _eval. Добавленный обработчик можно понимать как функцию обработки сообщений контракта.

Жизненный цикл процесса

Если мы хотим найти аналогию в нашем нынешнем мире, то я думаю, что контейнер (Container) в докере может стать хорошим сравнением и пониманием Process. Далее я воспользуюсь аналогией жизненного цикла Контейнера в Docker, чтобы сравнить жизненный цикл Процесса.

Все мы знаем, что создание Контейнера в докере зависит от образа (Image). Например, создайте Контейнер MySQL на основе Образа MySQL, а затем вы сможете вызвать сервис MySQL на этом контейнере. То же самое касается процесса в АО. Создание процесса зависит от модуля, а также будут модули с разными функциями. Есть самые простые модули, модули, поддерживающие запланированные задачи, и модули, включающие sqlite. В настоящее время разработчики могут выбирать из сотен модулей для создания собственного процесса. Кроме того, вы также можете создать свой собственный модуль. Я считаю, что в ближайшем будущем также появятся модули, поддерживающие графические процессоры, и модули, поддерживающие различные возможности искусственного интеллекта.

Процесс в AO также отличается от контейнера в докере. Контейнеры в Docker поддерживают различные действия, такие как запуск, остановка и удаление. В настоящее время в Процессе АО таких операций нет. Ведь в мире децентрализованных приложений эти функции, контролируемые централизованными лицами, очень противоречивы. Запуск процесса в АО полностью зависит от ценности самого процесса. Если он имеет достаточную ценность, то больше CU определенно захотят его запустить. Напротив, если процесс не имеет ценности, ни один CU не захочет его запускать. Тогда Этот Процесс исчезнет молча.

Функция оценки и развертывание контракта AO

Что такое контракт АО? Сравните смарт-контракты Ethereum. Код Lua в Process, работающий на AO, можно приблизительно рассматривать как смарт-контракт.

Когда мы создаем Процесс, каждый загруженный Модуль будет иметь два обработчика по умолчанию (под обработчиками можно понимать функции, открытые для других Процессов), один из которых — обработчик _eval. Основная функция этого обработчика — запуск кода Lua. Например, если вы введете 1+1 в aos, будет возвращено 2, которое обрабатывается этим обработчиком. Тогда развертывание контракта фактически означает отправку сообщения в процесс и добавление специального обработчика, который может обрабатывать бизнес-логику, в процесс через обработчик _eval.

Следует отметить одну вещь: см. код ниже. Это раздел кода в файлеprocess.lua официального проекта AO с открытым исходным кодом. Обработчик _eval может быть выполнен только в том случае, если отправитель сообщения соответствует владельцу процесса (владельцем является адрес кошелька при создании контракта). Другими словами, если для Владельца установлено значение ноль (т. е. для Процесса установлено отсутствие Владельца), то контракт в этом Процессе становится контрактом, который никто не может изменить.

Кроме того, поскольку AO фактически построен на основе парадигмы консенсуса на основе хранилища (SCP, парадигма консенсуса на основе хранилища), действующий контракт должен быть найден на основе «консенсуса хранилища», то есть всех сообщений, выполняемых в процессе, включая через Код контракта, развернутый обработчиком _eval, хранится в Arweave. Таким образом, любой желающий может найти код контракта на этом «консенсусе хранилища».

Посмотреть контракт

Итак, переходя к сегодняшней теме: как найти код контракта? Ниже я представлю эти два метода и приведу программу на Python для захвата контракта.

Арвив

Первый метод — это, конечно, запрос непосредственно в Arweave (вы можете использоватьgraphql https://arweave.net/graphql). Для использования этого подхода требуется, чтобы данные были упакованы в Arweave.

СУ – Браузер

Второй метод – это метод, который в основном применяется сегодня. Поскольку все данные будут загружаться через SU, их также можно запросить через SU. Я лично считаю, что каждое SU будет иметь локальный кеш загружаемых данных, поэтому соответствующий код контракта можно найти, запросив SU. Во-первых, вы можете сделать запрос напрямую, введя адрес в браузере. Однако недостатки этого метода также очевидны: 1. Некоторые Процессы отправляют и получают огромные объемы сообщений, поэтому объем данных, загружаемых в цепочку, также огромен. Однако данные, которые браузер может загрузить, ограничены, и часто происходят сбои браузера. 2. Трудно отфильтровать нужные данные контракта из огромного количества данных.

На рисунке ниже показаны все сообщения процесса (процесса токена АО) с идентификатором процесса m3PaWzK4PTG9lAaqYQPaPdOcXdO8hYqi5Fe9NWqXd0w в пределах двух временных меток.

СУ - СДК

Здесь я написал небольшую программу, используя ao sdk, написанный лидером отрасли на основе Python, для фильтрации сообщений, действием которых является Eval. (Сообщения, действие которых — Eval, — это все сообщения, обработанные обработчиком _eval, включая загруженный код контракта.) На следующем рисунке показано сообщение, которое я получил от SU, в котором содержимое поля данных представляет собой экранированный код контракта. Конечно, захваченные сообщения также будут содержать содержимое кода контракта, не связанное с развертыванием, например выполнение 1 + 1 и т. д. Однако количество сообщений после фильтрации уже невелико, и код контракта можно выбрать вручную.

Программа с открытым исходным кодом, вот адрес github: https://github.com/txohyeah/ao-sc

Контракт токена АО

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

Во-первых, при инициализации состояния TotalSupply = «21000000000000000000» определяется как соответствующее выпуску биткойнов.

Деноминация = Деноминация или 12 также определяет десятичную точку как 12 цифр.

Определено, что если функция передачи выполняется до того, как будут сгенерированы 100 000 блоков, «Передача заблокирована» будет возвращена напрямую.

Поскольку блок генерируется каждые пять минут, 100 000 блоков будут примерно в феврале следующего года.

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

Инструкции по программе

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

Первым шагом является установка версии Python 3.12. Программа написана на питоне, установка питона необходима.

Второй шаг — установка необходимых пакетов. Эта программа опирается на SDK лидеров отрасли и Everpay.

Третий шаг — изменить start_time/end_time/process в fetch_sc_record.py. и выполните fetch_sc_record.py.

start_time и end_time — это периоды времени, которые вам нужно зафиксировать. процесс — это идентификатор процесса, который вам нужен для захвата контракта.

На четвертом шаге соответствующее сообщение Eval появится в файле msg_eval.json. Просмотрите сообщения и вы сможете найти нужный вам код контракта!

PS: Это также должно быть так же, как запуск aos. Установите HTTPS_PROXY.

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

Отказ от ответственности: эта статья не отражает точку зрения или позицию PermaDAO. PermaDAO не предоставляет инвестиционных консультаций и не поддерживает какие-либо проекты. Читателей просят соблюдать законы страны, в которой они находятся, и вести деятельность в Web3 в соответствии с ними.

🔗 关于 PermaDAO:Веб-сайт | Твиттер | Телеграмма | Раздор | Средний | YouTube