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 的一部分,仅此而已。要么整个​​交易成功,要么整个交易失败。从外部观察者的角度来看(例如观察事件的东西),是的,交易是原子的。