以太坊 Solidity modifier

1. modifier 的作用

modifier 可以轻松的改变方法的行为,例如,可以在一个方法执行之前先检查是否满足某些条件,如果满足才继续执行。

2. 示例

(1)合约代码

contracts/Coursetro.sol

pragma solidity ^0.4.22;

contract Coursetro {
    
    string fName;
    uint age;
    address owner;
    
    event Instructor(
       string name,
       uint age
    );

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }
    
    constructor() public {     
        owner = msg.sender;
    }
    
    function setInstructor(string _fName, uint _age) onlyOwner public {
       fName = _fName;
       age = _age;
       emit Instructor(_fName, _age);
    }
    
    function getInstructor() view public returns (string, uint) {
       return (fName, age);
    }
   
}

(2)测试代码

test.js

var Web3 = require("web3");

var web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider("http://localhost:7545"));

// 使用 accounts[0] 构建合约
web3.eth.defaultAccount = web3.eth.accounts[0];

var CoursetroContract = web3.eth.contract(abi);

var Coursetro = CoursetroContract.at('0x0b531928a196781f3c3b51b15e2b8d9d360317a4');

// 使用 accounts[0] 调用,没问题
console.info("accounts[0] call ...");

Coursetro.setInstructor("a", 1, (err, res) => {
    if (err) {
        console.error(res);
    }
});

// 使用 accounts[1] 调用,会报错
console.info("accounts[1] call ...");

web3.eth.defaultAccount = web3.eth.accounts[1];

Coursetro.setInstructor("b", 2, (err, res) => {
    if (err) {
        console.error("oh no !!!");
    }
});

(3)运行

$ node test/test.js
accounts[0] call ...
accounts[1] call ...
oh no !!!
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 【本文目标】 通过本文的学习和时间,你将熟悉以太坊开发框架Truffle的配置和运行,并借助Truffle完成一...
    笔名辉哥阅读 14,487评论 8 55
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,282评论 19 139
  • 文|李伟志 关于“以太猫”的流行,相信不少人都有所耳闻,甚至入手养过几只。从游戏性来说,其本质就是一个简单的...
    ROW供享社阅读 4,733评论 0 3
  • 曾经 以为坚持就是永不动摇 现在 才明白 坚持是犹豫着、退缩着、心猿意马着 但还要继续往前走 一路 跌跌撞撞中,努...
    夜雨_feb1阅读 3,414评论 3 20
  • 假如 我是一朵雪花 在空中 洁白 轻 广阔的大地我任选一方 我一定不去那喧嚣的城市 那里拥挤着无...
    湘中布衣秀才阅读 2,801评论 0 2

友情链接更多精彩内容