Det blir ännu mer tjusigt: sättet som Etherscan lurades att visa fel implementeringskontrakt bygger på att ställa in 2 olika proxyplatser i samma frontrunning tx. Så Etherscan använder en viss heuristik som innehåller olika lagringsplatser för att hämta implementeringskontraktet. Det finns en gammal proxy från OpenZeppelin som använde följande plats: 'keccak256("org.zeppelinos.proxy.implementation")' = '0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3' Vi har nu också standard EIP-1967-platsen 'bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)' = '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc' Så vad som hände är att den gamla OpenZeppelin-proxyplatsen skrevs till med den godartade implementeringsadressen _och_ standardplatsen EIP-1967 skrevs också till med den skadliga implementeringsadressen. Eftersom Etherscan först frågar efter den gamla proxyplatsen, hämtade den den godartade först och visade den på så sätt.
- gammal OZ-proxyplats: - gamla Etherscan blogg om proxystöd: - Exempel Frontrun TX:
40,99K