solidity案例详解(一)存钱罐合约

本文介绍了如何使用Solidity编写一个简单的智能合约,该合约允许多次存储资金但仅允许合约所有者(onwner)取款。合约包含了deposit和withdraw事件,以及接收以太币、验证取款权限和销毁合约转移余额的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

合约内容:可以多次存储,只能onwner可以取钱。

分步骤解释   

演示:

 完整代码:


蝉本无知,只因好学,故称知了。

合约内容:可以多次存储,只能onwner可以取钱。

本系列我们会一步一步解释每一段合约,让你更快学习solidity语言。(完整代码在结尾)

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

分步骤解释


   1.

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


     声明了一个不可变公共地址类型的onwner,然后声明了两个事件“存款”和“取款”。

receive() external payable{


        使用了 payable 修饰符,表示该函数可以接收以太币的支付
2.

        emit Deposit(msg.sender,msg.value);
     }  

发出存款事件,msg.sender表示调用函数的用户地址,

msg.value表示支付以太币数量

     constructor(){
         onwner = msg.sender;
     }

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

   function withdraw() external {

withdraw 函数用于从合约中取出以太币。

         require(msg.sender == onwner,"Not owner address");

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

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

发出取款事件,并传递合约的当前余额作为参数。

selfdestruct 是 Solidity 合约中的一个特殊函数,用于销毁合约并将合约余额发送给指定的地址

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

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

演示:

1.部署

 2.哪个账号部署哪个就是onwner

 3.换个账号转账5wei

 4.该账号取款会报错

 完整代码:

// 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;
     }
     
     
 }

结束~~求点赞关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发呆...

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

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

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

打赏作者

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

抵扣说明:

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

余额充值