Bài học 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. Не забувайте продовжувати досліджувати та щасливого кодування!

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.
Danh mục
Bài học 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. Не забувайте продовжувати досліджувати та щасливого кодування!

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.