Leçon 3

Построение калькулятора умных контрактов

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

Теория

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

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

Также стоит помнить, что поскольку блокчейн Tezos децентрализован, все вычисления должны быть детерминированными. Это означает, что такие операции, как деление, могут работать несколько иначе, чем Вы привыкли. Например, деление в контрактах Tezos - это целочисленное деление, поэтому 3, деленное на 2, даст 1, а не 1.5.

Практический

Ниже приведен код контракта для калькулятора. Контракт Calculator сохраняет результат операций в своем хранилище. Каждая точка входа принимает один параметр и выполняет операцию с сохраненным результатом и входным параметром.

Python
import smartpy as sp


@sp.module
def main():
 class Calculator(sp.Contract):
 def __init__(self):
 self.data.result = 0

 @sp.entrypoint
 def multiply(self, x, y):
 self.data.result = x * y

 @sp.entrypoint
 def add(self, x, y):
 self.data.result = x + y

 @sp.entrypoint
 def square(self, x):
 self.data.result = x * x

 @sp.entrypoint
 def squareRoot(self, x):
 assert x >= 0
 y = x
 while y * y > x:
 y = (x / y + y) / 2
 assert y * y <= x и x < (y + 1) * (y + 1)
 self.data.result = y @sp.entrypoint
 def factorial(self, x):
 self.data.result = 1
 for y in range(1, x + 1):
 self.data.result *= y

 @sp.entrypoint
def log2(self, x):
 assert x > 0, "Input must be greater than 0"

 self.data.result = 0 # Инициализация счетчика

 if x < 1: # Для интервала 0 < x < 1
 y = x
 while y < 1:
 self.data.result -= 1 # Уменьшение счетчика
 y *= 2 # Умножайте y на 2, пока y >= 1
 else:  # Для x >= 1
 y = x
 while y >= 2:
 self.data.result += 1 # Увеличение счетчика
             y /= 2 # Разделите y на 2


if "templates" not in __name__:

   @sp.add_test(name="Calculator")
 def test():
 c1 = main.Calculator()
 scenario = sp.test_scenario(main)
        scenario.h1("Калькулятор")
        scenario += c1
 c1.multiply(x=2, y=5)
 c1.add(x=2, y=5)
 c1.add(x=2, y=5)
 c1.square(12)
 c1.squareRoot(0)
 c1.squareRoot(1234)
 c1.factorial(100)
 c1.log2(c1.data.result)
        scenario.verify(c1.data.result == 524)

Давайте введем этот контракт в действие!

Шаг 1: Вставьте код контракта в SmartPy IDE.

Шаг 2: Нажмите на кнопку Run (Выполнить ) в правом верхнем углу, чтобы скомпилировать и смоделировать контракт.

Шаг 3: Наблюдайте за результатами моделирования в правой части IDE. Вы можете видеть состояние контрактного хранилища после каждой операции, такой как умножение, сложение, квадратный корень и т.д.

Шаг 4: Не стесняйтесь изменять параметры операций и наблюдайте за изменениями в хранении контрактов!

Теперь Вы создали и взаимодействовали со смарт-контрактом, который выполняет базовые операции с калькулятором! В следующем уроке мы рассмотрим более продвинутые концепции, такие как создание контрактов FIFO. Не забывайте продолжать исследовать, и удачного кодирования!

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.
Catalogue
Leçon 3

Построение калькулятора умных контрактов

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

Теория

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

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

Также стоит помнить, что поскольку блокчейн Tezos децентрализован, все вычисления должны быть детерминированными. Это означает, что такие операции, как деление, могут работать несколько иначе, чем Вы привыкли. Например, деление в контрактах Tezos - это целочисленное деление, поэтому 3, деленное на 2, даст 1, а не 1.5.

Практический

Ниже приведен код контракта для калькулятора. Контракт Calculator сохраняет результат операций в своем хранилище. Каждая точка входа принимает один параметр и выполняет операцию с сохраненным результатом и входным параметром.

Python
import smartpy as sp


@sp.module
def main():
 class Calculator(sp.Contract):
 def __init__(self):
 self.data.result = 0

 @sp.entrypoint
 def multiply(self, x, y):
 self.data.result = x * y

 @sp.entrypoint
 def add(self, x, y):
 self.data.result = x + y

 @sp.entrypoint
 def square(self, x):
 self.data.result = x * x

 @sp.entrypoint
 def squareRoot(self, x):
 assert x >= 0
 y = x
 while y * y > x:
 y = (x / y + y) / 2
 assert y * y <= x и x < (y + 1) * (y + 1)
 self.data.result = y @sp.entrypoint
 def factorial(self, x):
 self.data.result = 1
 for y in range(1, x + 1):
 self.data.result *= y

 @sp.entrypoint
def log2(self, x):
 assert x > 0, "Input must be greater than 0"

 self.data.result = 0 # Инициализация счетчика

 if x < 1: # Для интервала 0 < x < 1
 y = x
 while y < 1:
 self.data.result -= 1 # Уменьшение счетчика
 y *= 2 # Умножайте y на 2, пока y >= 1
 else:  # Для x >= 1
 y = x
 while y >= 2:
 self.data.result += 1 # Увеличение счетчика
             y /= 2 # Разделите y на 2


if "templates" not in __name__:

   @sp.add_test(name="Calculator")
 def test():
 c1 = main.Calculator()
 scenario = sp.test_scenario(main)
        scenario.h1("Калькулятор")
        scenario += c1
 c1.multiply(x=2, y=5)
 c1.add(x=2, y=5)
 c1.add(x=2, y=5)
 c1.square(12)
 c1.squareRoot(0)
 c1.squareRoot(1234)
 c1.factorial(100)
 c1.log2(c1.data.result)
        scenario.verify(c1.data.result == 524)

Давайте введем этот контракт в действие!

Шаг 1: Вставьте код контракта в SmartPy IDE.

Шаг 2: Нажмите на кнопку Run (Выполнить ) в правом верхнем углу, чтобы скомпилировать и смоделировать контракт.

Шаг 3: Наблюдайте за результатами моделирования в правой части IDE. Вы можете видеть состояние контрактного хранилища после каждой операции, такой как умножение, сложение, квадратный корень и т.д.

Шаг 4: Не стесняйтесь изменять параметры операций и наблюдайте за изменениями в хранении контрактов!

Теперь Вы создали и взаимодействовали со смарт-контрактом, который выполняет базовые операции с калькулятором! В следующем уроке мы рассмотрим более продвинутые концепции, такие как создание контрактов FIFO. Не забывайте продолжать исследовать, и удачного кодирования!

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.