当前位置:首页 > 业务领域 > 污染检测
智能合约编写之Solidity的基础特性
时间:2020-10-26 来源:太阳集团官网 浏览量 52848 次

太阳集团娱乐网址

太阳集团娱乐网址|如前一章所述,目前包括FISCO BCOS在内的大部分联盟链平台都使用Solidity作为智能合同研发语言,所以作为初学者需要熟悉Solidity。作为一种为区块链平台设计的图灵完美编程语言,Solidity反对函数调用、修饰符、牵引、事件、继承等许多特性。它在区块链社会各界享有普遍影响和社区反对。

但是对于那些刚刚了解区块链的人来说,实实在在是一种奇怪的语言。智能合同撰写阶段将从Solidity基本特性、高级特性、设计模式、编程先进性等方面进行,让读者了解Solidity并控制其应用,更好地开展智能合同研发。

本文将重点介绍Solidity的基本特性,并带大家制定一个基本的智能契约。智能契约代码结构任何编程语言都有其标准的代码结构,用来传达如何在代码文件中组织和编写代码,Solidity也是如此。在本节中,我们将通过一个非常简单的契约示例来理解智能契约的代码结构。

太阳集团娱乐官方网站

务实稳健的^0.4.25;合同样本{//State variable address private _ admin;uint private _ state//ModifierModifier only Admin(){ require(msg . sender==_ Admin,'您不是管理员');_;}//Eventsevent SetState(uint值);//constructor constructor()public { _ admin=msg . sender;}//functions function set state(uint值)public onlyAdmin { _ state=value发出SetState(值);}函数getValue()公共视图返回(uint){ return _ state;}}上述程序还包括以下功能:通过构造函数部署合同,通过setValue函数设置合同状态,通过getValue函数查找合同状态。整个契约主要分为以下几个部分:状态变量-_admin,_state,这些变量不会永久保留,也可以通过函数、构造函数来改变——用来部署和初始化契约、事件、setstate,类似于日志,记录一个事件的重复发生,modifier-onlyAdmin,用来给函数一层特殊的‘外衣’,函数-SetState,getstate,用来读取状态变量。状态变量状态变量是合同的骨髓,记录着合同的业务信息。用户可以通过函数改变这些状态变量,这些改变不会包含在事务中;该交易经区块链网络确认后,变更将生效。

uint private _ state状态变量的声明方式为:【类型】【面试修饰符-可选】【字段名】构造函数作为初始化契约,允许用户将一些基础数据加载到状态变量中。在上面的例子中,_admin字段被设置为以后显示其他功能的先决条件。constructor()public {_ admin=msg . sender;}与java的不同之处在于构造函数不反对拉取,并且不能登录构造函数。函数函数用于读取状态变量。

对变量的更改将不包括在交易中,只有在区块链网络确认后才会生效。生效后,更改不会永久保留在区块链分类账中。函数签名定义了函数名、输入输出参数、访问修饰符和自定义修饰符。函数setState(uint值)public onlyAdmin函数还可以返回多个返回值:function function sample()public view returns(uint,uint) {return (1,2);}在这个契约中,还有一个带有view修饰符的函数。

太阳集团官网

该视图响应函数将改变任何状态变量。类似于view,有一个修饰符pure,表示函数是显式函数,所以不需要读取状态变量,函数的操作意味着依赖于参数。函数add(uint a,uint b)public pure returns(uint){ return a b;}如果您试图更改视图函数中的状态变量或在纯函数中访问状态变量,编译器不会报告错误。事件类似于日志,不会记录在区块链。

客户可以通过web3订阅这些活动。 事件事件设置状态(uint值)已定义;一个结构事件发出SetState(值);这里有几点必须注意:一个事件的名字可以给一个登录名,不一定要和函数名链接,但是建议链接一下,这样才能清楚的传达再次发生的事情。构造事件时,可以不写emit,但是因为事件和函数的名称和参数都是高度相关的,所以操作者更容易误将事件写入函数调用,所以不建议这样做。

函数setState(uint值)public onlyAdmin { _ state=value//emit SetState(值);//这样写是可以的,但是不推荐,因为这样更容易写错setState(setState值);} Solidity编程风格不应该使用某些规范。至于编程风格,建议参考https://learnblockchain.cn/docs/solidity/style-guide.html#id16修改器,这是合同最重要的部分。它挂在函数声明上,为函数获取一些额外的函数,比如检查和清理。

在这个例子中,在修饰符onlyAdmin拒绝函数调用之前,有必要在部署函数时检查函数的调用者是否是原来的管理员(即契约的部署者)。//Modifiermodifier only Admin(){ require(msg . sender==_ Admin,'您不是Admin ');_;{}.//functions function set state(uint值)public only admin {.}值得注意的是,修饰符中定义的下划线“_”响应函数的调用,是指开发者用修饰符标记的函数。在这种情况下,它传达了setState函数调用的含义。智能合同的操作在了解了上述智能合同示例的结构后,有必要从操作开始。

太阳集团娱乐网址

合同的操作方式有很多种,你可以采用其中一种:方法一:合同可以采用FISCO BCOS控制器的方式部署。明确请求参考https://fisco-bcos-documentation.readthedocs.io/zh _ cn/latest/docs/installation . html # id7方法2:在线IDE WeBASE-FISCO BCOS开源项目WeBASE前端操作获取方法3:通过在线ide remix部署和操作合同,其地址在本例中先作为remix编译器,在remix的文件IDE中键入代码后,使用编译器按钮进行编译。部署成功后,按钮上往往会出现绿色凸起:编译器部署成功后,部署链接就可以启动了,部署成功后契约实例也不会频繁出现。部署好setState契约后,让我们调用setState(4)。

执行成功继续后,不会生成包含交易执行信息的交易回单。_太阳集团娱乐网址。

本文来源:太阳集团娱乐官方网站-www.d2rworldwide.com

版权所有梅州市太阳集团娱乐官方网站有限公司 粤ICP备70643369号-5

公司地址: 广东省梅州市连山区费远大楼1363号 联系电话:046-338779433

Copyright © 2018 Corporation,All Rights Reserved.

熊猫生活志熊猫生活志微信公众号
成都鑫华成都鑫华微信公众号