迈克尔逊干涉仪仿真程序_如何使用迈克尔逊编程语言在Tezos上编写智能合约

迈克尔逊干涉仪仿真程序

这是(第1部分):迈克尔逊入门:Tezos的脚本语言

迈克尔逊必须是目前智能合约中最令人兴奋的编程语言之一。 这是一种基于堆栈的严格类型化语言,其中编写了智能合约以确保Tezos区块链的安全。 迈克尔逊可与以太坊智能合约的字节码相提并论,但它更具可读性,更安全且更强大。 您可以用来为Tezos编写智能合约的所有高级语言(例如SmartPy,Ligo或Lorentz)最终都可以编译成Michelson。

在第一篇文章中,我们将全神贯注于迈克尔逊语言,了解“基于堆栈”的含义,并编写一些非常简单的智能合约。 本文主要是为编程和/或Tezos开发的初学者撰写的,但是想要进一步了解Michelson的中级程序员也可以在此处找到有用的信息。 我们将使用Baking Bad开发Jupyter内核在Jupyter笔记本中编写Michelson代码。 如果您想查看工作中的代码,可以在每个部分中找到一个链接。

让我们写一些代码!

堆栈

要了解迈克尔逊的工作原理,可以正确理解的主要概念之一就是堆栈 。 每个迈克尔逊合同都是相互遵循的说明列表。 这些指令以精确的顺​​序执行,并按照其写入顺序执行。

每条指令都会以某种方式操纵堆栈。 可以将其想象成一堆数据。 您编写的指令将对堆中存在的数据产生影响。 例如,您可以将两个数据加到堆的顶部,将一个数据移到顶部,将另一块数据放在顶部,转移一些令牌,等等。堆栈以后进先出的方式工作:如果要访问不在堆栈顶部的数据,则必须先处理其上方的数据。

使用Michelson进行编码时,您必须记住三个主要概念:

  • 新数据位于堆栈顶部。
  • 仅当堆栈中的数据位于堆栈顶部(或某些操作的第二位置,如下所述)时,才可以访问堆栈中的数据。
  • 数据的处理顺序从堆栈的顶部到底部。

让我们来看一个例子。

PUSH操作

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

请注意,堆栈中可能已经有数据,在这种情况下,新值将放在它们之上。 这是您在Michelson中推送新数据的方式:

PUSH value-type value

例如,如果要推送整数,则将写入PUSH int 2 ,对于字符串,将写入PUSH string "Tezos"

迈克尔逊智能合约结构

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

  • 预期参数的类型。
  • 存储的类型。
  • 迈克尔逊代码。

这将转换为以下代码:

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

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

  1. 执行代码时,包含参数和存储器(pair parameter storage)总是自动推入堆栈。 请记住-如果没有参数,则使用Unit代替。
  2. 代码必须始终返回包含操作列表和(更新的)存储(pair list(operation) storage) 。 当此类对是堆栈中剩余的最后一件事时,执行将停止。

一个简单的迈克尔逊智能合约

既然我们已经了解了PUSH和Michelson中智能合约的结构,那么让我们来写一个!

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

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

  1. parameter unit表示所传递的参数属于unit类型(基本上,没有参数)。
  2. storage string表示合同的存储类型为string
  3. DROP是一种操作代码,可删除堆栈顶部的所有内容。 记住,我们之前说过,带有参数和存储空间的对在开始时会自动包含在堆栈的顶部,我们不会使用它,我们可以将其删除。
  4. PUSH将一个值带到栈顶,这里是字符串“ Hello world”。
  5. NIL是一种操作码,可在堆栈顶部添加指定类型的空列表(此处为operation )。
  6. PAIR将两个元素放在堆栈顶部,创建一个包含这两个元素的新对,然后将其推回堆栈中。

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

添加整数并保存结果

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

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

让我们通过每个操作来了解堆栈中正在发生的事情:

parameter unit :再次,我们没有使用任何参数,因此我们传递了一个单位。

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

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

PUSH int 2 ; PUSH int 3 ; :请注意,顺序至关重要。 按下int 3 int 2将位于堆栈的底部。 对于加法,顺序没有太大关系,但是,例如,如果您减去两个数字,则必须按正确的顺序推入它们。

ADD工作原理与PAIR相同。 您将前两个元素放在堆栈顶部,并从中获得一个值,然后将其推回堆栈。 ADD将两个数字加在一起。 请注意,数字必须都是相同的数字类型(例如,您不能将整数和nat加在一起)。

NIL :与上一个合同一样,我们将空操作列表推送到。

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

结论

迈克尔逊语言的复杂性经常被高估。 这可能是由于这样的事实,即那里没有适合初学者的教程,并且在线提供的稀有文档非常技术性强,对于新手来说很难阅读。 这就是为什么我决定亲自学习迈克尔逊的过程,使用困难的文档来创建一系列教程,希望它们可以更容易地使用。

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

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

敬请关注!

翻译自: https://hackernoon.com/how-to-use-the-michelson-programming-language-to-write-smart-contracts-on-tezoss-y78f30e4

迈克尔逊干涉仪仿真程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值