Copyright © 2022-2025 aizws.net · 网站版本: v1.2.6·内部版本: v1.25.2·
页面加载耗时 0.00 毫秒·物理内存 146.5MB ·虚拟内存 1437.8MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
solidity 接收函数 receive 没有参数、没有返回值。
solidity 向合约转账,发送 Eth,就会执行 receive 函数。
如果没有定义接收函数 receive,就会执行 fallback 函数。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Fallback {
event eventFallback(string);
fallback() external payable {
emit eventFallback("fallbak");
}
receive() external payable {
emit eventFallback("receive");
}
// 查看合约账户余额
function getBalance() external view returns(uint) {
return address(this).balance;
}
}
我们向合约 Fallback 发送一笔 123 wei 的交易,查看日志:
[
{
"from": "0xd457540c3f08f7F759206B5eA9a4cBa321dE60DC",
"topic": "0x39684f4c14ee0aafaa34ed83629676cd0fbe71653659c3353ef0c33f630e7eab",
"event": "eventFallback",
"args": {
"0": "receive"
}
}
]
我们调用合约 Fallback 的 getBalance 方法,查看合约地址的余额为 123 wei。
向一个合约发送 Eth,何时调用 receive 或者 fallback 呢?下面是两者的调用流程。
发送 Eth
|
msg.data 是否为空
/ \
是 否
/ \
是否定义了receive fallback
/ \
是 否
/ \
receive fallback
我们可以使用 Solidity 编写智能合约做一个钱包。钱包合约的功能包括:存币、取币和查看余额,而且只能由合约发布者才拥有权限。// SPDX-License-Identifier: MITpragma soli ...