热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发NEO智能合约的流程是什么

今天小编给大家分享一下开发NEO智能合约的流程是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章

今天小编给大家分享一下开发NEO智能合约的流程是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

两步流程法

传统上来说,NEO智能合约开发有两步开发流程:编码和测试。这篇官方的教程提供了关于这个工作流程的详细信息。

在编码阶段,NEO官方支持C#(示例)。我们也可以使用Java和Python开发智能合约。你可以轻松的在Google和YouTube上找到教程和示例代码页,以了解如何编写NEO智能合约。

开发NEO智能合约的流程是什么

我们依赖于测试网来进行测试工作。如上图所示,对于测试网,我们有很多选择。

公共测试网络

最常见的方法是使用公共的测试网络。NEO智能经济、CoZ和NEL分别维护了三个主要的公共测试网络。Alex Guba的教程详细阐述了如何在NEO和CoZ测试网络上进行测试之前,同步区块并申请GAS,不过NEL的测试网络对支持本地化的中国开发者更加友好。

在大多数情况下,你可以通过NEO API(完整引用)运行RPC调用来与区块链进行交互。部分APIs只有当你运行了一个具有开放钱包的NEO.CLI节点时,才可使用。但是如果NEO.Scan赋予了测试网权限,则可以在不运行节点的情况下调用类似的服务。例如,API getBalance需要一个正在运行的节点,但是你可以使用Neo-Scan提供的get_balance接口来获得类似的功能。我建立了一个Postman集合来帮助测试这些远程调用。你只需更改测试网络(或Neo-Scan)的值即可使用它。

NeoCompile Eco有一个新的特殊的公共测试网络,这激发了我们转向四步工作流程的灵感。我们将在下一节详细讨论它。

私人测试网络

另一个好的方法是建立你自己的私人测试网络。与公共测试网络相比,私人测试网络的优势在于你可以获得完全的控制权。使用私人测试网络的第一个原因是,它真的非常有用,也很鼓舞人心,因为它会让人产生钱包中持有数百万的NEO和GAS的错觉。与此同时,与公共测试网络相比,我们不需要担心链再生,连接失败,或者因为其他开发者错误导致的网络拥堵。

NEO官网提供了一个在云服务器上设置私人网络的逐步指南。不过查看了我在Azure上的账单后,我不建议你这么做,除非你不得不和其他人共享链数据。Neo-privatenet-docker非常适合在本地计算机上构建私人的测试网络,同时可以帮你节省大量配置和执行指令的时间。如果你在笔记本电脑上运行它,它还能帮助你在加拿大的冬天保持你的体温。

两步流程法的局限性

这个两步工作流程法已经成熟,并且被大多数现有的项目所采用。然而,与传统的软件项目相比,它仍有一些局限性。主要的一点是调试的代价非常高昂,要监视变量的运行时值,最好的选择是使用运行时通知,如以下代码段所示:

byte[] ba0 = CallSomeFunction();
byte[] ba1 = CallAnotherFunction();

//Print out the value of ba0 and ba1 to ApplicationhLog
Runtime.Notify(ba0, ba1);

我们需要使用neon重新编译项目,确保有足够的GAS并进行重新部署,使用正确的格式组成适当的参数,然后调用它,并等待20-30秒的时间等待下一个区块的出现,调用API getapplicationlog来获取JSON格式的日志,使用pretty format格式打印响应的内容来查找日志值(查看以下示例中高亮的部分)。日志值通常表示为字节数组,因此我们需要将它们转换为字符串或者大整数类型…总共7个步骤。

[
  {
    "jsonrpc": "2.0",
    "id": 5,
    "result": {
      "txid": "0x7e3f08a8af4290693184b413ba1d58bede8462cb565baba8ffcc380bf947e317",
      "executions": [
        {
          "trigger": "Application",
          "contract": "0x32682404d4313ecf80b70e1323ccf908a80fdfc0",
          "vmstate": "HALT, BREAK",
          "gas_consumed": "0.039",
          "stack": [],
          "notifications": [
            {
              "contract": "0xaeccdcf6d7ecf827e7e6baec3c233eca08c27ee3",
              "state": {
                "type": "Array",
                "value": [
                  {
                    "type": "ByteArray",
                    "value": "010203"
                  },
                  {
                    "type": "ByteArray",
                    "value": "04090d"
                  }
                ]
              }
            }
          ]
        }
      ]
    }
  }
]

官方文档中有介绍单元测试的章节,但是其中的示例仍然需要提前编译和/或部署.avm文件。

当我们在开发基于NEO的区块链游戏CarryBattle时,我的团队norchain.io强烈地感受到了这种限制。在社区的帮助下,我们开始尝试4阶段工作流程,这大大提高了开发效率。

四步流程法

这个工作流程的四个阶段是:编辑、调试、私人测试以及Beta测试。主要的想法是:

  1. 利用一些新工具将编码阶段拆分成编码阶段调试阶段。在调试阶段,我们尽可能多地跳过或运行本地测试案例,就像传统软件项目那样,而不与区块链进行交互。

  2. 测试阶段拆分为私人测试Beta测试,分别使用privateNet / NeoCompiler Eco进行私人测试以及公共测试网络进行beta测试。 使用这种方法,我们以最小的代价确保最大程度上的灵活性和兼容性。

开发NEO智能合约的流程是什么

与下表相比,我们可以相应看到Neo-Debugger和Neunity.Adapter的优势。根据我们的经验,Neo-Debugger更适合小规模项目,因为它不消耗GAS,而Neunity.Adapter更适合较大规模或更复杂的项目,因为它更好地支持TDD,多类,断点,变量跟踪等。

Neunity的设计实践了大规模软件的项目方法学(我指的是系统逻辑的规模,并不意味着单个调用必须复杂或者昂贵的)。通过适配器层的使用迈出了缩小.Net开发者和NEO开发者之间差距的重要的一步。与此同时,Neunity还提供了一个Neunity.Tools层,它具有灵活的序列化工具(NuSD),类HTTP的通信协议(NuTP),类URI的存储管理器(NuIO)等。我们希望能够助力更多的NEO区块链Dapps的落地。

私人测试

通过迭代编码和调试阶段完成逻辑后,我们可以转到私人测试阶段并开始与区块链进行交互。我们建议使用私人测试网络或NeoCompiler Eco进行私人测试,因为它们的环境简单且易于交互和管理。

NeoResearch公司开发的NeoCompiler Eco公共测试网络是新的、特殊的。它不需要使用GAS,同时提供了一整套基于Web的GUI工具,包括编译,导入OpCode,部署,调用,交易,转换等.NeoResearch最近还集成了gitter.im用于即时聊天,以便更好地与开发者沟通。 Igor有一个很好的教程来介绍它的基本功能。

这个测试网络的另一个优点是,区块生成的时间间隔是5-7秒,几乎比正常情况快5倍。它缩短了等待时间,几乎不会出现开发者在同一个区块发生调用冲突的情况,这使得测试几乎与私人测试网络一样简单。这就是为什么我们建议将其视为私人测试选项的原因。

Beta测试

如果成功完成了在私人测试阶段的所有功能测试,我们就可以进入最后的一个阶段,之后就可上线Dapp。 公共测试网络是最适合于Beta测试的地方,因为它类似于主网环境。 另一个好处是你还可以邀请你的朋友来帮忙测试。 你的智能合约还要能沉着地面对来自并行调用、潜在盲区或者无效输入等的挑战。

以上就是“开发NEO智能合约的流程是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程笔记行业资讯频道。


推荐阅读
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • 在开发中,有时候一个业务上要求的原子操作不仅仅包括数据库,还可能涉及外部接口或者消息队列。此时,传统的数据库事务无法满足需求。本文介绍了Java中如何利用java.lang.Runtime.addShutdownHook方法来保证业务线程的完整性。通过添加钩子,在程序退出时触发钩子,可以执行一些操作,如循环检查某个线程的状态,直到业务线程正常退出,再结束钩子程序。例子程序展示了如何利用钩子来保证业务线程的完整性。 ... [详细]
  • Annotation的大材小用
    为什么80%的码农都做不了架构师?最近在开发一些通用的excel数据导入的功能,由于涉及到导入的模块很多,所以开发了一个比较通用的e ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
author-avatar
云彩熨衣裳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有