Solidity 构造函数以及事件 和 修饰符

修饰器 modifier

contract Test {
	adress owner;
	// 自己手写个修改器
	//function OnlyOwner(address _owner) internal {
	//	require(_owner == msg.sedner,'Error')
	//}	
	
	// 官方写法, 可以进行传参  
	// 修改器也是可以进行多个使用的
	modifier onlyOwner(address _owner) {
        require(msg.sender == _owner,'error');
        _;
    }
	function ownerd(address _owner) public onlyOwner(_owner) {
		owner = _owner;
	}
	
}

构造函数

contract Func {
    uint256 public x;
    uint256 public y;
    address public owner;
    uint256 public createAt;
    constructor(uint256 _x, uint256 _y) {
        x = _x;
        y = _y;
        owner = msg.sender;
        createAt = block.timestamp;
    }
}

继承

contract Old {
    string private name;
    // constructor(string memory _name){
    //     name = _name;
    // }
    // pure 对于函数:禁止修改或访问状态。  virtual 允许函数被修改重写
    function getContractName() public pure virtual  returns(string memory){
        return "contract Old";
    }

    function getName() external view returns(string memory){
        return name;
    }

    function editName(string memory _name) external {
        name = _name;
    }
}

// contract Now is Old {
contract Now {
    // // Old(_name) 继承Now的参数
    // constructor (string memory _name) Old(_name) {

    // }
    // override 重写函数标志
    function getContractName() public pure virtual returns(string memory){
        return "contract Now";
    }

}

contract Will is Now, Old {

    function getContractName() public pure override(Now, Old) returns(string memory){
        return "contract Will";
    }

    function getContract() public pure returns(string memory){
        return Now.getContractName();
    }
}

可见性

contract Base {
    // public: visible externally and internally (creates a getter function for storage/state variables)
    // private: only visible in the current contract
    // external: only visible externally (only for functions) - i.e. can only be message-called (via this.func)
    // internal: only visible internally

    function pub() public pure returns(string memory){
        return "public --- This function can be accessed anywhere";
    }

    function pri() private pure returns(string memory){
        return "private Only the current contract or its children can access the function";
    }

    function ext() external pure returns(string memory){
        return "external Cannot be called inside the contract";
    }

    function inte() internal pure returns(string memory){
        return "internal Only callable inside the contract";
    }
}

事件

事件是能方便地调用以太坊虚拟机日志功能的接口。

/**
 *Submitted for verification at Etherscan.io on 2021-12-26
*/

// SPDX-License-Identifier: GPL-3.0
pragma solidity  >=0.7.0 <0.9.0;

contract Event {
	// 日志信息有 sender  和 amount 
    event Log(address indexed sender,uint amount);


    function fn() external {
    	// 触发 log      200表示   200 wei    
    	// 1Eth = 10^18 wei; 
        emit Log(msg.sender, 200);
    }
}
  • 操作结果展示
    在这里插入图片描述

部署合约到测试网并可以在线调试合约教程后续出个文章完善

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

小李看前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值