May 6, 2022

Neon EVM: Доступ к учетным записям Solana с помощью Solidity с использованием библиотеки QueryAccount

https://neonlabsorg.medium.com/neon-evm-access-solana-accounts-with-solidity-using-the-queryaccount-library-fa1d2aa816b1

Neon EVM - это Ethereum-подобная среда, которая позволяет контрактам Solidity и Ethereum-подобным транзакциям функционировать на Solana. Хотя Neon EVM построен на Solana, dApps на платформе не могут получить доступ к счетам Solana для получения данных на цепочке. Чтобы преодолеть это ограничение, Neon Labs разработала библиотеку QueryAccount.

QueryAccount - это низкоуровневая библиотека Solidity, которая предоставляет разработчикам стандартизированные функции для получения информации о цепочке, например, ценовых фидов, для использования в своих приложениях Neon EVM dApps. Пользователи могут рассматривать QueryAccount как односторонний канал данных, который позволяет приложениям Neon EVM dApps читать информацию, хранящуюся на Solana.

Коммуникация между Solidity и Rust

Библиотека QueryAccount облегчает взаимодействие между программами Solidity и Rust. Функции Solidity, составляющие библиотеку, поддерживаются предварительно скомпилированной программой Rust по фиксированному адресу Solana.

Каждая функция Solidity в QueryAccount взаимодействует с предварительно скомпилированной программой Rust посредством статического вызова, что означает, что состояние программы Rust не будет изменено. Для этого функции Solidity используют низкоуровневый интерфейс Solidity Application Binary Interface (ABI).
ABI - это интерфейс между двумя двоичными программами (скомпилированными программами). Он определяет процедуры вызова функций и способ передачи параметров между двумя двоичными программами.

Когда программа Rust вызывается через ABI, она получает запрашиваемую информацию из указанного счета Solana и записывает ее в память в виде неструктурированного набора байтов. Затем функции QueryAccount считывают эти байты из памяти и преобразуют их в типы данных, более привычные для программирования высокого уровня (целое число, строка и т.д.). Эти типы данных могут быть легко прочитаны другими программами Solidity, например, dApps на Neon EVM.

Важность доступа к Solana счету

Многие приложения Neon EVM dApps потребуют использования изменчивых данных реального мира, таких как ценовые каналы, спортивная статистика, погода и многое другое. Однако из-за детерминированной природы блокчейна приложения dApp не могут использовать API для получения внешних данных. Приложениям Neon EVM dApps необходимо полагаться на оракулы Solana для получения и публикации данных на цепочке для получения последовательной информационной ссылки.

Использование QueryAccount позволяет приложениям Neon EVM dApps читать информацию, хранящуюся на Solana. Проекты могут использовать библиотеку QueryAccount напрямую для создания специализированных каналов данных или использовать инфраструктуру на базе QueryAccount, например PythNeon, для доступа к данным Solana через традиционную модель оракула.

Описание функций QueryAccount

cache(): Данная функция используется для получения и хранения метаданных учетной записи Solana и части ее данных в кэше памяти в целях оптимизации кода и согласованности данных.

length(): Данная функция используется для получения адреса владельца учетной записи Solana.

lamports(): Данная функция используется для получения количества лампортов, хранящихся в аккаунте Solana.

executable(): Данная функция используется для получения исполняемого флага учетной записи Solana.

rent_epoch(): Данная функция используется для получения эпохи аренды счета Solana.

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

Если вам интересно ознакомиться с интеграционными тестами для функций QueryAccount, вы можете сделать это здесь.


Команда Neon готова помочь

Если эта статья оставила у вас еще вопросы, свяжитесь с нашей командой через Discord. Мы будем рады ответить на любые вопросы, касающиеся библиотеки QueryAccount, и объяснить, как она облегчает взаимодействие между программами Solidity и Rust. Так же вы можете написать лично мне:
Discord - enero#3562
Я смогу проконсультировать вас, либо же помогу с переводом.



Официальные ссылки на NeonLabs:

Discord: https://discord.gg/5ynFYfa9TU
Twitter: https://twitter.com/neonlabsorg
Telegram: https://t.me/Neonlabsorg
GitHub: https://github.com/neonlabsorg
Reddit: https://www.reddit.com/r/neonlabsorg/
Medium: https://neonlabsorg.medium.com/