迈克尔逊干涉仪仿真程序

这是(第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

迈克尔逊干涉仪仿真程序

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

  1. 迈克尔逊干涉仪仿真程序_使用迈克尔逊编程语言在Tezos上编写智能合约[操作指南]-第2部分...

    迈克尔逊干涉仪仿真程序 我们将使用用户传入的参数在Michelson中编写一个新的智能合约,在将新字符串保存到存储中之前,我们将其连接到存储中已经存在的字符串. (第1部分 在这里 .) 在上一篇文章 ...

  2. 迈克尔逊干涉仪仿真程序_迈克尔逊入门:Tezos的脚本语言(第3部分)

    迈克尔逊干涉仪仿真程序 (Please check first Part 1 and Part 2) (请先检查 第1 部分 和 第2部分 ) In this new installment of o ...

  3. zemax迈克尔逊干涉仪_Zemax光学设计实例---迈克耳逊干涉仪的仿真

    本文转自公众号:小小光 导论:在序列模式下,对迈克尔逊干涉仪进行仿真,并分析干涉图样. ZEMAX仿真: (1)    建立一个Paraxial XY的理想光学成像系统 首先在孔径类型中选择Entra ...

  4. vscode 智能打印_使用 Hyperledger Caliper 对 VS Code 中开发的智能合约进行性能测试...

    IBM Blockchain Platform Extension for VS Code 可帮助开发者创建.测试和调试智能合约.但对于开发人员来说,还有一个关键问题:开发的智能合约的性能如何? Hy ...

  5. 亚马逊kindle设置_在亚马逊Kindle上追逐活跃的社会工程欺诈

    亚马逊kindle设置 TL;DR: I've just spent several hours chasing a socially engineered (not password comprom ...

  6. python亚马逊运营工具_使用亚马逊云服务必备的八款SaaS工具

    原标题:使用亚马逊云服务必备的八款SaaS工具 这些年做项目的过程中收集了相当多的工具和服务来简化开发者.系统管理员以及DevOps的日常工作. 基本上所有的PHP.Python或者Ruby开发者都与 ...

  7. 亚马逊kindle设置_使用亚马逊Kindle(和新的Kindle保护套)的一年

    亚马逊kindle设置 It's been almost a year (well, 11 months) with my Amazon Kindle. I still use it every da ...

  8. 亚马逊笔试题目_一道亚马逊的在线笔试题

    来园子快一年了,从来都是只看看,不说话.一来觉得自己技术太弱,说出来误导别人:二来自己文笔太差,写出来不通就贻笑大方了. 之前看到园子有人发了一道面试题,觉得蛮有意思的,鼓起勇气写一篇,让大神们扶正一 ...

  9. java 创建以太坊代币_以太坊 (五)编写智能合约-建立简易加密代币

    本篇文章,我们将写一个简易的加密代币的智能合约来给大家诠释加密代币的原理 启动 ganache-cli 打开终端,启动ganache-cli,相关环境在区块链学习日记(四)这篇文章里面已经有具体说明. ...

最新文章

  1. Angular应用input和div标签页的动态创建场景
  2. catia直线测距怎么调出来_CATIA怎么测量两线夹角.
  3. oracle中synonym是什么,请问一下在racle里synonym的作用是什么?
  4. python+PIL+pytesser处理验证码环境搭建
  5. 利用scrapy框架爬取动态加载的数据
  6. ffmpeg图片缩放
  7. vs2012+wdk8.0 搭建wdf驱动开发环境
  8. 东软实训2-在jsp中使用javaBean
  9. 使用 Commander 写自己的 Nodejs 命令
  10. Windows下Apache架站务实
  11. Git命令之查看及设置用户名邮箱
  12. 【Excel】取消隐藏没反应
  13. 307条互联网交流缩略语(English Abbreviations on Internet)
  14. Astalavista被蹂躏过程 转载自baoz net
  15. 脸上为什么会长黄褐斑?
  16. 飞秋怎么搜索指定ip好友_飞秋怎么加好友
  17. 群晖NAS中对Gitlab配置邮箱发送消息_以163邮箱为例
  18. Python format 格式化输入字符对不齐解决
  19. PD3.0 PPS限流
  20. 关于员工激励的思考-期望理论

热门文章

  1. 服务器微信接口返回乱码,企业微信会话内容存档调用DecryptData返回中文出现乱码...
  2. 北航研究生课程经济学思想知识点
  3. 一款可以治疗预防抑郁症的智能心灵创贴
  4. Fedora 10下制作U盘启动盘(165.7MB)
  5. Android MediaRecorder 后台视屏录制
  6. 汉字计算机输入的优越性论文,议论文阅读训练中国第五大发明汉字附答案作文...
  7. 给大家推荐几款小型的Linux发行版
  8. 智能手环一些模块总结
  9. 【JAVA应届生如何提高职场竞争力】从蓝海走向红海的IT世界,新人如何掌握IT技能和找到合适的工作
  10. 双极型晶体管(BJT)学习总结