Back to Home

Spammer

0x932a9636909b...d4017d6b6f09
Source VerifiedEdit this contract
Deployed December 31, 2016 (9 years ago)Block 2,906,714

New Year 2017 state spam: a contract whose only function reads the balances of 41 busy mainnet accounts, deployed from hundreds of freshly made keys and then never called.

Verified Source

Historical Significance

2016 was the year Ethereum learned that the cheap operations were the dangerous ones. The September attacks made reading other accounts expensive and forced the Tangerine Whistle repricing, then Spurious Dragon added the cleanup of accounts that spam had created. This arrives after both, and it is aimed at what those forks did not fix. Reading balances is no longer cheap enough to be the attack; writing state still is, so the payload is the contract itself.

The pattern of one contract per fresh key is the part worth keeping. It leaves no trail back to a single funder in the creation records, it defeats any per sender heuristic, and it puts permanent entries in the state trie that no later fork removed. Whatever the intent, the result is still there: hundreds of identical kilobytes of code that were never executed, and a function named spam sitting in each one.

Key Facts
Deployment Block
2,906,714
Deployment Date
Dec 31, 2016, 01:08 AM
Code Size
1.0 KB

Description

The author called the function spam, and that is what it does. It reads the ether balance of 41 hardcoded addresses and throws every one of them away. The reads sit inside an inline assembly block as pop(balance(...)), which matters: written as ordinary Solidity the compiler deletes them, because nothing uses the result. Inside assembly it cannot, so the statements survive into the deployed code.

The contract was compiled with solc 0.4.4 and the optimizer switched off, which is how the code ends up as 41 plain repetitions of push, balance, pop with no sharing between them. Both functions are marked payable, and the fallback calls spam, so sending the contract a bare transfer would run all 41 reads.

Nothing ever did. Every instance carries exactly one transaction, its own creation, and each was deployed from a different externally owned account that did nothing else. The work was the deployment: roughly 411,000 gas to write a kilobyte of code, a fresh account entry, and a fresh contract entry into the state, repeated across the turn of the year between the last day of 2016 and 8 January 2017.

Source Verified

Solidityeh_crack_source_verified
Compiler: v0.4.4+

Bytecode Overview

Opcodes1,039
Unique Opcodes246
Jump Instructions17
Storage Operations10

External Links