BTCV高分资讯 > 数字货币 > Tezos开发必须阅读:教你如何使用Michelson编写智能

Tezos开发必须阅读:教你如何使用Michelson编写智能

作者:高分资讯来源:高分资讯 数字货币 2020年07月26日

了解迈克尔逊(Tezos的脚本语言)的工作原理,并学习编写一些简单的智能合同。

原标题:《手把手教你使用 Michelson 编写智能合约》

作者:克劳德巴德

翻译:天堂奖励勤奋

迈克尔逊简介:迈克尔逊,Tezos的脚本语言,绝对是目前智能合同中最令人兴奋的编程语言之一。这是一种基于堆栈的严格类型语言,编写智能契约可以确保区块链的安全。迈克尔逊可与以太网智能契约的字节码相比,但它更可读、更安全、更强大。所有高级语言——,如SmartPy、Ligo或Lorentz——,都被用来为Tezos编写智能合同,最终可以编译成迈克尔逊语言。

在第一篇文章中,我们将尝试使用迈克尔逊语言来理解“基于堆栈”的含义,并编写一些非常简单的智能契约。这篇文章主要是为编程或Tezos开发的初学者写的,但是想了解更多关于Michelson的中级程序员也可以在这里找到有用的信息。我们将使用烘焙公司开发的Jupyter内核在Jupyter笔记本中编写迈克尔逊代码。如果你想知道代码是如何工作的,你可以在每个部分找到一个链接。

让我们写一些代码。

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

堆栈要理解迈克尔逊是如何工作的,堆栈是需要正确理解的主要概念之一。每份迈克尔逊合同都是一份相互遵循的指令清单。这些指令按照确切的顺序排列,并按照书写的顺序执行。

每条指令都以某种方式操纵堆栈。把它想象成一堆数据。您编写的指令将影响堆中的数据。例如,您可以在堆上添加两条数据,删除最上面的一条数据,将另一条数据放在最上面,传输一些令牌,等等。堆栈以先进先出的方式工作:如果您想访问不在堆栈顶部的数据,您必须首先处理其上的数据。

使用迈克尔逊编码时,您必须记住三个主要概念:

新数据被放在堆栈的顶部。只有当数据位于堆栈顶部时(或者在某些操作中位于第二个位置,如下所述),才能访问堆栈中的数据。数据处理的顺序是从堆栈的顶部到底部。让我们看一个例子。

如果你想在栈顶添加一段数据,你可以调用推送操作。它是这样工作的:

在这一点上,应该注意到堆栈中可能已经有数据,在这种情况下,新值将被放在它们的上面。这就是你如何在迈克尔逊推出新数据:

推送值类型值

例如,如果你想推一个整数,你将写push int 2,对于一个字符串,你将写PUSH字符串“tezos”。

迈克尔逊智能合同结构迈克尔逊的智能合同显示了一个由三部分组成的简单结构:

预期参数的类型。存储的类型。迈克尔逊密码。转换为如下代码:

参数参数类型;

存储存储型;

代码{

.

{}

除了这种结构,在用迈克尔逊语言编写智能合同时,你还必须记住两条规则:

1.执行代码时,自动将包含参数和内存的对推入堆栈。应该记住,如果——没有参数,它将被单位代替。

2.代码必须始终返回一对,其中包含操作列表和(更新的)存储(列表的存储(操作))。当堆栈中只剩下这样的对时,执行停止。

一个简单的迈克尔逊智能合同既然我们已经理解了PUSH和迈克尔逊智能合同的结构,让我们写一个。

对于此合同,我们将编写一个“Hello world”合同,并将一个字符串保存到存储中:

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

1.参数单位表示传递的参数属于单位类型(基本上没有参数)。

2.存储字符串表示合同的存储类型是字符串。

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

4.PUSH将一个值放在堆栈的顶部,这里是字符串“Hello world”。

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

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

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

添加整数并保存结果让我们介绍一个新的操作:添加。你可能已经猜到了它的作用。——增加了两个值。

下面是一个简单的合同,演示了它是如何工作的:

让我们看看每个操作,看看堆栈中发生了什么:

参数单位:同样,我们没有使用任何参数,所以我们传递了一个单位。

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

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

PUSH int 2;PUSH int 3;在这里我们需要注意这个顺序,这是非常重要的。当int 3被按下时,int 2将位于堆栈的底部。在加法的情况下,顺序不是很重要,但是如果你想做减法,你必须按正确的顺序推进它们。

加法和结对有相同的原理。你取栈顶的前两个元素,从中获取一个值,然后把它推回到栈中。加法将两个数字相加。应该注意的是,这些数字必须都是相同的数字类型(例如,不能将整数和nat加在一起)。

和以前的合同一样,我们推出了一个空的操作列表。

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

结论迈克尔逊语言的复杂性经常被高估。这可能是因为目前还没有适合初学者的教程,而且网上提供的文档技术性很强,初学者很难阅读。这就是为什么我决定自己完成学习迈克尔逊的过程,用困难的文档创建一系列教程。我希望这些教程更容易理解和使用。

要理解和欣赏特佐斯区块链的独特性,使其更安全、更有用,关键是要理解迈克尔逊。

在下一节中,我们将继续深入研究迈克尔逊。我们将编写一些简单的智能合同,并探索由烘焙坏团队创建的令人惊叹的Jupyter笔记本,它使我们能够编写迈克尔逊代码,并准确地知道正在发生什么。

来源链接:mp.weixin.qq.com

标签: 比特币金库