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

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.
Catálogo
Lição 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. Не забывайте продолжать исследовать, и удачного кодирования!

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.