热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

从零学本体dApp开发(8):白话解读本体智能合约为何要消耗gas?

原创|工匠(来自本体社区的技术人员)---------------写在前面最近在利用业余时间学习本体的开发。我打算把自己学习的过程记录下来࿰

原创 | 工匠 (来自本体社区的技术人员)

---------------


写在前面

最近在利用业余时间学习本体的开发。我打算把自己学习的过程记录下来,一方面便于自己梳理学到的东西,另一方面希望可以通过笔记的共享,能使本体后来的开发者少走弯路。

由于是初学者,学习本体开发的过程中遇到了很多问题,在此,特别感谢本体社区的各位老师(宏雷、楚笙、Mickey、雪飞的逆袭、Andy季、周佩文等)耐心地为我解答各种各样的问题,本体有你们,真好!


 


学习本篇的目的:

 

在《本体SmartX到底是个是啥》一文中我们学习了使用SmartX进行智能合约开发,其中提到智能合约的部署和运行都需要消耗gas,就是ONG,这样篇我们来学学为什么需要消耗gas。


 

目录:

1. 本体部署和运行智能合约为何要gas?

2. 部署和运行要消耗多少gas?

3. 合约消耗gas的具体过程

 


1.本体部署和运行智能合约为何要gas?

智能合约的部署是什么?简单来说就是把智能合约编译出来的可执行文件放到区块链中。部署的过程可以可以理解成你在windows上安装一个软件,但是只是安装,还没有运行。智能合约的调用,就好比是windows上安装的这个软件运行起来了。

一开始我不能理解为什么部署也要消耗gas,后经社区专业人员的讲解弄懂了。区块链上的资源,如RAM、CPU和网络等,都非常的宝贵的,就像EOS中租用任意一种资源都要收费的。把合约部署到区块链上,其实是会占用RAM的,所以智能合约的内容越大,需要消耗的gas就越贵。

而智能合约执行,需要消耗gas也好理解了,因为代码执行是需要占用CPU和网络资源的,这些资源有些是节点提供的,所以消耗的gas都会奖励给节点(即矿工)。

 


2.部署和运行要消耗多少gas?

 

在SmartX进行智能合约部署时,会调用Cyano wallet钱包。就像你在网上买东西,付款时要绑定银行卡一样。调用的界面如下:

里面会涉及到连个数量,Gas price和Gas limit。

Gas limit 是在执行智能合约的 opcode 过程中计步时使用,理论上智能合约越复杂,需要的 GAS limit 数量越高,Ontology 交易设定最低的 GAS limit 数量是 20000

 

我们知道代码在计算机上时一步一步执行的,本体中智能合约也时按步计费的,智能合约余额复杂,执行的步数就越多,就消耗越多的gas。

 

GAS price 是给执行 opcode 定价,GAS price 越高,共识节点会优先打包该笔交易

GAS price 其实就时每步的单价,那么需要消耗的总gas = Gas limit x GAS price 。

 

这里社区的专业人员用出租车来类比,会很好理解。我们坐出租车按里程计算,里程数就相当于Gas limit,出租车有起步价,就是三公里,而Gas limit 也有起步价,为20000,即你的智能合约执行步数少于20000,也按20000来算。

而每公里的单价就和GAS price 一样,高峰期时我们很难打到车,可以通过加价来更快地打到车,同样的在区块链拥堵时,把GAS price 设的高一点,合约就会被优先执行。

 

交易费用= GAS limit x GAS price ,实际的交易费用分以下三种情形:


  • 执行 opcode 步数等于 GAS limit

    交易费用 = GAS Price x GAS limit

  • 执行 opcode 步数大于 GAS limit

    交易费用 = GAS Price x GAS limit

    交易失败,但 GAS 不会退还。

  • 执行 opcode 步数小于 GAS limit

    交易费用 = GAS Price x (opcode实际消耗)

    多余的 GAS 会退还,但最低消费是 20000。

所有的 ONT, ONG 的转账 GAS limit 消费默认固定都是20000。

 

我们在部署和执行合约要先填写GAS limit 和 GAS price的具体数量,其实就是支付预付款,但实际用款不一定和预付款一样,当实际用款和预付款一样多时,就正好,实际用款小于预付款时,多余的会退回钱包,当实际用款大于预付款是,合约就不能部署或运行成功,但预付款也不会退的。

所以我们在设定GAS limit 时一定要稍微设置的到一点,因为小了,合约不成功,gas也没了。所以要做好gas的估算。

 


3.合约消耗gas的具体过程

 

其实合约部署过程中消耗gas,也是一笔交易过程,交易的一方时合约开发者,另一方是本体系统,只不过消耗的这笔gas最终本体系统还要奖励给矿工。

当合约部署成功后,就是交易成功后,SmartX中会显示出这笔交易的相关信息,如下图:

 

 

我们可以根据交易的哈希值,到区块链上查询这笔交易,或者直接在solo-chain里面查询,如下如的第一行就是刚刚部署智能合约成功的交易,

 

点击右侧“Detail”按钮,可以看到详细的信息如下图:

可以看到消耗的gas是10000000000,相当于10个ONG,而交易涉及的两个地址,发送方是我钱包的账户,接受方是治理合约地址,这个gas还会根据本体合约内部的分配规则分配给矿工。

 


写在最后

希望有更多的小伙伴参与到本体开发学习中来,让我们共同为本体的生态建设添砖加瓦!感兴趣的小伙伴可以联系我,共同学习!



推荐阅读
  • 应用链时代,详解 Avalanche 与 Cosmos 的差异 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 单片机入门指南:基础理论与实践
    本文介绍了单片机的基础知识及其应用。单片机是一种将微处理器(类似于CPU)、存储器(类似硬盘和内存)以及多种输入输出接口集成在一块硅片上的微型计算机系统。通过详细解析其内部结构和功能,帮助初学者快速掌握单片机的基本原理和实际操作方法。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 本项目通过Python编程实现了一个简单的汇率转换器v1.02。主要内容包括:1. Python的基本语法元素:(1)缩进:用于表示代码的层次结构,是Python中定义程序框架的唯一方式;(2)注释:提供开发者说明信息,不参与实际运行,通常每个代码块添加一个注释;(3)常量和变量:用于存储和操作数据,是程序执行过程中的重要组成部分。此外,项目还涉及了函数定义、用户输入处理和异常捕获等高级特性,以确保程序的健壮性和易用性。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • NFT市场热度持续攀升,波卡能否抓住机遇迎来NFT夏季热潮?
    NFT市场热度持续攀升,波卡能否抓住机遇迎来NFT夏季热潮? ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 解决Android应用在手机安装时出现安全风险提示的方法与对策
    解决Android应用在手机安装时出现安全风险提示的方法与对策 ... [详细]
author-avatar
mobiledu2502870743
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有