// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;
contract CoinBank {
// Объявить владельца контракта переменная на хранилище
address immutable owner;
// Когда контракт создан, установите владельца контракта создателем.
constructor() {
owner = msg.sender;
}
// Декораторфункция, используемая для определения того, является ли вызывающий абонент владельцем контракта.
modifier OnlyOwner() {
require(msg.sender == owner, "Not owner");
_;
}
// Создайте функцию с именем «депозит», которая позволит любому отправлять эфир на контракт.
function deposit() public payable {
// Тело функции пусто, потому что нам не нужно ничего делать.
// Любой эфир, отправленный в эту функцию, будет автоматически добавлен к балансу контракта.
}
// Создайте функцию с именем «вывести», которая позволяет только владельцу контракта выводить эфир.
function withdraw() external OnlyOwner {
// require(msg.sender == owner, "caller is not owner");
// Используйте функцию Transfer, чтобы отправить владельцу весь баланс контракта.
(bool sent, bytes memory data) = address(msg.sender).call{
value: address(this).balance
}("");
require(sent, "Failed to send Ether");
}
// Получить баланс текущего адреса
function getBalance() external view returns (uint256) {
return address(this).balance;
}
}
Вышеупомянутый контракт можно назвать контрактом-копилкой, который позволяет любому вносить эфир, но только владелец контракта может его вывести:
1.owner
:Это состояниепеременная,используется дляхранилище Адрес владельца контракта。immutable
Ключевое слово означает этопеременная Значение устанавливается при создании контракта.,Тогда его уже нельзя будет изменить。2.constructor
:Это конструкцияфункция,Он запускается при создании контракта. В этой функции,мы будемowner
переменная Установить в качестве создателя контракта。3.OnlyOwner
:Это модификатор,его можно добавить в функцию,выполнить некоторый код перед запуском функции. в этом модификаторе,мы используемrequire
функциячтобы гарантировать, что только владелец контракта может работатьфункция。4.deposit
:это публикафункция,Любой может позвонить на него, чтобы отправить эфир на контракт.。Отправленный эфир автоматически добавляется к балансу контракта.。5.withdraw
:это внешнийфункция,Вызвать его может только владелец контракта.。этотфункция Отправим все остатки по контракту владельцу.。Здесь низкий уровень.call
функцияотправить эфир,Это связано с тем, что в версии Solidity 0.8.x,.transfer
и.send
функциябыл оставлен。6.getBalance
:это внешнийтолько для чтенияфункция,Возвращает текущий баланс контракта.
Отказ от ответственности: эта работа распространяется под лицензией Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)[1]. Пожалуйста, укажите источник при ее использовании. Автор: мэнбин[2] блог: мэнбин[3] Гитхаб: mengbin92[4] cnblogs: Непреднамеренно полюбила воду[5] Сообщество разработчиков облачных технологий Tencent: Мюнстер[6]
[1]
С указанием авторства-Некоммерческая-ShareAlike 4.0 интернациональность (CC BY-NC-SA 4.0): https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh
[2]
mengbin: mengbin1992@outlook.com
[3]
mengbin: https://mengbin.top
[4]
mengbin92: https://mengbin92.github.io/
[5]
Влюбляюсь в воду нечаянно: https://www.cnblogs.com/lianshuiwuyi/
[6]
Мюнстер: https://cloud.tencent.com/developer/user/6649301