Пошаговое руководство по началу работы
Каждый компьютерный язык, написанный на сегодняшний день, имеет общий набор логических конструкций. Какими бы разными они ни были, все они позволяют программистам создавать условные выражения и циклы для выполнения действий на основе некоторой оценки.
В этой третьей части нашей серии статей о программировании смарт-контрактов на блокчейне на Python будет показано, как использовать условные выражения и циклы на языке SmartPy.
Начнем с открытия онлайн-редактора SmartPy, указав в нашем браузере https://smartpy.io/demo
Затем скопируйте и вставьте приведенный ниже код (из нашей последней статьи) на экран редактора:
# Imports the SmartPy library. import smartpy as sp # Defines the class MyClass and its constructor. class MyClass(sp.Contract): def __init__(self): self.init(result = 0) # Defines the Smart Contract entry point. @sp.entryPoint def myEntryPoint(self, params): self.data.result = params.op1 + params.op2 # Creates the "test" to simulate the Smart Contract call. @addTest(name = "myFirstSmartContractTest") def mySmartContractTest(): # Creates a string variable to build the output. html = "" # Instantiates an object of class "MyClass". mySmartContract = MyClass() # Calls the "myEntryPoint" method passing parameters. html += mySmartContract.myEntryPoint(op1 = 1, op2 = 2).html() # Outputs the result to screen. setOutput(html)
Прежде чем мы начнем, нажмите кнопку «Оценить сценарий и запустить тесты», чтобы проверить, все ли работает нормально.
Ok. Теперь предположим (для дидатических целей), что мы должны добавить правило в наш скрипт суммирования. Учтите, что мы не можем позволить пользователю передавать ноль в качестве значения параметра нашему смарт-контракту. Поэтому нам нужно будет добавить в наш код условие. На большинстве компьютерных языков это можно сделать, добавив оператор «ЕСЛИ». В SmartPy все не иначе:
sp.if (params.op1 == 0): self.data.result = -1 sp.else: self.data.result = params.op1 + params.op2
Приведенный выше фрагмент кода просто проверяет, равен ли первый переданный параметр (op1) нулю. Если это правда, сценарий помещает -1 в переменную результата хранения контракта и не будет выполнять операцию суммы (поскольку она находится внутри оператора «else»). Скопируйте и вставьте код сразу после определения «myEntryPoint». Обратите внимание на отступ (должен быть 4 символа или TAB). Измените первый переданный параметр в вызове для «myEntryPoint» на 0. Запустите контракт, щелкнув «Оценить сценарий и запустить тесты». У вас должен получиться такой результат:
Теперь верните переданный параметр обратно на 1. Выполнить снова. Вы увидите, что теперь сумма была сделана, потому что код внутри оператора «else» был выполнен.
Другой способ проверки условий - использование оператора «verify»:
sp.verify(params.op1 != 0) self.data.result = params.op1 + params.op2
Здесь два отличия. Во-первых, обратите внимание, что теперь вы проверяете условие, которому хотите соответствовать (op1 отличен от нуля). Во-вторых (и это наиболее важно), этот оператор «verify» остановит выполнение скрипта и выйдет с «исключением» (ошибкой). Скопируйте и вставьте приведенный выше код в редактор (заменив структуру sp.if-sp.else). Затем измените параметр op1 на 0. Запустите сценарий. Посмотрите, что вы получите:
ПЕТЛИ
В компьютерном программировании циклы - это повторение выполнения кода определенное количество раз или при известном условии. Предположим, мы хотим выполнить 5-кратную операцию суммирования. Мы должны использовать условный цикл, обычно известный как «for-next» или «do-while». В SmartPy мы делаем это так:
sp.for i in sp.range(0, 5): self.data.result += params.op1 + params.op2
Поместите приведенный выше код в свой редактор и запустите свой скрипт. Используя op1 = 1 и op2 = 2, вы должны получить в результате «15» (сумма будет 1 + 2 = 3, а затем накопить результат 5 раз = 15):
Другой способ перебрать условие - использовать конструкцию «whileBlock»:
@sp.entryPoint def myEntryPoint(self, params): self.data.i = 0 with sp.whileBlock(self.data.i <= 30): self.data.i += params.op1 + params.op2
Это будет зацикливать операцию суммирования до тех пор, пока наша переменная «i» не будет иметь значение выше 30:
На сегодня все! Поэкспериментируйте с различными типами условных выражений, показанными здесь. Помните, что практика ведет к совершенству. Цель этих крошечных уроков - познакомить вас с IDE SmartPy и синтаксисом команд, чтобы в будущем мы могли делать более сложные вещи. Я также рекомендую просмотреть шаблоны, которые поставляются с онлайн-редактором, так как это хороший способ заранее открывать для себя что-то новое.
Увидимся в Части 4!
Пропустили Часть 2? Прочтите здесь: https://medium.com/@lmilfont/how-to-write-smart-contracts-for-blockchain-using-python-part-2-99fc0cd43c37