第3课

Створення калькулятора смарт-контрактів

У цьому уроці ми продовжимо розширювати ваше розуміння SmartPy і того, як він взаємодіє з блокчейном Tezos, створивши базовий калькулятор. Цей контракт матиме функції додавання, віднімання, множення та ділення.

Теорія

Розумні контракти на Tezos можуть мати кілька точок входу, які можна розглядати як методи або функції в об’єктно-орієнтованому програмуванні. Кожна з цих точок входу може мати власні параметри та взаємодіяти зі сховищем контракту. У нашому контракті на калькулятор кожна математична операція буде точкою входу.

Важливо відзначити, що всі модифікації сховища записуються в блокчейн. У результаті операції, які ми виконуємо, не є тимчасовими, як це було б у звичайному калькуляторі. Натомість вони є незмінними та перевіреними операціями в блокчейні Tezos.

Крім того, варто пам’ятати, що оскільки блокчейн Tezos децентралізований, усі обчислення мають бути детермінованими. Це означає, що такі операції, як ділення, можуть працювати дещо інакше, ніж ви звикли. Наприклад, поділ у контрактах Tezos є цілим, тому 3, поділене на 2, дасть 1, а не 1,5.

Практичний

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

Python 
 імпортує smartpy як 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, "Введення має бути більше 0" 

 self.data.result = 0 # Ініціалізувати лічильник 

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


 , якщо "шаблони" не в __name__: 

 @sp.add_test(name="Calculator") 
 def test( ): 
 c1 = main.Calculator() 
 сценарій = sp.test_scenario(основний)
        scenario.h1("Калькулятор")
        сценарій += 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. Не забувайте продовжувати досліджувати та щасливого кодування!

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。
目录
第3课

Створення калькулятора смарт-контрактів

У цьому уроці ми продовжимо розширювати ваше розуміння SmartPy і того, як він взаємодіє з блокчейном Tezos, створивши базовий калькулятор. Цей контракт матиме функції додавання, віднімання, множення та ділення.

Теорія

Розумні контракти на Tezos можуть мати кілька точок входу, які можна розглядати як методи або функції в об’єктно-орієнтованому програмуванні. Кожна з цих точок входу може мати власні параметри та взаємодіяти зі сховищем контракту. У нашому контракті на калькулятор кожна математична операція буде точкою входу.

Важливо відзначити, що всі модифікації сховища записуються в блокчейн. У результаті операції, які ми виконуємо, не є тимчасовими, як це було б у звичайному калькуляторі. Натомість вони є незмінними та перевіреними операціями в блокчейні Tezos.

Крім того, варто пам’ятати, що оскільки блокчейн Tezos децентралізований, усі обчислення мають бути детермінованими. Це означає, що такі операції, як ділення, можуть працювати дещо інакше, ніж ви звикли. Наприклад, поділ у контрактах Tezos є цілим, тому 3, поділене на 2, дасть 1, а не 1,5.

Практичний

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

Python 
 імпортує smartpy як 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, "Введення має бути більше 0" 

 self.data.result = 0 # Ініціалізувати лічильник 

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


 , якщо "шаблони" не в __name__: 

 @sp.add_test(name="Calculator") 
 def test( ): 
 c1 = main.Calculator() 
 сценарій = sp.test_scenario(основний)
        scenario.h1("Калькулятор")
        сценарій += 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. Не забувайте продовжувати досліджувати та щасливого кодування!

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。