我一直在看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%确信这是安全的。
答案 0 :(得分:2)
变异状态的函数被称为事务的一部分,就是这样。整个事务成功或整个事务失败。从外部观察者的角度来看(例如观察事件的事情),是的,交易是原子的。