头图

01 内容合约:可以多次存储,只能owner可以取钱。本系列我们会一步一步解释每一段合约,让你更快学习Solidity语言。(完整代码在结尾)

  // SPDX-License-Identifier: MIT
   pragma solidity ^0.8.11;
 contract Bank{

02 分步骤解释 
 1.
 

 address public immutable onwner;
     event Deposit(address _ads,uint256 amount);
     event Withdraw(uint256 amount);

声明了一个不可变公共地址类型的owner,然后声明了两个事件“存款”和“取款”。
receive() external payable{
使用了payable修饰符,表示该函数可以接收以太币的支付。

        emit Deposit(msg.sender,msg.value);
     }  
  1.      constructor(){
      onwner = msg.sender;
         }

发出存款事件,msg.sender表示调用函数的用户地址,msg.value表示支付以太币数量。

     constructor(){
         onwner = msg.sender;
     }

//保证只有合约部署者owner才能进行接下来的操作。

  1. function withdraw() external {
    withdraw函数用于从合约中取出以太币。
         require(msg.sender == onwner,"Not owner address");

用了require语句来验证调用者是否是合约的所有者地址,如果不是,则会抛出异常。 

  1.  emit Withdraw(address(this).balance);
        selfdestruct (payable(msg.sender));
    }

    发出取款事件,并传递合约的当前余额作为参数。
    selfdestruct是Solidity 合约中的一个特殊函数,用于销毁合约并将合约余额发送给指定的地址。

     function getBalance() external view returns(uint256){
         return address(this).balance;
     }

最后调用getBalance函数获取当前余额。

演示
1.部署
图片
2.哪个账号部署哪个就是owner
图片
 3.换个账号转账5wei
图片
4.该账号取款会报错
图片
04完整代码

// SPDX-License-Identifier: MIT
   pragma solidity ^0.8.11;
 
 contract Bank{
     address public immutable onwner;
     event Deposit(address _ads,uint256 amount);
     event Withdraw(uint256 amount);
     
     receive() external payable{
         //0x78731D3Ca6b7E34aC0F824c42a7cC18A495cabaB
         emit Deposit(msg.sender,msg.value);
     }  
     constructor(){
         onwner = msg.sender;
     }
     function withdraw() external {
         require(msg.sender == onwner,"Not owner address");
         emit Withdraw(address(this).balance);
         selfdestruct (payable(msg.sender));
     }
     function getBalance() external view returns(uint256){
         return address(this).balance;
     }
     
     
 }

版权声明:本文为CSDN博主「发呆...」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2302_77339802/article/details/131798355...
文章来源:CSDN 博主「发呆...」
文章原标题:《solidity案例详解(一)存钱罐合约》
旨在传播区块链相关技术,如有侵权请与我们联系删除。


BSN研习社
16 声望10 粉丝