当前位置:网站首页>Solidity智能合约开发 — 4.1-合约创建和函数修饰器
Solidity智能合约开发 — 4.1-合约创建和函数修饰器
2022-08-03 19:43:00 【Crypto168】
在创建智能合约时,会执行一次构造函数(与智能合约同名的函数)。该构造函数是可选的,但只允许有一个构造函数,也就是不支持重载。
1、合约创建
1.1 构造函数
初始化合约的owner地址:
address owner; // 定义owner变量
bytes32 name; //定义合约创建者名字
// 构造函数
function OwnerToken(bytes32 _name) public {
owner = msg.sender; // 在部署合约的时候,将owner设置为部署者的地址
name = _name;
}1.2 函数可见性控制
函数和状态变量有4种可见性类型,分别为external、public、internal和private
- external:外部函数作为智能合约接口一部分,该函数可以从其他智能合约和交易中心调用。一个外部函数f不能从内部调用(即f不起作用,但this.f可以)。
- public:可以在内部或通过消息调用,对于公共状态变量,会自动生成gatter函数,gatter函数介绍见下文。
- internal:这些函数和状态变量只能内部访问,不能使用this调用。
- private:private函数和状态仅在当前定义他们的智能合约中使用。
对于所有public的状态变量,Solidity编译器提供了自动状态变量生成对应的gatter(访问器)的特性。gatter函数的可见性是external的,如果从内部访问getter(即没有this),他相当于一个状态变量。如果它是外部访问的(即用this),它被认为是一个函数。
contract C{
uint public data;
function d() public{
data = 10; //内部访问
uint val = this.data();//外部访问
}
}2. 函数修饰器
修饰器的关键字是modifier。modifier的可以改变函数的行为,也可以在运行函数前的自动检查某个条件,例如地址,变量,余额等。下面是使用函数修饰器的列子
1. 定义一个叫做onlyOwner的modifier:
// 定义modifier
modifier onlyOwner {
require(msg.sender == owner); // 检查调用者是否为owner地址
_; // 如果是的话,继续运行函数主体;否则报错并revert交易
}2. 带有onlyOwner修饰符的函数只能被owner地址调用 :
function changeOwner(address _newOwner) external onlyOwner{
owner = _newOwner; // 只有owner地址运行这个函数,并改变owner
}如果同一个函数有多个修饰器,它们之间用空格隔开,修饰器会被依次检查执行。修饰器或函数体中显式return语句仅仅跳出当前的修饰器和函数体。整个执行逻辑会从前一个修饰器中定义的“_”之后继续执行。
边栏推荐
- Force is brushed buckle problem for the sum of two Numbers
- 从文本匹配到语义相关——新闻相似度计算的一般思路
- 149. 直线上最多的点数-并查集做法
- 手把手教你定位线上MySQL慢查询问题,包教包会
- 盘点在线帮助中心对企业能够起到的作用
- ctfshow php特性
- Postgresql快照优化Globalvis新体系分析(性能大幅增强)
- Unity gets the actual coordinates of the ui on the screen under the canvas
- Brush the topic of mobile zero power button
- Matlab论文插图绘制模板第42期—气泡矩阵图(相关系数矩阵图)
猜你喜欢

线上一次JVM FullGC搞得整晚都没睡,彻底崩溃

从文本匹配到语义相关——新闻相似度计算的一般思路

【leetcode】剑指 Offer II 009. 乘积小于 K 的子数组(滑动窗口、双指针)

【STM32】标准库-自定义BootLoader

Handler 源码解析

FreeRTOS中级篇

高效目标检测:动态候选较大程度提升检测精度(附论文下载)

花 30 美金请 AI 画家弄了个 logo,网友:画得非常好,下次别画了!

演讲议题及嘉宾重磅揭晓,TDengine 开发者大会推动数据技术“破局”

Solution for no navigation bar after Word is saved as PDF
随机推荐
relocation R_X86_64_PC32 against,/usr/bin/ld: final link failed: Bad value
Postgresql snapshot optimization Globalvis new system analysis (performance greatly enhanced)
机器学习中专业术语的个人理解与总结(纯小白)
JS 内置构造函数 扩展 prototype 继承 借用构造函数 组合式 原型式creat 寄生式 寄生组合式 call apply instanceof
阿洛的反思
Postgresql-xl global snapshot and GTM code walking (branch line)
flex布局
Radondb mysql installation problems
演讲议题及嘉宾重磅揭晓,TDengine 开发者大会推动数据技术“破局”
盘点在线帮助中心对企业能够起到的作用
友宏医疗与Actxa签署Pre-M Diabetes TM 战略合作协议
Detailed demonstration pytorch framework implementations old photo repair (GPU)
JWT详解
力扣刷题之合并两个有序数组
高性能计算软件与开源生态| ChinaOSC
揭秘5名运维如何轻松管理数亿级流量系统
危化企业双重预防机制数字化建设进入全面实施阶段
安装radondb mysql遇到问题
pytorch框架实现老照片修复功能详细演示(GPU版)
Detailed AST abstract syntax tree