我知道回退是在向本合约发送交易并调用一个不存在的函数时触发的,我想理解的是:合约a向合约B发送交易(回退),稳固性代码已经运行到这里,合约B的回退是在此时触发还是在a发送给B的交易完成区块确认后触发回退!
前者正确。当合约B
将交易发送给合约A
时,回退函数触发。
为什么?
因为假设合约A
记录了调用回退的无效函数调用的数量
// Contract A
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
contract FallbackContract {
uint256 public invalidFunctionCalls;
constructor () {
invalidFunctionCalls = 0;
}
fallback() external {
invalidFunctionCalls += 1;
}
}
现在,对于每个无效的函数调用,应该在当前块中增加变量invalidFunctionCalls
以反映此后的无效调用。这意味着一旦触发无效的函数调用,就会调用回退函数。