简单的Owner合约

1、实现 Owner合约
2、新Owner depending合约

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

abstract contract context{

function _msgSender() internal view virtual returns (address){
return msg.sender;
}

function _masData() internal view virtual returns (bytes calldata){
return msg.data;
}

}


contract Ownable is context{
    address payable public owner;
    mapping(address => uint) public shares;
    constructor(){
        _transOwner(_msgSender());
    }
    modifier onlyOwner{
        require(owner == _msgSender(),"not the owner");
        _;

    }
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function _transOwner(address newOwner) internal virtual{
    address oldOwner = owner;
    owner = payable(newOwner);
    emit OwnershipTransferred(oldOwner,owner);
    }

    function  transOwner(address newOwner) public virtual onlyOwner{
        require (newOwner!=address(0),"new address is zero");
        _transOwner(newOwner);
    }

    function reannounceOwner() public virtual onlyOwner{
    _transOwner(address(0));
    }

    function Owner() public view virtual returns (address) {
        return owner;
    }

    function withdraw(uint _amount) onlyOwner public{ 
     //   require(shares[msg.sender] >= _amount,"not enough balance");
        shares[msg.sender] -= _amount;
        payable(msg.sender).transfer(_amount);
    }

    function exposit(uint amount) public{
    shares[msg.sender]=amount;
    }

    function getBalance() public returns(uint bal) {
     bal =shares[msg.sender];
     return bal;
    }
}

contract OwnablePending is Ownable{
    event OwnerTranferred(address indexed oldaddress, address indexed newaddress);
    address private dependingOwner;

function transOwner (address newOwner) public virtual onlyOwner override{
    dependingOwner=newOwner;
    emit OwnerTranferred(Owner(),dependingOwner);

}

function _transOwner(address newOwner) internal virtual override{ 
delete dependingOwner;
super._transOwner(newOwner);
}

function accept()public virtual{
    address sender = _msgSender();
    require(sender == dependingOwner);
    _transOwner(sender);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值