Solidity事件触发顺序
Solidity event triggering order
我一直在查看 OpenZeppelin 的 Ownable 合约,并遇到了以下方法:
/**
* @dev Allows the current owner to transfer control of the contract to a wOwner.
* @param newOwner The address to transfer ownership to.
*/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
此处,事件 OwnershipTransferred
在实际所有者设置为新所有者之前触发。 EVM 中的方法执行是原子的吗,从某种意义上说,事件只会在方法执行完毕后执行后触发?否则,我看到一些事件侦听器可能会在 EVM 尚未处于正确状态时对此事件采取行动。我不是 100% 相信这是安全可靠的。
改变状态的函数被称为 transactions 的一部分,仅此而已。要么整个交易成功,要么整个交易失败。从外部观察者的角度来看(例如观察事件的东西),是的,交易是原子的。
我一直在查看 OpenZeppelin 的 Ownable 合约,并遇到了以下方法:
/**
* @dev Allows the current owner to transfer control of the contract to a wOwner.
* @param newOwner The address to transfer ownership to.
*/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
此处,事件 OwnershipTransferred
在实际所有者设置为新所有者之前触发。 EVM 中的方法执行是原子的吗,从某种意义上说,事件只会在方法执行完毕后执行后触发?否则,我看到一些事件侦听器可能会在 EVM 尚未处于正确状态时对此事件采取行动。我不是 100% 相信这是安全可靠的。
改变状态的函数被称为 transactions 的一部分,仅此而已。要么整个交易成功,要么整个交易失败。从外部观察者的角度来看(例如观察事件的东西),是的,交易是原子的。