Bitcoin Institute

Eric Swanson

lachesis, who built the mining calculator Satoshi thanked him for

Figures

Dark-navy illustration in three panels linked by dotted arrows: a mining calculator with hash-rate and difficulty fields and the quote "Thanks for making that calculator."; an authorization-header bug panel with a base64 line broken at 64 characters and an "SVN rev 110" badge; and a 64-bit register grid with its sign bit highlighted above the value 92233720368.54277039 BTC. A timeline below marks four dates from June to August 2010.

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:

Quote 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.

2010Registers on BitcoinTalkas lachesis (Jun 3)Asks for the formula fortime per block (Jun 4)Satoshi thanks him forthe calculator (Jul 14)His base64 fix goes intoSVN as rev 110 (Jul 25)Reads block 74638'svalue as INT64_MAX(Aug 15)listtransactions ships in0.3.18 (Dec 8)

The formula he asked for (June 2010)

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”.

Bugs in the RPC interface (July 2010)

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.

Arguing with Satoshi

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.

Block 74638 (August 15, 2010)

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:

Quote 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.

Later

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.

Related Entries

46 entries