当前位置:网站首页>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语句仅仅跳出当前的修饰器和函数体。整个执行逻辑会从前一个修饰器中定义的“_”之后继续执行。
边栏推荐
猜你喜欢
Teach you to locate online MySQL slow query problem hand by hand, package teaching package meeting
机器学习中专业术语的个人理解与总结(纯小白)
622 设计循环队列——Leetcode天天刷【循环队列,数组模拟,双指针】(2022.8.2)
Benchmarking Lane-changing Decision-making for Deep Reinforcement Learning
演讲议题及嘉宾重磅揭晓,TDengine 开发者大会推动数据技术“破局”
虚拟机vmware设置nat模式上网
「游戏建模干货」建模大师几步操作,学习经典,赶紧脑补一下吧
Handler source code analysis
Shell编程之循环语句
建模该从哪一步开始?给你分析,给零基础的你一些学习建议
随机推荐
FreeRTOS Intermediate
php根据两点经纬度计算距离
梅科尔工作室-14天华为培训七
pytorch框架实现老照片修复功能详细演示(GPU版)
友宏医疗与Actxa签署Pre-M Diabetes TM 战略合作协议
数据驱动的软件智能化开发| ChinaOSC
ERROR: You don‘t have the SNMP perl module installed.
那些年我写过的语言
分享即时通讯开发之WebSocket:概念、原理、易错常识、动手实践
从腾讯阿里等大厂出来创业搞 Web3、元宇宙的人在搞什么
线上一次JVM FullGC搞得整晚都没睡,彻底崩溃
LeetCode 622. Designing Circular Queues
Power button brush the topic of merging two orderly array
Reveal how the five operational management level of hundreds of millions of easily flow system
Word另存为PDF后无导航栏解决办法
小马智行起诉擎天智卡:索赔6000万 彭军称要斗争到底
ADS 2023 下载链接
网络协议-TCP、UDP区别及TCP三次握手、四次挥手
开发即时通讯到底需要什么样的技术,需要多久的时间
relocation R_X86_64_PC32 against,/usr/bin/ld: final link failed: Bad value