Прежде чем мы сможем полностью понять Tezos и SmartPy, мы должны сначала понять технологию, которая лежит в основе всего этого: блокчейн. Блокчейн - это цепочка блоков, каждый из которых содержит список транзакций. Технология Blockchain обеспечивает децентрализованную базу данных, или "цифровую книгу", транзакций, которую могут видеть все участники сети. Его архитектура гарантирует, что каждая транзакция уникальна, и как только она записана в базу данных, ее невозможно изменить.
Tezos - одна из таких блокчейн-платформ. От многих других блокчейн-платформ, таких как Bitcoin или Ethereum, Tezos отличает акцент на "самоизменении", что позволяет протоколу обновляться самостоятельно без необходимости жесткой развилки. Это существенное преимущество, поскольку оно делает протокол адаптируемым и перспективным.
Tezos также предлагает платформу для смарт-контрактов, которые представляют собой самоисполняющиеся контракты с соглашением между покупателем и продавцом, записанным непосредственно в строках кода. Такая способность управлять и проверять цифровые соглашения предлагает широкий спектр потенциальных применений - от финансовых услуг до цепочек поставок и децентрализованных приложений (DApps). Подробнее о Tezos: Что такое Tezos? Все, что Вам нужно знать о XTZ
Для создания смарт-контрактов на Tezos мы используем язык под названием SmartPy. SmartPy - это библиотека на языке Python для разработки смарт-контрактов для блокчейна Tezos. Это интуитивно понятный и эффективный язык для выражения контрактов и связанных с ними сценариев тестирования.
Наиболее примечательной особенностью SmartPy является его интеграция с Python, который является одним из самых популярных и быстрорастущих языков программирования в мире. Если Вы уже знакомы с Python, то SmartPy покажется Вам довольно простым в освоении.
SmartPy включает в себя полнофункциональную интегрированную среду разработки (IDE), доступную из Вашего веб-браузера. Перейдите в SmartPy IDE, чтобы начать писать свой первый смарт-контракт.
В SmartPy IDE Вы найдете окно редактирования, в котором Вы можете ввести код Вашего контракта. Давайте начнем с составления базового контракта. Скопируйте и вставьте следующий код в редактор SmartPy:
Python
import smartpy as sp
# Модуль SmartPy
@sp.module
def main():
# Класс контрактов
class MyContract(sp.Contract):
def __init__(self, myParameter1, myParameter2):
self.data.myParameter1 = myParameter1
self.data.myParameter2 = myParameter2
# Точка входа, т.е. приемник сообщений
# (контракты реагируют на сообщения)
@sp.entrypoint
def myEntryPoint(self, params):
assert self.data.myParameter1 <= 123
self.data.myParameter1 += params
Этот контрактный кодекс состоит из нескольких важных частей:
import smartpy as sp
- Здесь импортируется библиотека SmartPy, чтобы мы могли использовать ее для написания нашего контракта.@sp.module
- Этот декоратор сообщает интерпретатору SmartPy, что данная функция будет содержать контракт SmartPy.class MyContract(sp.Contract):
- Здесь мы определяем новый класс (образец для создания новых объектов) для нашего контракта. Он наследуется от суперкласса sp.Contract
, который предоставляет множество полезных функциональных возможностей для работы с состоянием контракта и определения его поведения.self.data.myParameter1 = myParameter1
и self.data.myParameter2 = myParameter2
- Здесь мы определяем начальное состояние нашего контракта. Эти два параметра будут переданы контракту при его развертывании на блокчейне.@sp.entrypoint
- Этот декоратор сообщает интерпретатору, что следующая функция(myEntryPoint
) является точкой входа нашего контракта. Точки входа - это то, как мы взаимодействуем с нашим контрактом после его развертывания.self.data.myParameter1 += params
- Эта строка кода увеличивает myParameter1
на сумму, переданную в myEntryPoint
.Важнейшей частью составления контрактов является их тщательное тестирование. Тестирование в SmartPy интегрировано в процесс разработки. Вот как Вы можете добавить тесты в контракт:
Python
# Тесты
@sp.add_test(name="Welcome")
def test():
# Мы определяем тестовый сценарий вместе с некоторыми выводами и проверками
# Сценарий принимает модуль в качестве параметра
scenario = sp.test_scenario(main)
scenario.h1("Welcome")
# Сначала мы определяем контракт и добавляем его в сценарий
c1 = main.MyContract(12, 123)
scenario += c1
# И вызываем некоторые из его точек входа
c1.myEntryPoint(12)
c1.myEntryPoint(13)
c1.myEntryPoint(14)
c1.myEntryPoint(50)
c1.myEntryPoint(50)
c1.myEntryPoint(50).run(valid=False) # ожидается, что это не удастся
# Наконец, мы проверяем его окончательное хранение
scenario.verify(c1.data.myParameter1 == 151)
# Мы можем определить другой контракт, используя текущее состояние c1
c2 = main.MyContract(1, c1.data.myParameter1)
scenario += c2
scenario.verify(c2.data.myParameter2 == 151)
Теперь Ваш полный контракт должен выглядеть следующим образом:
Python
import smartpy as sp
# Это редактор SmartPy.
# Вы можете поэкспериментировать со SmartPy, загрузив шаблон.
# (в меню Commands над этим редактором)
#
# Типичная программа SmartPy имеет следующий вид:
# Модуль SmartPy
@sp.module
def main():
# Класс контрактов
class MyContract(sp.Contract):
def __init__(self, myParameter1, myParameter2):
self.data.myParameter1 = myParameter1
self.data.myParameter2 = myParameter2
# Точка входа, т.е. приемник сообщений
# (контракты реагируют на сообщения)
@sp.entrypoint
def myEntryPoint(self, params):
assert self.data.myParameter1 <= 123
self.data.myParameter1 += params
# Тесты
@sp.add_test(name="Welcome")
def test():
# Мы определяем тестовый сценарий вместе с некоторыми выводами и проверками
# Сценарий принимает модуль в качестве параметра
scenario = sp.test_scenario(main)
scenario.h1("Welcome")
# Сначала мы определяем контракт и добавляем его в сценарий
c1 = main.MyContract(12, 123)
scenario += c1
# И вызываем некоторые из его точек входа
c1.myEntryPoint(12)
c1.myEntryPoint(13)
c1.myEntryPoint(14)
c1.myEntryPoint(50)
c1.myEntryPoint(50)
c1.myEntryPoint(50).run(valid=False) # ожидается, что это не удастся
# Наконец, мы проверяем его окончательное хранение
scenario.verify(c1.data.myParameter1 == 151)
# Мы можем определить другой контракт, используя текущее состояние c1
c2 = main.MyContract(1, c1.data.myParameter1)
scenario += c2
scenario.verify(c2.data.myParameter2 == 151)
После того, как Вы написали контракт и тесты, Вы можете запустить их непосредственно в IDE. Нажмите кнопку "Выполнить" в правом верхнем углу IDE. IDE скомпилирует Ваш контракт, выполнит тесты и выведет на экран результаты вместе с подробным объяснением каждой операции и изменения состояния.
В заключение, этот урок познакомил Вас с блокчейном Tezos и SmartPy, языком смарт-контрактов для Tezos. Вы также написали, поняли и протестировали свой первый контракт SmartPy. Это только начало - еще столько всего можно узнать и сделать с помощью SmartPy и Tezos. Мы надеемся, что Вам будет интересно продолжить это путешествие вместе с нами в предстоящих уроках!
Прежде чем мы сможем полностью понять Tezos и SmartPy, мы должны сначала понять технологию, которая лежит в основе всего этого: блокчейн. Блокчейн - это цепочка блоков, каждый из которых содержит список транзакций. Технология Blockchain обеспечивает децентрализованную базу данных, или "цифровую книгу", транзакций, которую могут видеть все участники сети. Его архитектура гарантирует, что каждая транзакция уникальна, и как только она записана в базу данных, ее невозможно изменить.
Tezos - одна из таких блокчейн-платформ. От многих других блокчейн-платформ, таких как Bitcoin или Ethereum, Tezos отличает акцент на "самоизменении", что позволяет протоколу обновляться самостоятельно без необходимости жесткой развилки. Это существенное преимущество, поскольку оно делает протокол адаптируемым и перспективным.
Tezos также предлагает платформу для смарт-контрактов, которые представляют собой самоисполняющиеся контракты с соглашением между покупателем и продавцом, записанным непосредственно в строках кода. Такая способность управлять и проверять цифровые соглашения предлагает широкий спектр потенциальных применений - от финансовых услуг до цепочек поставок и децентрализованных приложений (DApps). Подробнее о Tezos: Что такое Tezos? Все, что Вам нужно знать о XTZ
Для создания смарт-контрактов на Tezos мы используем язык под названием SmartPy. SmartPy - это библиотека на языке Python для разработки смарт-контрактов для блокчейна Tezos. Это интуитивно понятный и эффективный язык для выражения контрактов и связанных с ними сценариев тестирования.
Наиболее примечательной особенностью SmartPy является его интеграция с Python, который является одним из самых популярных и быстрорастущих языков программирования в мире. Если Вы уже знакомы с Python, то SmartPy покажется Вам довольно простым в освоении.
SmartPy включает в себя полнофункциональную интегрированную среду разработки (IDE), доступную из Вашего веб-браузера. Перейдите в SmartPy IDE, чтобы начать писать свой первый смарт-контракт.
В SmartPy IDE Вы найдете окно редактирования, в котором Вы можете ввести код Вашего контракта. Давайте начнем с составления базового контракта. Скопируйте и вставьте следующий код в редактор SmartPy:
Python
import smartpy as sp
# Модуль SmartPy
@sp.module
def main():
# Класс контрактов
class MyContract(sp.Contract):
def __init__(self, myParameter1, myParameter2):
self.data.myParameter1 = myParameter1
self.data.myParameter2 = myParameter2
# Точка входа, т.е. приемник сообщений
# (контракты реагируют на сообщения)
@sp.entrypoint
def myEntryPoint(self, params):
assert self.data.myParameter1 <= 123
self.data.myParameter1 += params
Этот контрактный кодекс состоит из нескольких важных частей:
import smartpy as sp
- Здесь импортируется библиотека SmartPy, чтобы мы могли использовать ее для написания нашего контракта.@sp.module
- Этот декоратор сообщает интерпретатору SmartPy, что данная функция будет содержать контракт SmartPy.class MyContract(sp.Contract):
- Здесь мы определяем новый класс (образец для создания новых объектов) для нашего контракта. Он наследуется от суперкласса sp.Contract
, который предоставляет множество полезных функциональных возможностей для работы с состоянием контракта и определения его поведения.self.data.myParameter1 = myParameter1
и self.data.myParameter2 = myParameter2
- Здесь мы определяем начальное состояние нашего контракта. Эти два параметра будут переданы контракту при его развертывании на блокчейне.@sp.entrypoint
- Этот декоратор сообщает интерпретатору, что следующая функция(myEntryPoint
) является точкой входа нашего контракта. Точки входа - это то, как мы взаимодействуем с нашим контрактом после его развертывания.self.data.myParameter1 += params
- Эта строка кода увеличивает myParameter1
на сумму, переданную в myEntryPoint
.Важнейшей частью составления контрактов является их тщательное тестирование. Тестирование в SmartPy интегрировано в процесс разработки. Вот как Вы можете добавить тесты в контракт:
Python
# Тесты
@sp.add_test(name="Welcome")
def test():
# Мы определяем тестовый сценарий вместе с некоторыми выводами и проверками
# Сценарий принимает модуль в качестве параметра
scenario = sp.test_scenario(main)
scenario.h1("Welcome")
# Сначала мы определяем контракт и добавляем его в сценарий
c1 = main.MyContract(12, 123)
scenario += c1
# И вызываем некоторые из его точек входа
c1.myEntryPoint(12)
c1.myEntryPoint(13)
c1.myEntryPoint(14)
c1.myEntryPoint(50)
c1.myEntryPoint(50)
c1.myEntryPoint(50).run(valid=False) # ожидается, что это не удастся
# Наконец, мы проверяем его окончательное хранение
scenario.verify(c1.data.myParameter1 == 151)
# Мы можем определить другой контракт, используя текущее состояние c1
c2 = main.MyContract(1, c1.data.myParameter1)
scenario += c2
scenario.verify(c2.data.myParameter2 == 151)
Теперь Ваш полный контракт должен выглядеть следующим образом:
Python
import smartpy as sp
# Это редактор SmartPy.
# Вы можете поэкспериментировать со SmartPy, загрузив шаблон.
# (в меню Commands над этим редактором)
#
# Типичная программа SmartPy имеет следующий вид:
# Модуль SmartPy
@sp.module
def main():
# Класс контрактов
class MyContract(sp.Contract):
def __init__(self, myParameter1, myParameter2):
self.data.myParameter1 = myParameter1
self.data.myParameter2 = myParameter2
# Точка входа, т.е. приемник сообщений
# (контракты реагируют на сообщения)
@sp.entrypoint
def myEntryPoint(self, params):
assert self.data.myParameter1 <= 123
self.data.myParameter1 += params
# Тесты
@sp.add_test(name="Welcome")
def test():
# Мы определяем тестовый сценарий вместе с некоторыми выводами и проверками
# Сценарий принимает модуль в качестве параметра
scenario = sp.test_scenario(main)
scenario.h1("Welcome")
# Сначала мы определяем контракт и добавляем его в сценарий
c1 = main.MyContract(12, 123)
scenario += c1
# И вызываем некоторые из его точек входа
c1.myEntryPoint(12)
c1.myEntryPoint(13)
c1.myEntryPoint(14)
c1.myEntryPoint(50)
c1.myEntryPoint(50)
c1.myEntryPoint(50).run(valid=False) # ожидается, что это не удастся
# Наконец, мы проверяем его окончательное хранение
scenario.verify(c1.data.myParameter1 == 151)
# Мы можем определить другой контракт, используя текущее состояние c1
c2 = main.MyContract(1, c1.data.myParameter1)
scenario += c2
scenario.verify(c2.data.myParameter2 == 151)
После того, как Вы написали контракт и тесты, Вы можете запустить их непосредственно в IDE. Нажмите кнопку "Выполнить" в правом верхнем углу IDE. IDE скомпилирует Ваш контракт, выполнит тесты и выведет на экран результаты вместе с подробным объяснением каждой операции и изменения состояния.
В заключение, этот урок познакомил Вас с блокчейном Tezos и SmartPy, языком смарт-контрактов для Tezos. Вы также написали, поняли и протестировали свой первый контракт SmartPy. Это только начало - еще столько всего можно узнать и сделать с помощью SmartPy и Tezos. Мы надеемся, что Вам будет интересно продолжить это путешествие вместе с нами в предстоящих уроках!