Lesson 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. Не забывайте продолжать исследовать, и удачного кодирования!

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.
Catalog
Lesson 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. Не забывайте продолжать исследовать, и удачного кодирования!

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.