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