如何使用Python为区块链编写智能合约-第三部分

迄今为止编写的每种计算机语言都具有一组通用的逻辑结构。 尽管它们可能彼此不同,但它们都将允许程序员创建条件表达式和循环,以基于某些评估执行操作。

关于Python中的区块链智能合约编程的系列文章的第三部分将展示如何在SmartPy语言中使用条件表达式和循环。

首先,通过将浏览器指向https://smartpy.io/demo打开SmartPy 在线编辑器

然后将下面的代码(从上一篇文章中)复制并粘贴到编辑器屏幕中:

# 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)

在开始之前,请单击“Evaluate script & run tests”按钮,以检查一切是否正常。

好。 现在假设(出于教义的目的)我们必须在求和脚本中添加一条规则。考虑到我们不能允许用户将零作为参数值传递给我们的智能合约。因此我们将不得不在代码中添加一个条件。在大多数计算机语言中,这可以通过添加“ IF”语句来完成。在SmartPy中没有什么不同:

sp.if (params.op1 == 0):


        self.data.result = -1


    sp.else:


        self.data.result = params.op1 + params.op2

上面的代码只是测试第一个传递的参数(op1)是否等于零。如果为真,则脚本会将-1放入智能合约的存储结果变量中,并且将不会执行sum操作(因为它位于“ else”语句中)。 在定义“ myEntryPoint”之后立即复制并粘贴代码。 注意缩进(必须为4个字符或TAB)。将调用“ myEntryPoint”中的第一个传递的参数更改为0。单击“Evaluate script & run tests”来运行智能合约。您应该得到如下结果:

如何使用Python为区块链编写智能合约-第三部分

现在将传递的参数改回1。再次运行。您将看到现在已经完成了总和,因为执行了“ else”语句中的代码。

检查条件的另一种方法是使用“verify”语句:

sp.verify(params.op1 != 0)
self.data.result = params.op1 + params.op2

这里有两个区别。首先请注意,现在您要检查要匹配的条件(op1不同于零)。 第二点(也是最重要的一点)是,此“verify”语句将使脚本执行因“异常”(错误)而停止。 将上面的代码复制并粘贴到编辑器中(替换sp.if-sp.else结构)。 然后,将op1参数更改为0。运行脚本。看看你得到什么:


如何使用Python为区块链编写智能合约-第三部分

在计算机编程中,循环是在一定次数或已知条件下重复执行代码。 假设我们要执行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):


如何使用Python为区块链编写智能合约-第三部分

循环条件的另一种方法是使用“ 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:


如何使用Python为区块链编写智能合约-第三部分

对此处显示的不同类型的条件表达式进行自己的实验。请记住,实践是完美的。这些小课程的目的是使您更加熟悉SmartPy IDE和命令语法,因此我们将来可以做更多高级的事情。我还建议您仔细阅读在线编辑器随附的模板,因为这是一种提前发现新事物的好方法。

关键词: Python  智能合约  区块链  

该内容来自于互联网公开内容,非区块链原创内容,如若转载,请注明出处:https://htzkw.com/archives/28159

联系我们

aliyinhang@gmail.com