# Solidity极简入门: 11. 构造函数和修饰器 **Published by:** [0xAA](https://paragraph.com/@wtfacademy/) **Published on:** 2022-04-14 **URL:** https://paragraph.com/@wtfacademy/solidity-11 ## Content 我最近在重新学solidity,巩固一下细节,也写一个“Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 欢迎关注我的推特:@0xAA_Science WTF技术社群discord,内有加微信群方法:链接 所有代码和教程开源在github(1024个star发课程认证,2048个star发社群NFT): github.com/AmazingAng/WTFSolidity这一讲,我们将用合约权限控制(Ownable)的例子介绍solidity语言中构造函数(constructor)和独有的修饰器(modifier)。构造函数构造函数(constructor)是一种特殊的函数,每个合约可以定义一个,并在部署合约的时候自动运行一次。它可以用来初始化合约的一些参数,例如初始化合约的owner地址: address owner; // 定义owner变量 // 构造函数 constructor() public { owner = msg.sender; // 在部署合约的时候,将owner设置为部署者的地址 } 修饰器修饰器(modifier)是solidity特有的语法,类似于面向对象编程中的decorator,声明函数拥有的特性,并减少代码冗余。它就像钢铁侠的智能盔甲,穿上它的函数会带有某些特定的行为。modifier的主要使用场景是运行函数前的检查,例如地址,变量,余额等。钢铁侠的modifier我们定义一个叫做onlyOwner的modifier: // 定义modifier modifier onlyOwner { require(msg.sender == owner); // 检查调用者是否为owner地址 _; // 如果是的话,继续运行函数主体;否则报错并revert交易 } 代有onlyOwner修饰符的函数只能被owner地址调用,比如下面这个例子: function changeOwner(address _newOwner) external onlyOwner{ owner = _newOwner; // 只有owner地址运行这个函数,并改变owner } 我们定义了一个changeOwner函数,运行他可以改变合约的owner,但是由于onlyOwner修饰符的存在,只有原先的owner可以调用,别人调用就会报错。这也是最常用的控制智能合约权限的方法。 OppenZepplin的Ownable标准实现:openzeppelin-contracts/contracts/access/Ownable.sol at master · OpenZeppelin/openzeppelin-contractsOpenZeppelin Contracts is a library for secure smart contract development. - openzeppelin-contracts/contracts/access/Ownable.sol at master · OpenZeppelin/openzeppelin-contractshttps://github.com总结这一讲,我们介绍了solidity中的构造函数和修饰符,并举了一个控制合约权限的Ownable合约。 ## Publication Information - [0xAA](https://paragraph.com/@wtfacademy/): Publication homepage - [All Posts](https://paragraph.com/@wtfacademy/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@wtfacademy): Subscribe to updates - [Twitter](https://twitter.com/0xAA_Science): Follow on Twitter