The Codebase

แปลโดย : Claude 3 Opus (Pro)

The Codebase

Bitcoin v.0.1 released, read Nakamoto’s email header this time.

Those Cryptography mailing list subscribers who opened the email found Satoshi Nakamoto’s two-sentence description of the newly released project:

“Announcing the first release of Bitcoin, a new electronic cash system that uses a peer-to-peer network to prevent double-spending. It's completely decentralized with no server or central authority.”

Besides the short description, the email included a download link for the software, the link to the project’s website—bitcoin.org—and several paragraphs with additional information, disclaimers (“the software is still alpha and experimental”) and basic instructions for how to use it.

A little over two months since he’d submitted his white paper to the Cryptography mailing list, Satoshi Nakamoto put the first version of the Bitcoin software out there. The program—Bitcoin version 0.1—was ready to be downloaded and used: key pairs could be generated, transactions could be transmitted, and blocks could be mined.

The software release also revealed important new information about the project.

The first thing worth noting—though not at all a big surprise—was that Satoshi Nakamoto released Bitcoin as free and open source software. Anyone was free to copy, use, share, and change the code; published under the MIT license, even proprietary projects could integrate Nakamoto’s work. (This makes the MIT license more permissible than Richard Stallman’s GPL license, which grants this freedom only to other free software projects.)

It was crucial that Bitcoin was free and open source software, because the codebase necessarily had to be auditable: for the system to be truly trustless, users would have to be able to verify that it worked as advertised. This was arguably even more important for Bitcoin than it was for many other software projects, since the code quite literally represented money. In line with Stallman’s free software philosophy, people shouldn’t have to trust Satoshi Nakamoto not to include coin-stealing malware or a secret money-printing backdoor.

More generally, Nakamoto’s free and open source code—written in the programming language C++ and years later described by Bitcoin’s first full-time developer as “brilliant but sloppy”—for the first time fully detailed the inner workings of the electronic cash system.

Transactions for example turned out to use “Script,” a new programming language for Bitcoin inspired by Forth, which was itself designed in the 1960s to operate radio telescopes. Having somewhat tweaked Forth’s functionality, Script could be used to write basic smart contracts on Bitcoin. Coins could be stored so that they could only be moved if certain programmable conditions were met. (A basic example of which was multisignature, or multisig, where not one, but several cryptographic signatures were required to spend coins.)

The signature scheme embedded in Bitcoin was the Elliptic Curve Digital Signature Algorithm (ECDSA), which—as the name suggests—leveraged mathematically generated elliptic curves to calculate key pairs. Invented in 1985, some eight years after RSA, elliptic curve cryptography offered the same level of security as Rivest, Shamir, and Adlemen’s solution, but required much smaller key sizes, and had over the years become a widely used alternative.

At the same time, Nakamoto had added some features to make Bitcoin a bit more user friendly. While payments were for example technically still made to public keys, users could encode their public key (or the hash of their public key) in a Bitcoin address. When receiving funds, only these addresses were typically shared with other users.

The Bitcoin codebase also revealed many of the more-or-less arbitrary parameters that Nakamoto picked. As he’d already hinted at on the Cryptography mailing list earlier, a new block should be found on average every ten minutes. Clusters of 2,016 blocks would then be used to adjust the mining difficulty: if the 2,016 blocks were found in less than two weeks, Bitcoin’s difficulty would be adjusted upwards proportionally, and if it took more than two weeks to find the 2,016 blocks, the proof-of-work difficulty would adjust downwards.

And, to actually get the Bitcoin network started, the codebase also included the very first block: the “Genesis Block.” This first block indeed had to be embedded in the release itself; the block chain needed a jumping-off point. As an interesting detail, however, the block reward in this Genesis Block was effectively worthless: the protocol rules didn’t allow these particular coins to be spent under any condition. In Bitcoin, new coins can only be earned through competitive mining, and Nakamoto apparently refused to accept a one-block head start for himself. If he wanted bitcoin, even he, the creator of the system, had to earn them—just like everyone else.

Further emphasizing his explicit refusal to enjoy some unfair advantage over other Bitcoin users, Nakamoto also included proof that he hadn’t been mining privately in the weeks or months prior to making the code publicly available. He’d embedded a headline from the January 3 front page of English newspaper The Times in the Genesis Block, establishing that this Genesis Block could not have been created before that date—which in turn meant that any subsequent block must have been mined later than that as well.

As an extra touch, the specific headline for this purpose did not appear to be picked at random, either:

The Times 03/Jan/2009 Chancellor on brink of second bailout for banks

The world of money and finance had become a mess. With Bitcoin, Satoshi Nakamoto was proposing an alternative.

โค้ดเบส

บิตคอยน์เวอร์ชัน 0.1 ถูกปล่อยออกมา อ่านหัวข้ออีเมลของนาคาโมโตอีกครั้ง

สมาชิกของกลุ่มเมลลิ่งลิสต์ Cryptography ที่เปิดอีเมลนั้นพบคำอธิบายสองประโยคของซาโตชิ นาคาโมโตเกี่ยวกับโปรเจ็คที่เพิ่งเปิดตัว:

"ประกาศการเปิดตัวบิตคอยน์ครั้งแรก ซึ่งเป็นระบบเงินสดอิเล็กทรอนิกส์รูปแบบใหม่ที่ใช้เครือข่ายแบบเพียร์ทูเพียร์เพื่อป้องกันการใช้จ่ายซ้ำ มันเป็นระบบกระจายอำนาจอย่างสมบูรณ์ ไม่มีเซิร์ฟเวอร์หรือหน่วยงานกลางใดๆ"

นอกจากคำอธิบายสั้นๆ แล้ว อีเมลยังมีลิงก์ดาวน์โหลดซอฟต์แวร์ ลิงก์ไปยังเว็บไซต์ของโปรเจ็ค bitcoin.org และย่อหน้าอื่นๆ ที่มีข้อมูลเพิ่มเติม ข้อความปฏิเสธความรับผิดชอบ ("ซอฟต์แวร์นี้ยังอยู่ในขั้นอัลฟ่าและเป็นแค่ของทดลอง") และคำแนะนำพื้นฐานในการใช้งาน

หลังจากที่เขาส่งเอกสารไวท์เปเปอร์ไปยังเมลลิ่งลิสต์ Cryptography ได้ประมาณ 2 เดือน ซาโตชิ นาคาโมโตก็ปล่อยซอฟต์แวร์บิตคอยน์เวอร์ชันแรกออกมา โปรแกรม Bitcoin เวอร์ชัน 0.1 พร้อมให้ดาวน์โหลดและใช้งานแล้ว โดยสามารถสร้างคู่คีย์ (key pairs), ส่งธุรกรรม และขุดบล็อกได้

การปล่อยซอฟต์แวร์ยังเผยข้อมูลใหม่ที่สำคัญเกี่ยวกับโปรเจ็คนี้ด้วย

ประการแรกที่ควรสังเกต แม้จะไม่ใช่เรื่องน่าแปลกใจเลย คือซาโตชิ นาคาโมโตปล่อยบิตคอยน์ในรูปแบบของซอฟต์แวร์โอเพ่นซอร์สฟรี ทุกคนสามารถคัดลอก ใช้ แชร์ และปรับเปลี่ยนโค้ดได้อย่างอิสระ เนื่องจากเผยแพร่ภายใต้สัญญาอนุญาต MIT แม้แต่โปรเจ็คระบบกรรมสิทธิ์ (proprietary) ก็สามารถนำงานของนาคาโมโตไปใช้ได้ (สัญญาอนุญาต MIT นี้เปิดกว้างกว่าสัญญา GPL ของริชาร์ด สตอลแมน ซึ่งให้อิสรภาพนี้เฉพาะกับซอฟต์แวร์ฟรีอื่นๆ เท่านั้น)

การที่บิตคอยน์เป็นซอฟต์แวร์โอเพ่นซอร์สฟรีนั้นเป็นเรื่องสำคัญมาก เพราะจำเป็นต้องสามารถตรวจสอบโค้ดเบสได้ เพื่อให้ระบบเป็นแบบไร้ความไว้วางใจ (trustless) อย่างแท้จริง ผู้ใช้ต้องสามารถตรวจสอบได้ว่ามันทำงานตามที่โฆษณาไว้จริง อาจถือได้ว่าสิ่งนี้สำคัญต่อบิตคอยน์มากกว่าโปรเจ็คซอฟต์แวร์อื่นๆ เพราะโค้ดนี้หมายถึงตัวเงินโดยตรงเลย สอดคล้องกับแนวคิดซอฟต์แวร์เสรีของสตอลแมน ผู้คนไม่ควรต้องไว้วางใจซาโตชิ นาคาโมโตว่าจะไม่ใส่มัลแวร์ขโมยเหรียญหรือทางลับพิมพ์เงินลับหลัง

โดยทั่วไปแล้ว โค้ดโอเพ่นซอร์สฟรีของนาคาโมโตที่เขียนด้วยภาษาโปรแกรม C++ ซึ่งหลายปีต่อมาถูกนักพัฒนาประจำคนแรกของบิตคอยน์อธิบายว่า "เก่งแต่รกหน่อย" เป็นครั้งแรกที่อธิบายการทำงานภายในของระบบเงินสดอิเล็กทรอนิกส์อย่างละเอียด

ตัวอย่างเช่น ปรากฎว่าธุรกรรมต่างๆ ใช้ "Script" ซึ่งเป็นภาษาโปรแกรมใหม่สำหรับบิตคอยน์ที่ได้แรงบันดาลใจจาก Forth โดย Forth เองก็ถูกออกแบบขึ้นในยุค 1960 เพื่อใช้งานกับกล้องโทรทรรศน์วิทยุ หลังจากปรับเปลี่ยนฟังก์ชันการทำงานของ Forth เล็กน้อย Script สามารถใช้เขียนสัญญาอัจฉริยะ (smart contracts) พื้นฐานบนบิตคอยน์ได้ โดยเหรียญสามารถเก็บไว้ได้โดยจะย้ายได้ก็ต่อเมื่อเงื่อนไขที่กำหนดไว้ในโปรแกรมเป็นจริงเท่านั้น (ตัวอย่างพื้นฐานคือ multisignature หรือ multisig โดยต้องใช้ลายเซ็นทางคริปโตหลายอันไม่ใช่แค่อันเดียวในการใช้จ่ายเหรียญ)

โครงสร้างลายเซ็นดิจิทัลที่ฝังอยู่ในบิตคอยน์คือ Elliptic Curve Digital Signature Algorithm (ECDSA) ซึ่งตามชื่อก็บ่งบอกว่าใช้เส้นโค้งวงรีที่สร้างขึ้นทางคณิตศาสตร์ในการคำนวณคู่คีย์ (key pairs) เทคโนโลยีการเข้ารหัสลับแบบเส้นโค้งวงรี (elliptic curve cryptography) ถูกคิดค้นขึ้นในปี 1985 ราว 8 ปีหลังอัลกอริทึม RSA โดยให้ระดับความปลอดภัยเท่ากับวิธีการของ Rivest, Shamir และ Adlemen แต่ใช้ขนาดคีย์ที่เล็กกว่ามาก และได้กลายเป็นทางเลือกที่ใช้กันอย่างแพร่หลายในช่วงหลายปีที่ผ่านมา

ในขณะเดียวกัน นาคาโมโตได้เพิ่มคุณสมบัติบางอย่างเพื่อทำให้บิตคอยน์ใช้งานง่ายขึ้นสำหรับผู้ใช้ ตัวอย่างเช่น แม้ว่าในทางเทคนิคแล้วการชำระเงินยังคงทำผ่านคีย์สาธารณะ (public key) แต่ผู้ใช้สามารถเข้ารหัสคีย์สาธารณะ (หรือแฮชของคีย์สาธารณะ) ของตนในที่อยู่บิตคอยน์ (Bitcoin address) ได้ เวลารับเงิน ก็จะแชร์เฉพาะที่อยู่เหล่านี้กับผู้ใช้อื่นๆ

โค้ดเบสของบิตคอยน์ยังเปิดเผยพารามิเตอร์ต่างๆ ที่นาคาโมโตเลือกซึ่งค่อนข้างสุ่ม ตามที่เขาเคยบอกใบ้ไว้ในเมลลิ่งลิสต์ Cryptography ก่อนหน้านี้ โดยเฉลี่ยแล้วควรจะพบบล็อกใหม่ทุกๆ 10 นาที จากนั้นกลุ่มของ 2,016 บล็อกจะถูกใช้ในการปรับความยากของการขุด (mining difficulty) หากพบ 2,016 บล็อกในเวลาน้อยกว่า 2 สัปดาห์ ความยากของบิตคอยน์จะถูกปรับขึ้นตามสัดส่วน และหากใช้เวลามากกว่า 2 สัปดาห์ในการหา 2,016 บล็อก ความยากของการพิสูจน์งาน (proof-of-work) ก็จะปรับลง

และเพื่อเริ่มต้นเครือข่ายบิตคอยน์จริงๆ โค้ดเบสยังรวมบล็อกแรกสุดเอาไว้ด้วย นั่นคือ "บล็อกปฐมกำเนิด" (Genesis Block) โดยบล็อกแรกนี้จำเป็นต้องฝังอยู่ในรุ่นที่ปล่อยออกมาเอง เพราะบล็อกเชนต้องมีจุดเริ่มต้น อย่างไรก็ตาม รางวัลบล็อก (block reward) ในบล็อกปฐมกำเนิดนี้ไร้ค่าโดยผลของมันเอง เพราะกฎของโปรโตคอลไม่อนุญาตให้ใช้เหรียญเหล่านี้ได้ไม่ว่ากรณีใด ในบิตคอยน์ เหรียญใหม่จะได้มาจากการขุดแข่งขันเท่านั้น และนาคาโมโตเองก็ปฏิเสธที่จะรับข้อได้เปรียบจากการขุดก่อนหน้าคนอื่นหนึ่งบล็อก ถ้าเขาต้องการบิตคอยน์ แม้กระทั่งตัวเขาเองซึ่งเป็นผู้สร้างระบบก็ต้องได้มันมา เหมือนกับคนอื่นๆ ทุกคน

เพื่อเน้นย้ำการปฏิเสธที่จะได้เปรียบผู้ใช้บิตคอยน์คนอื่นๆ อย่างไม่ยุติธรรม นาคาโมโตยังพิสูจน์ว่าเขาไม่ได้ขุดเองเป็นการส่วนตัวก่อนที่จะเปิดเผยโค้ดต่อสาธารณะเป็นเวลาหลายสัปดาห์หรือหลายเดือน เขาฝังพาดหัวข่าวจากหน้าหนึ่งของหนังสือพิมพ์ The Times ฉบับวันที่ 3 มกราคม ของอังกฤษไว้ในบล็อกปฐมกำเนิด ซึ่งยืนยันว่าบล็อกปฐมกำเนิดนี้ไม่สามารถถูกสร้างก่อนวันดังกล่าวได้ และนั่นหมายความว่าบล็อกที่ตามมาทั้งหมดก็ต้องถูกขุดหลังจากนั้นเช่นกัน

นอกจากนี้ พาดหัวข่าวที่เฉพาะเจาะจงนำมาใช้เพื่อวัตถุประสงค์นี้ก็ไม่ได้ถูกเลือกแบบสุ่มเช่นกัน:

The Times 03/Jan/2009 Chancellor on brink of second bailout for banks (แปล: รัฐมนตรีคลังใกล้จะอุ้มธนาคารครั้งที่สอง)

โลกของการเงินและการธนาคารกำลังยุ่งเหยิง ด้วยบิตคอยน์ ซาโตชิ นาคาโมโตจึงกำลังเสนอทางเลือกใหม่

Last updated