# Space and Time. Выполнение SQL-запросов из смарт-контракта. Перевод на русский язык

By [NFTerraX](https://paragraph.com/@nfterrax-2) · 2022-12-25

---

Используя основу, заложенную децентрализованными сетями oracle, Space and Time продолжает расширять границы запросов к реляционным базам данных через смарт-контракт.

Способность блокчейна обеспечивать доверие, безопасность, конфиденциальность, видимость, отслеживаемость и децентрализацию породила множество преимуществ, которые изменили и трансформировали целый ряд отраслей, включая финансы, недвижимость и игровой бизнес. Эти достижения привели к появлению термина Web3, описывающего новую эру интернета. Но по своей сути цель блокчейна — просто хранить информацию. Это означает, что блокчейн — это просто новый тип базы данных. Хотя этот новый формат базы данных имеет много преимуществ, он ограничен в количестве данных, которые он может хранить, и в количестве хранимых данных. В противоположность этому существует глубокий мир традиционных баз данных, способных хранить огромные объемы данных. В этих традиционных базах данных хранятся самые важные сведения, полученные от всех крупнейших корпораций, начиная с 1960-х годов. Поэтому настало время перенести эти старые базы данных и ценную информацию, которую они хранят, в современную эпоху, подключив их к блокчейну. В этой статье мы обсудим причины и способы выполнения SQL-запроса из смарт-контракта.

Что такое смарт-контракт
------------------------

Чтобы начать подключение традиционных баз данных к экосистеме Web3, мы начнем со смарт-контракта. Смарт-контракт — это программа, хранящаяся непосредственно на блокчейне, которая запускается при выполнении определенных условий. Смарт-контракты используются для создания токенов, создания NFT, автоматизации торговли, кредитования, займов, ставок и всех других процессов, происходящих на блокчейне.

Что такое SQL-запрос
--------------------

SQL расшифровывается как Structured Query Language (Язык структурированных запросов) и является языком, используемым в реляционных базах данных. Реляционная база данных — это коллекция информации, которая организована по заранее определенным связям для быстрого доступа. SQL-запрос — это часть кода, используемая для доступа к этим реляционным базам данных. За последние 2 года блокчейн биткоина увеличил объем хранимой информации примерно на 50 Гб в год. Однако SQL Server Standard Edition имеет верхний предел в 524 петабайта (5,24e+8 гигабайт). Понимание того, что огромное количество данных хранится в реляционном формате, еще больше проясняет необходимость подключения к блокчейну.

**Примеры использования**
-------------------------

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

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

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

Варианты
--------

Существует несколько способов получения информации между смарт-контрактом и реляционной базой данных. Например, можно написать бэкенд-скрипт на node.js, который использует api для доступа к базе данных, возвращает информацию и использует библиотеку ethers.js для вызова функции смарт-контракта, передавая данные в качестве переменной. Однако этот способ является непрямым и требует дополнительной инфраструктуры бэкенда.

Существуют также библиотеки, используемые для написания javascript внутри смарт-контракта. С помощью этого метода теоретически можно написать api и sql-вызов внутри смарт-контракта, используя javascript. Однако эти библиотеки оказались устаревшими, нефункциональными и/или неэффективными с точки зрения затрат.

Как сделать SQL-запрос из смарт-контракта
-----------------------------------------

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

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

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

Что насчет консенсуса
---------------------

Хотя можно передавать данные вне цепочки в качестве параметра функции, для того чтобы смарт-контракт сам получил данные вне цепочки, ему необходимо сделать запрос к оракулу. Оракул — это, по сути, API на цепочке, который можно использовать для запроса информации в смарт-контракте.

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

Следующим шагом на пути к полной интеграции SQL-запросов и смарт-контрактов является обеспечение устойчивости SQL-запросов к взлому.

Итог
----

Границы блокчейна постоянно расширяются, поскольку он непрерывно внедряется во множество технологий и отраслей. Основываясь на децентрализованных сетях оракулов, Space and Time продолжает расширять границы запросов к реляционным базам данных через смарт-контракт. Многие из инноваций, ставших возможными благодаря прямой интеграции новой базы данных блокчейн и традиционных баз данных, будут открыты благодаря таким любознательным читателям, как вы.  
Счастливых запросов!

> **Оригинал:** [https://www.spaceandtime.io/blog/making-sql-queries-from-a-smart-contract](https://www.spaceandtime.io/blog/making-sql-queries-from-a-smart-contract)

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

[**Website**](http://www.spaceandtime.io/) | [**Twitter**](https://twitter.com/SpaceandTimeDB) | [**Linkedin**](https://www.linkedin.com/company/space-and-time-labs/) | [**Discord**](https://discord.gg/exN9FjeJhq) | [**Telegram**](https://t.me/spaceandtimelabs) | [**Youtube**](https://www.youtube.com/channel/UCXJyE7ahmqCH11aO7L76PBA) | [**Instagram**](https://instagram.com/SpaceandTimeDB) | [**Reddit**](https://www.reddit.com/r/spaceandtimeDB/) | [**CrunchBase**](https://www.crunchbase.com/organization/space-and-time)

---

*Originally published on [NFTerraX](https://paragraph.com/@nfterrax-2/space-and-time-sql)*
