【开发智能合约—Solidity系列】合约中的基本组成元素

大致上理解每个档案的每份智能合约都是一个个的区块,而这一个篇章主要着重于智能合约中的每个区块的组成元素进行分项说明。

今天的范例会以简单的银行存款与提款流程进行示范,过程中将一步步的使用上述7种元素完成功能,这七种功能也是未来撰写合约时非常常用的技巧。

State Variables(状态变数)

「状态变数」主要在储存一份合约之中的变化值,银行中会变化的就是我们的「钱」,而「钱」在我们的合约里面就是一种状态变数,我们也会记录拥有者是谁,大抵如下:

上面的程式码范例中可以看到private关键字,这是可视范围( Visibility and Getters )的宣告,而uint、address…关键字则是型别( Types )。

Functions(功能)

银行最基本的功能就是存款与提款,而存款这个功能会将原本的「钱」进行增加的动作,因此每个功能里面都包含着一个个的动作,而这些动作通常会改变我们的变数值。

Function Modifiers(修饰函数)

通常我们在进行某项功能之前,根据法规会有一些限制,举例来说: 存款前务必检查是否为本人,而这个事前检查就是所谓的「修饰函数」。

Events(事件)

我们生活在这世界上无时无刻都在发生事件,而事件的触发必然会有一些前兆,当某个动作被触发时,我们就将之视为事件,并发送事件通知,如此一来就能更全面的掌握每一个动作相对应的处置方式,那么在智能合约中如果有了事件通知会是什么样的场景呢?

试想,当智能合约发生「存款」的动作时,对于使用者来说最在意的莫过于「成功存款」的通知了,而智能合约也提供了事件通知机制,做完某件事情后,可以主动发送事件通知,等待通知结果并进行下一步动作,以下的范例将以「存款」为出发点来说明事件的通知。

那我们可能会好奇,这样的事件发送了,事件送去哪里?做了什么处理?

通常会与前端的显示进行互动,前端可以透过监听事件的方式,接收来自智能合约的事件推播,详细请参考「Events」。

Errors(错误处理)

假设我们要提款时,发现提款的金额大于我们的总资产时,这时候理论上应该是不能提款的,毕竟银行也不是慈善事业免费送钱给我们,因此这样的条件就是一种错误,此时可以透过错误处理来告知提款者「您的存款不足」,让提款者可以知晓为什么无法提款。

更多的错误处理类型请参考「Errors and the Revert Statement」。

Struct Types(结构型别)

随着智能合约越来越复杂,我们的状态变数也随之越来越多,如此一来很容易导致合约过于杂乱,因此我们可以把相关的状态变数整理在一起,放在同一个区块,例如以下的范例,帐号的组成会有户名、帐号识别码…,将相关的状态变数汇整于一起。

Enum Types(列举型别)

除了基础型态以外,我们也可以自订型别,举例来说,银行在进行交易时会有几种状态,开始交易、交易中、完成交易,而这三种状态通常不会在Solidity预设的型态中,因此我们可以自订这样的状态型别,便于实作状态的变化。

结语

借由基础元素的了解,我们可以学习到撰写智能合约的一些技巧与用词,这一篇仅将大元素做个基本介绍,其实每个元素的用法还能再延伸额外的篇章进行详细说明,一个篇章如果隐含太多资讯相信初学的过程很容易就放弃,因此细节其实可以留待真正实作一份合约时再一一查询即可,我们只要懂得大架构如何在脑中浮现即可。

以上的范例皆亲自学习并且进行修改,每段注解亦是阅读详细文档过后的整理,过程非常耗时,希望这样的篇章说明能够对您有所帮助,如果有任何错误需要修正的也欢迎留言让我们共同学习开发智能合约,让技术更加普及。

本文链接地址:https://www.wwsww.cn/jishu/13891.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。