016.Solidity入门——03函数修饰符

下面是 Solidity 中的函数修饰符详解以及一些简单代码例子:

·public: 声明为公有函数,可以在合约内部和外部调用。

·private: 声明为私有函数,只能在合约内部调用。

·external: 声明为外部函数,只能在合约外部调用。

·internal: 声明为内部函数,只能在合约内部调用。

·pure:修饰符标记该函数为纯函数,表示该函数不会对外部状态产生影响,只能访问内部状态。

pragma solidity ^0.8.7;
 
contract Example {
    uint256 constant public a = 100; //定义常量变量a
    uint256 b = 200; 
    function addA(uint256 x) pure returns (uint256) {//pure修饰符保证函数内不会对外部状态进行修改
        return a + x; 
    } 
}

·view:修饰符标记该函数为读取函数,表示该函数不会对外部状态产生影响,只能读取内部状态。

pragma solidity ^0.8.7;

contract Example {
    uint256 constant public a = 100; //定义常量变量a
    uint256 b = 200; 
    function readB() view returns (uint256) { //view修饰符保证函数内不会对外部状态进行修改,只能读取
        return b; 
    } 
}

·payable:修饰符标记该函数为可支付函数,表示该函数可以接受并处理Ether支付。

pragma solidity ^0.8.7;

contract Example {
    uint256 public balance; //定义公共变量balance
    function deposit() payable public {  // payable修饰符表示该函数可以接受并处理Ether支付
        balance += msg.value; 
    } 
}

·constant:修饰符表示该函数为常量函数,它不能修改合约状态,因此它是安全的,也不会消耗任何以太币。

pragma solidity ^0.8.7;

contract Example {
    uint256 public balance;  // 定义公共变量balance
    // 定义常量函数getBalance,返回balance的值
    function getBalance() public constant returns (uint256) {
        return balance;
    }
}

·anonymous:修饰符表示该事件不需要明确的名称,它可以被定义为一个匿名的结构体。

pragma solidity ^0.8.7;

contract Example {
    event Transfer(
        address indexed _from,
        address indexed _to,
        uint256 _value
    );

    // 定义带有anonymous修饰符的事件
    event Transfer(address indexed _from, address indexed _to, uint256 _value) anonymous;

    function transfer(address _to, uint256 _value) public {
        emit Transfer(msg.sender, _to, _value);
    }
}

·indexed:修饰符表示该参数为索引参数,在该事件发生后,它可以被检索。

pragma solidity ^0.8.7;

contract Example {
    event Transfer(
        address indexed _from,  // 带有indexed修饰符的_from变量
        address indexed _to,  // 带有indexed修饰符的_to变量
        uint256 _value
    );

    function transfer(address _to, uint256 _value) public {
        emit Transfer(msg.sender, _to, _value);
    }
}

附:上一篇我忘了先讲函数了,所以按顺序,要写函数,再讲函数修饰符。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Solidity 中,函数访问修饰符用于限制函数的访问权限,以确保只有满足特定条件的地址或账户才能调用该函数。以下是 Solidity 中常用的访问修饰符及其用法: 1. public:公共函数,任何地址都可以调用。 2. private:私有函数,只能在当前合约内部调用。 3. internal:内部函数,只能在当前合约内部或继承该合约的合约中访问。 4. external:外部函数,只能通过外部交互(如消息调用)方式调用,不能在合约内部直接调用。 以下是一个简单示例,演示如何使用访问修饰符限制函数的访问权限: ``` pragma solidity ^0.8.0; contract AccessControl { address public owner; constructor() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner, "Only owner can call this function"); _; } function changeOwner(address _newOwner) public onlyOwner { owner = _newOwner; } function publicFunction() public { // 可以被任何地址调用 } function privateFunction() private { // 只能在当前合约内部调用 } function internalFunction() internal { // 只能在当前合约内部或继承该合约的合约中访问。 } function externalFunction() external { // 只能通过外部交互(如消息调用)方式调用,不能在合约内部直接调用。 } } ``` 在上述示例中,我们定义了一个 onlyOwner 修饰符,用于限制只有合约所有者才能调用 changeOwner 函数。而 publicFunction 可以被任何地址调用,而 privateFunction 只能在当前合约内部调用,internalFunction 只能在当前合约内部或继承该合约的合约中访问,externalFunction 只能通过外部交互方式调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值