织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 竞争币 > 以太坊

Tezos 开发必读:手把手教你使用 Michelson 编写智能合约 (2)

时间:2020-07-25 16:24来源:未知 作者:admin 点击:
Michelson 中的智能合约展现了一个由三部分组成的简单结构: 预期参数的类型。 存储的类型。 Michelson 代码。 转换成代码表示如下: parameter parameter-type

Michelson 中的智能合约展现了一个由三部分组成的简单结构:

  • 预期参数的类型。
  • 存储的类型。
  • Michelson 代码。

转换成代码表示如下:

parameter parameter-type ; storage storage-type ; code { ... }

除此结构外,在 Michelson 中编写智能合约时,你还必须牢记两条规则:

1、在执行代码时,自动将包含参数和存储器的对推入堆栈中。需要记住的是——如果没有参数,就用单位代替。

2、代码必须始终返回一对,它包含操作列表和(更新的)存储(对列表(操作)存储)。当堆栈中只剩下此类对时,执行就会停止。

一个简单的 Michelso 智能合约

现在我们已经了解了 PUSH 以及 Michelson 中智能合约的结构,让我们来写一个。

对于这个合约,我们将写一个「 Hello world」合约,并将一个字符串保存到存储中:

执行这段代码后,会发生以下情况:

1、参数 unit 表示所传递的参数为 unit 类型(基本上是无参数)。

2、storage string 表示合同的存储类型为 string。

3、DROP 是一种操作代码,用于删除堆栈顶部的任何内容。我们之前说过,一个带有参数和存储空间的对在开始时会自动包含在栈顶,我们不打算使用它,可以将其删除。

4、PUSH 将一个值放到栈顶,这里是字符串「 Hello world」。

5、NIL 是一种操作码,它将指定类型的空列表 (此处操作) 添加到堆栈的顶部。

6、PAIR 将两个元素放在堆栈顶部,创建一个包含这两个元素的新对,然后将其推回堆栈中。

注意:每条指令都以分号结尾(最后一条指令是可选的)。

添加整数并保存结果

让我们介绍一个新操作:ADD。你可能已经猜到了它的作用——将两个数值相加。

这有一个简单的合约,演示了它是如何工作的:

让我们看一下每个操作,了解堆栈内部发生了什么:

参数 unit:同样,我们没有使用任何参数,因此我们传递一个单位。

storage int:这一次,我们将整数类型的值保存到存储器中。

DROP:我们不需要初始对,所以我们可以删除它,为我们实际需要的值腾出空间。

PUSH int 2; PUSH int 3;:这里需要注意一下这个顺序,它非常重要。推入 int 3 后,int 2 就会位于堆栈的底部。在加法的情况下,顺序并不太重要,但如果你要做减法,必须将它们按正确的顺序推入。

ADD 和 PAIR 的原理是一样的。你取堆栈顶部的前两个元素,并从中获得一个值,然后将其推回堆栈。ADD 将两个数字相加。需要注意的是,这些数字必须都是相同的数字类型(例如,你不能将 integer 和 nat 加在一起)。

NIL:和以前的合同一样,我们将空的操作列表推入。

PAIR:创建一个对,包含操作列表和我们需要停止执行合同的新存储。

结论

Michelson 语言的复杂性往往被高估了。这可能是由于目前没有适合初学者的教程,并且在线提供的文档技术性很强,对于新手来说也很难阅读。这就是为什么我决定亲自经历学习 Michelson 的过程,使用困难的文档来创建一系列教程,我希望这些教程更容易理解使用。

理解和欣赏 Tezos 区块链的独特性,以及使其变得更加安全和有用,关键是要理解 Michelson。

在下一部分中,我们将继续深入研究 Michelson。我们将编写一些简单的智能合约,探索由 Baking Bad 团队创建的令人惊叹的 Jupyter 笔记本,它使我们能够编写 Michelson 代码,并准确了解正在发生了什么。

 

(责任编辑:admin1)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容