手把手教你使用Michelso编写智能合约

2020-07-24 20:50 栏目:经验之谈 来源:网络整理 查看()

迈克尔逊简介:泰索斯的脚本语言

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

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

让我们写一些代码。

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

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

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

新数据被放在堆栈的顶部。

只有当数据位于堆栈顶部时(或者在某些操作中位于第二个位置,如下所述),才能访问堆栈中的数据。

数据处理的顺序是从堆栈的顶部到底部。

让我们看一个例子。

推送操作

如果您想在堆栈顶部添加一条数据,您将调用PUSH操作。它是这样工作的:

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

推送值类型值

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

迈克尔逊智能契约结构

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

预期参数的类型。

存储的类型。

迈克尔逊密码。

转换为如下代码:

参数参数类型;

存储存储型;

代码{

.

{}

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

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

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

一份简单的米歇尔索智能合同

既然我们已经理解了PUSH和Michelson中智能契约的结构,让我们写一个。

对于此合同,我们将编写一个“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笔记本,它使我们能够编写迈克尔逊代码,并准确地知道正在发生什么。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发