迈克尔逊干涉仪仿真程序

我们将使用用户传入的参数在Michelson中编写一个新的智能合约,在将新字符串保存到存储中之前,我们将其连接到存储中已经存在的字符串。

(第1部分 在这里 。)

在上一篇文章中介绍了迈克尔逊的基础知识之后,我们将继续对这种编程语言的探索。

在这个新的部分中,我们将介绍一个很棒的工具,它将帮助我们编写,调试和检查我们的迈克尔逊代码:由Baking Bad团队开发的带有迈克尔逊内核的Jupyter笔记本 。

我们将使用用户传入的参数在Michelson中编写一个新的智能合约,在将新字符串保存到存储中之前,我们将其连接到存储中已经存在的字符串。

强烈建议先阅读第1部分 ,因为它介绍了我们将在此处使用的Michelson中有关智能合约的概念。

但是首先,让我们看一下可能最好的编码工具:Michelson!

Baking Bad的Jupyter笔记本

Baking Bad开发了一个在线Michelson编译器,它不仅可以编译您的Michelson代码。

它提供语法高亮显示,调试和堆栈的逐步可视化。 您可以使用此链接打开我们将用于本课程的笔记本(请记住,内核需要一两分钟才能加载),然后再选择MichelsonTutorial-Demo3.ipynb文件。

该文件分为两部分:

内联代码

在第一部分中,整个智能合约都放入一个单元格中。 您可以通过在以下单元格中写入RUN %default parameter storage来编译和运行它。

运行智能合约后,有每个步骤的详细说明以及每个指令对堆栈所做的修改(在图片的In [10] )。 在运行时结束时(如图中的Out [10] ),您将得到新的存储。

分步代码

该编译器的亮点在于,您可以输入说明一步一步地修改堆栈,并在每个步骤之后检查其效果。

与每个迈克尔逊智能合约一样,您首先要指定参数和存储。 然后,键入BEGIN parameter storage以开始执行。

完成此配置步骤后,您可以一个一个地输入说明,并通过按CMD/CTRL + SHIFT来查看说明如何修改堆栈。 在Out [...]单元格中,当前值显示在堆栈顶部。

注意:您可以在分步代码中看到DUMP指令。 这不是 Michelson,这只是Jupyter笔记本中用于打印堆栈当前状态的指令。

当您想结束智能合约的执行时,请输入COMMIT ,如果代码没有错误,它将返回新的存储。 如果执行的任何步骤都有一个,您将看到一条消息,并能够立即对其进行修复,而不必逐行查看代码。

迈克尔逊智能合约中的参数处理

在上一课中,我们介绍了一些指令,这些指令可以操纵堆栈中已经存在的数据,也可以推入自己的位置。 但是如何处理用户的输入呢? 这实际上很容易!

我们将使用上面介绍的Jupyter笔记本中存在的合同。 欢迎您继续阅读笔记本并逐一运行说明,以更好地了解每条说明后的堆栈外观。 这是完整的智能合约:

如果您还记得的话,调用合同时,包含参数和存储空间的一对将自动推入堆栈的顶部。 然后,我们可以获取该对的左侧部分(参数)并使用它。 运作方式如下。

首先,让我们初始化堆栈:

在这一步中,我们得到含类型的参数一对新的堆栈stringworld )和类型的存储string ,太( Hello )。 我们的最终目标是连接这两个字符串并返回它们。

在下一步中,我们复制堆栈的顶部元素,因为我们需要将参数和存储空间放在堆栈的两个单独的元素中,以便能够将它们放在一个字符串中。

迈克尔逊(Michaelson)没有变量,并且天生就不可变。 可以使用不同的方法来创建堆栈的新元素,例如,通过推入它们(使用PUSH指令)或复制它们(使用DUP指令)。 请记住,在执行的每个步骤中,您都在处理堆栈的顶部元素。 这是您唯一可以使用的工具。

让我们从堆栈的第一个元素开始,让我们从该对中获取参数。 我们使用CAR指令,其目的是破坏类型pair的元素并返回该pair的左侧(在这种情况下,该参数传递给智能合约)。 运行CAR ,我们将字符串world放在栈顶。

现在您可能想知道:如果Michelson仅处理第一个元素,我该如何处理堆栈的第二个元素? 非常简单! 使用SWAP指令将第二个元素放在顶部,并保留另一个元素供以后使用。

使用SWAP指令时,您告诉Michelson:“目前我不需要第一个元素,但是我想处理第二个元素。” 迈克尔逊会将第一个元素降低到第二个位置,将第二个元素降低到第一个位置。

现在,我们在开始处复制的第二对在顶部,我们可以使用反向CAR通过CDR指令获得该对的正确部分。

CDR指令的工作方式类似于CAR指令,但是您将保留所操作对的右侧(一对始终仅包含两个元素,因此CDRCAR是唯一可能的操作)。 之后,您可以看到我们的堆栈由两个元素组成:第一个位置为字符串Hello ,第二个位置为字符串world

现在让我们把它们放在一起!

在计算机编程中,将两个字符串放在一起的操作称为串联 在迈克尔逊中将两个字符串放在一起的指令被称为CONCAT是合乎逻辑的。 该操作采用当前位于堆栈顶部的两个字符串,并返回单个字符串。 为了使操作成功,必须满足两个条件:

  1. 您确实在堆栈的顶部有两个元素(如果仅剩一个元素,它将产生一个错误)。 如果存在更多元素,则只会处理顶部的两个元素。
  2. 堆栈顶部的两个元素是字符串(Michelson是严格键入的,它知道堆栈中具有什么样的值,因此,甚至不要试图愚弄它)

现在,如果您还记得我们在第1部分中讨论的内容,那么您将知道会发生什么。 我们必须创建一个带有列表和新存储的配对,以终止智能合约的执行(这就像在Michelson中说再见)。

首先,让我们在堆栈顶部推送一个空列表:

一旦存在空列表,我们就可以使用空列表和字符串创建一个对:

再次提醒您,要警惕元素的顺序及其类型:Michelson将把第一个元素放在对的左侧,将第二个元素放在对的右侧。 返回一对类型(对字符串列表(操作))将产生错误。

现在我们的堆栈是干净的,并包含一对带有操作列表和字符串的对,智能合约的执行结束。

您可以在下面的视频中看到堆栈的完整执行和转换:

结论

在面向初学者的迈克尔逊教程的这一新部分中,我们介绍了带有迈克尔逊内核的Jupyter笔记本,我们将在本教程的以下部分中大量使用它来编写,调试和执行代码。

引入了迈克尔逊(Michelson)中的新操作代码: CAR ,提取一对货币对的左侧部分; DUP ,它复制堆栈的顶部元素; CDR ,提取一对的正确部分; SWAP ,交换两个元素在堆栈顶部的位置; 和CONCAT ,它接受两个字符串,并返回由前面两个字符串组成的单个字符串。

还添加了表示堆栈中操作的动画,以帮助您更好地可视化并跟踪每个步骤发生的情况。 当堆栈中的操作变得更加复杂和复杂时,这将变得更加有用。

敬请关注!

(以前在付费专栏后面发布过:https://medium.com/better-programming/an-introduction-to-michelson-the-scripting-language-of-tezos-part-2-4cc972c8237c)

翻译自: https://hackernoon.com/using-the-michelson-programming-language-to-write-smart-contracts-on-tezos-a-how-to-guide-part-2-gq233y8e

迈克尔逊干涉仪仿真程序

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

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

    迈克尔逊干涉仪仿真程序 这是(第1部分):迈克尔逊入门:Tezos的脚本语言 迈克尔逊必须是目前智能合约中最令人兴奋的编程语言之一. 这是一种基于堆栈的严格类型化语言,其中编写了智能合约以确保Tezo ...

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

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

  3. 亚马逊笔试题目_亚马逊在线笔试题目

    亚马逊在线笔试题目 Question 2 / 2 Question: As you know, two operations of Stack are push and pop. Now give y ...

  4. 亚马逊笔试题目_亚马逊笔试题目

    亚马逊笔试题目 总共两道编程题,全英文描述,时间为两个小时(可以用任何一种语言实现) 第一题:对于一个给定的物品名称X以及顾客的购物清单数组,找出所有购买过X的客户中所买的其他的最多的商品种类.如已知 ...

  5. 亚马逊笔试题目_亚马逊运营试题,你知道多少?

    你觉得亚马逊运营经理的主要工作是什么? 如果有曝光率,有点击率,但是转化率很低有可能是什么原因? 写出你的产品成本&利润计算公式? 如果FBA绩效评分低于350 你会如何处理? 如何防止VC跟 ...

  6. python亚马逊销量预测_亚马逊卖家如何预测一款产品的销量?

    在亚马逊选品过程中,通过对销量的评估来为自己选品与否做决策辅助是非常有必要的手段,可是我们该怎样去判断一个产品的销量呢? 一般来说,可以通过以下四方面的结合: 一.添加购物车 把自己做参考的Listi ...

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

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

  8. 电报注册网络代理_如何在电报开放网络(TON)中开发和发布智能合约

    电报注册网络代理 这篇文章是关于什么的? (What is this article about?) In this article, I will tell about my participati ...

  9. (等倾、等厚干涉)MATLAB在迈克尔逊干涉仪中的应用

    理论回顾: 迈克尔逊干涉仪,是1881年美国物理学家迈克尔逊和莫雷合作,为研究"以太"漂移而设计制造出来的精密光学仪器.它是利用分振幅法产生双光束以实现干涉.通过调整该干涉仪,可以 ...

最新文章

  1. Arm Cortex-M4 MCU性能
  2. 数据齿轮(DataGear)数据库管理系统 v1.1.1 发布
  3. javascript RegExp
  4. Python + 爬虫:可视化大屏帮你选粽子
  5. 《高效程序员的45个习惯》读后感
  6. 2019杭电暑假多校训练 第六场 Snowy Smile HDU - 6638
  7. Oracle 12c 安装(内附软件包)
  8. 5年程序员生涯,使用的最频繁的Git 命令总结
  9. 8次c语言上机作业答案,计算机二级C语言上机题库及答案2017
  10. installshield 指定多个自定义路径和文件
  11. 展开收起功能实现_小房间不一定要拥挤,这样设计实现小户型的大气!
  12. 矩阵连乘 动态规划_利用动态规划解LeetCode第62题:不同路径
  13. matlab保存数据用什么指令_Matlab数据处理——数据的保存和读取方法操作
  14. python 日志输出变量_Python日志输出
  15. Linux下多线程调试以及查看信息
  16. c语言设计 教师信息管理系统 含源码及说明
  17. 杰理AC692X系列---关于692x及693x的打开在线调EQ功能(4)
  18. 深度学习——如何去除警告
  19. rpm 如何安装mysql_如何使用rpm安装MySQL
  20. HTML5 音频文件

热门文章

  1. PCB UL阻燃等级标准
  2. M1 MacBook 安装CentOS虚拟机/Linux
  3. 未来制造业的厂内智能物流是这样吗?
  4. 怎么在html中加代码,如何在HTML中使用代码块
  5. html怎么插入avi视频,视频剪辑很简单,送你88集PR影视后期全能剪辑教程:从入门到高级...
  6. Openssl生成自签名证书并导入浏览器脚本
  7. 【Unity】AssetBundle简单的加密解密
  8. 软件测试案例实践:银行如何做大规模自动化测试?
  9. kafka partition(分区)与 group
  10. javaWeb项目之Servlet学习笔记----ServletContext的读取方法