当前位置:网站首页>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语句仅仅跳出当前的修饰器和函数体。整个执行逻辑会从前一个修饰器中定义的“_”之后继续执行。
边栏推荐
- Jingdong cloud released a new generation of distributed database StarDB 5.0
- 力扣刷题之爬楼梯(7/30)
- Postgresql-xl global snapshot and GTM code walking (branch line)
- 【leetcode】剑指 Offer II 007. 数组中和为 0 的三个数(双指针)
- 力扣刷题之移动零
- LeetCode 622. 设计循环队列
- ctfshow php features
- 危化企业双重预防机制数字化建设进入全面实施阶段
- Detailed demonstration pytorch framework implementations old photo repair (GPU)
- 揭秘5名运维如何轻松管理数亿级流量系统
猜你喜欢
随机推荐
详解AST抽象语法树
149. The largest number on a straight line, and check the set
ECCV2022 | 用于视频问题回答的视频图Transformer
LeetCode 952. Calculate Maximum Component Size by Common Factor
Benchmarking Lane-changing Decision-making for Deep Reinforcement Learning
1161 最大层内元素和——Leetcode天天刷【BFS】(2022.7.31)
线上一次JVM FullGC搞得整晚都没睡,彻底崩溃
Teach you to locate online MySQL slow query problem hand by hand, package teaching package meeting
阿里巴巴政委体系-第五章、阿里政委体系建设
Postgresql source code (64) Query execution - data structure and execution process before submodule Executor (2) execution
epoll + 线程池 + 前后置服务器分离
【统计机器学习】线性回归模型
Internet Download Manager简介及下载安装包,IDM序列号注册问题解决方法
梅科尔工作室-14天华为培训七
ctfshow php features
Solution for no navigation bar after Word is saved as PDF
Unity gets the actual coordinates of the ui on the screen under the canvas
dpkg强制安装软件
不要再用if-else
【leetcode】剑指 Offer II 009. 乘积小于 K 的子数组(滑动窗口、双指针)









