Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 68.1MB ·虚拟内存 1300.5MB
欢迎来到 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 ...