0xae4705dc…5fedsent to0xada31add…8617·#25,266,944·view on Etherscan
Nouns now go to DAO instead of burning.
Route No-Bid Nouns to the Treasury is reentrancy-safe, but the original write-up justified it with a guard that isn't actually applied in the deployed V4. Correcting the record:
The "Why transferFrom and not safeTransferFrom" section says _settleAuction() "is invoked from nonReentrant external functions." That's not accurate to the live contract — V4 inherits ReentrancyGuardUpgradeable and calls __ReentrancyGuard_init(), but no function actually carries the nonReentrant modifier (settleAuction / settleCurrentAndCreateNewAuction / createBid are guarded only by whenPaused / whenNotPaused). The guard is inherited from the V2/V3 lineage and never wired up.
The change is still reentrancy-safe, for two reasons:
Checks-effects-interactions — auctionStorage.settled = true is set before any external call, so a re-entrant _settleAuction() reverts on require(!_auction.settled). The swapped line sits exactly where nouns.burn() was, so this ordering is unchanged.
transferFrom (unlike safeTransferFrom) does not invoke onERC721Received, so control is never handed to the recipient.
No new reentrancy surface — but it rests on CEI + a hookless transfer, not on a nonReentrant guard. Correcting so the reasoning isn't reused as a template for a future AH change.