目录
蝉本无知,只因好学,故称知了。
合约内容:可以多次存储,只能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;
}
}
结束~~求点赞关注