写点什么

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

作者:BSN研习社
  • 2024-01-19
    浙江
  • 本文字数:1222 字

    阅读完需:约 4 分钟

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

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 修饰符,表示该函数可以接收以太币的支付。

2.

        emit Deposit(msg.sender,msg.value);     }  
复制代码

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

     constructor(){         onwner = msg.sender;     }
复制代码


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

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 函数获取当前余额。


03

演示

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?spm=1001.2014.3001.5502


文章来源:CSDN 博主「发呆...」

文章原标题:《solidity 案例详解(一)存钱罐合约》

旨在传播区块链相关技术,如有侵权请与我们联系删除。

用户头像

BSN研习社

关注

还未添加个人签名 2021-11-05 加入

还未添加个人简介

评论

发布
暂无评论
Solidity案例详解(一)存钱罐合约_区块链_BSN研习社_InfoQ写作社区