Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 66.4MB ·虚拟内存 1300.5MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
solidity 回退函数 fallback 没有参数、没有返回值。
solidity 回退函数在两种情况被调用:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Fallback { event eventFallback(string); fallback() external payable { emit eventFallback("fallbak"); } // 查看合约账户余额 function getBalance() external view returns(uint) { return address(this).balance; } }
我们向合约 Fallback 发送一笔 123 wei 的交易,查看日志:
[ { "from": "0xd457540c3f08f7F759206B5eA9a4cBa321dE60DC", "topic": "0x39684f4c14ee0aafaa34ed83629676cd0fbe71653659c3353ef0c33f630e7eab", "event": "eventFallback", "args": { "0": "fallbak" } } ]
我们调用合约 Fallback 的 getBalance 方法,查看合约地址的余额为 123 wei。
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Fallback { event eventFallback(string); fallback() external payable { emit eventFallback("fallbak"); } } contract SoldityTest { // 外部合约 address private fb; constructor(address addr) { fb = addr; } function callFallback() external view returns(string memory) { // 调用合约 Fallback 不存在的方法 echo() bytes4 methodId = bytes4(keccak256("echo()")); // 调用合约 (bool success,bytes memory data) = fb.staticcall(abi.encodeWithSelector(methodId)); if(success){ return abi.decode(data,(string)); } else { return "error"; } } }
我们先部署合约 Fallback,再使用 Fallback 的地址来部署 SoldityTest,调用 Fallback 方法 echo 方法,就会触发 Fallback 的 fallback 方法。
solidity 接收函数 receive 没有参数、没有返回值。solidity 向合约转账,发送 Eth,就会执行 receive 函数。如果没有定义接收函数 receive,就会执行 fal ...