Strange block 74638
lachesis identifies the unusual output value as INT64_MAX (2^63/10^8), not UINT64_MAX — the first technical diagnosis of the value-overflow incident.
lachesis, who built the mining calculator Satoshi thanked him for

On July 14, 2010, at 17:04 UTC, Satoshi Nakamoto answered a user whose mining had gone quiet, and opened with a line of thanks addressed to someone else:
SNQuote from: Satoshi Nakamoto on July 14, 2010, 5:04:02 PM UTC“Thanks for making that calculator.”
The calculator was for mining: enter your hash rate and the current difficulty, and it returned the average time until you found a block. The reply came three and a half hours later from the forum user lachesis: “No problem, Satoshi. Alloscomp.com is my domain.” It named a website rather than a person. A week later, in the docstring of a small Python library he posted to the forum, the same user signed his work “Eric Swanson”. His GitHub account still carries the handle lachesis under that name, and the calculator is still on alloscomp.com.
Swanson registered on BitcoinTalk on June 3, 2010. His first post, a few hours later, asked for math: given the difficulty and his own rate of about a million hashes per second, how long should a block take on average? theymos answered with a formula that multiplied by a “target probability” of 0.5, and a few days later another user corrected it to 1. Swanson put the arithmetic on a web page of his own. By July 13 other users were answering each other’s “why haven’t I generated anything?” questions with a link to alloscomp.com/bitcoin/calculator.php.
Satoshi used it too. On July 16 he announced that the difficulty stood at 45.38, with the calculator’s address in parentheses, and on July 31 he asked the forum for a page projecting the next adjustment, “like that handy calculator”.
Swanson called himself “not a C programmer”, and then patched the client anyway. In early June he copied the transaction-list code from the GUI into a new RPC command, listgenerated, so that he could see when his machine had generated a block, and he offered the patch with the warning that he was sure it did not work right. He ran a site that polled bitcoind for payments to many addresses twice a minute, and when the server’s answer to several requests in one call broke Python’s HTTP libraries, he wrote his own client over a raw socket and posted it about an hour later. That is the library whose docstring carries his name.
On July 25 at 19:52 he reported that bitcoind’s base64 encoder inserted a newline every 64 characters, so a long enough username and password broke the client’s own authorization header. He posted the fix with it. At 21:34 Satoshi replied that it was in SVN as rev 110, crediting him for “having such a long password”, and Gavin Andresen proposed a simpler flag-based fix four minutes later. In August he asked whether Bitcoin opened its Berkeley DB files exclusively, tested it himself, and found it did not; Satoshi dropped the DB_PRIVATE flag in rev 153.
He did not defer. When Satoshi fixed a Linux tray bug by removing minimize-to-tray, Swanson wrote: “Satoshi, you didn’t fix the bug; you just ripped out the minimize to tray code.” When Satoshi explained that he had avoided protocol buffers because large libraries were hard to make airtight, Swanson pointed at the scripting language inside every transaction: “You’re comfortable writing a whole evaluation language letting the blocks suggest operations to the client, but you’re not comfortable using a library like protocol buffers?”
The longest dispute was over listtransactions. Swanson asked for it on June 22, and Satoshi answered the same day that too many programmers would use it to check for received payments, which could never be reliable. When Satoshi repeated the refusal at the end of July, Swanson came back on July 31: “We really shouldn’t adopt a policy of protecting users from themselves.” The command shipped in Bitcoin 0.3.18 on December 8, 2010, as part of the accounts commands Gavin Andresen had been writing.
On July 29, Jeff Garzik answered a question about what would happen in Satoshi’s absence with “It’s called open source”. Two hours later, at 01:01 UTC on July 30, Swanson asked for something more concrete: that “somebody else had commit access to the SVN and there was an explicit plan in place to continue in Satoshi’s absence.” Gavin Andresen’s first SVN commit came in October; the handover itself followed in December.
At 18:08 UTC Jeff Garzik opened a thread called “Strange block 74638” with a transaction output of 92,233,720,368.54277039 BTC and a guess: “Is that UINT64_MAX, I wonder?” Nine minutes later the first reply came from Swanson:
LQuote from: lachesis on August 15, 2010, 6:17:35 PM UTC“It’s 2^63/10^8, so it looks like it’s INT64_MAX, not UINT64_MAX”
The correction was one bit wide and it was the right bit. The number sat just below the largest value a signed 64-bit integer can hold, read in bitcoins, and it is the sign that made the value overflow incident possible: two outputs that size add up past the top of the range and wrap to a negative total, which the validation code accepted. The thread for the bug itself opened at 19:04, and Satoshi’s fix followed less than six hours after Garzik’s first post.
In the same days he sent small amounts of his own coins to people who had done work for the forum: 5.01 BTC to ArtForz on August 9 for tracking down a broken SHA-256 routine in the 64-bit 0.3.8 build, and 2 BTC to Tilka on August 15 for compiling the changelog the project had not yet published.
Sixty-eight of his posts, from June 4 to August 20, 2010, are in this archive. His BitcoinTalk profile records 259 posts in all and a last visit in October 2020. Under the same handle on GitHub he later published Scallion, a GPU tool for generating vanity Tor .onion addresses whose README names vanitygen, the Bitcoin vanity-address generator, as its inspiration.
Almost everything Swanson wrote in 2010 asked the software to report on itself: how long a block should take, whether his machine had found one, what the hash rate was, which versions the peers were running, where the transactions went. On August 15 the network produced a number nobody had asked for, and he read it correctly in nine minutes. I count that as the same habit, not a lucky moment. He had spent ten weeks insisting that the numbers be visible, and when one finally mattered he was already looking at it.
46 entries
lachesis identifies the unusual output value as INT64_MAX (2^63/10^8), not UINT64_MAX — the first technical diagnosis of the value-overflow incident.
Context post by lachesis in BitcoinTalk topic 43. after msg1323.
Context post by lachesis in BitcoinTalk topic 218. after msg1828.
Context post by lachesis in BitcoinTalk topic 240. after msg2132.
Context post by lachesis in BitcoinTalk topic 343. after msg2880.
Context post by lachesis in BitcoinTalk topic 286. after msg2947.
Context post by lachesis in BitcoinTalk topic 441. after msg4095.
Context post by lachesis in BitcoinTalk topic 550. after msg5378.
Context post by lachesis in BitcoinTalk topic 576. quotes Satoshi.
Context post by lachesis in BitcoinTalk topic 628. after msg6508.
Context post by lachesis in BitcoinTalk topic 611. quotes Satoshi.
Context post by lachesis in BitcoinTalk topic 696. after msg7364, quotes Satoshi.
Context post by lachesis in BitcoinTalk topic 760. after msg8413, quotes Satoshi.
Context post by lachesis in BitcoinTalk topic 434. quotes Satoshi.
Context post by lachesis in BitcoinTalk topic 813. after msg9454.
Context post by lachesis in BitcoinTalk topic 145. after msg1256.
Quoted post by lachesis in BitcoinTalk topic 589.
Quoted post by lachesis in BitcoinTalk topic 806.
Quoted post by lachesis in BitcoinTalk topic 782.
Context post by lachesis in BitcoinTalk topic 158. before msg1582.
Context post by lachesis in BitcoinTalk topic 183. before msg1620.
Context post by lachesis in BitcoinTalk topic 199. quoted by msg1670.
Context post by lachesis in BitcoinTalk topic 171. before msg1815.
Context post by lachesis in BitcoinTalk topic 242. before msg2078.
Context post by lachesis in BitcoinTalk topic 305. before msg2895.
Context post by lachesis in BitcoinTalk topic 383. before msg3339.
Context post by lachesis in BitcoinTalk topic 461. before msg4775.
Context post by lachesis in BitcoinTalk topic 528. before msg5416.
Context post by lachesis in BitcoinTalk topic 632. before msg7090.
Context post by lachesis in BitcoinTalk topic 287. before msg7694.
Context post by lachesis in BitcoinTalk topic 788. before msg8804.
Context post by lachesis in BitcoinTalk topic 823. before msg9648.
Context post by lachesis in BitcoinTalk topic 84. before msg1579.
Context post by lachesis in BitcoinTalk topic 55. before msg1596.
Context post by lachesis in BitcoinTalk topic 149. before msg1653.
Context post by lachesis in BitcoinTalk topic 217. before msg1827.
Context post by lachesis in BitcoinTalk topic 72. before msg2886.
Context post by lachesis in BitcoinTalk topic 299. before msg3008.
Context post by lachesis in BitcoinTalk topic 393. before msg3510.
Context post by lachesis in BitcoinTalk topic 437. before msg4037.
Context post by lachesis in BitcoinTalk topic 626. quoted by msg6542.
Context post by lachesis in BitcoinTalk topic 753. before msg8388.
Context post by lachesis in BitcoinTalk topic 601. before msg8924.
Context post by lachesis in BitcoinTalk topic 862. before msg10290.
Eric Swanson ↔ Satoshi Nakamoto
lachesis starts a discussion: Dealing with SHA-256 Collisions.
Eric Swanson ↔ Satoshi Nakamoto
lachesis starts a discussion: Feature Request: Limiting Connections.