📙
Learning Bitcoin Core
bitcoincore reviewsEdit
  • 📙 [TH] การมีส่วนร่วมใน Bitcoin Core ( Github )
    • [EN] Contributing to Bitcoin Core ( Github )
  • คำนำอย่างละเอียดถึงการพัฒนา Bitcoin Core ( Jimmy Song )
  • การมีส่วนร่วมใน Bitcoin Core ประสบการณ์ส่วนตัว ( John Newbery )
  • การเข้าร่วมพัฒนา Bitcoin Core ( Amiti Uttarwar )
  • How to Review Pull Requests in Bitcoin Core ( Jon Atack )
  • ความเข้าใจด้านเทคนิคของ Bitcoin ( Pierre Rochard )
  • ภาษาพื้นฐานใน Bitcoin Core 👾💬🤖
  • RPC หรือ Remote Procedure Call 🏦🌐⚙️
  • PSBT / Mining & Nonce / SHA-256 📦🎲#️⃣
  • Candidate Block / Chain Tip / Merkle Root / GBT & Stratum Protocol / SPV Client 🎰⛓️🤿🫚📱
  • OP_ ต่างๆ / Bitcoin Script / Hash Preimage / BOLT / Taproot / Eltoo / STARK / ZKP 📜⚡️🐺🌳
  • ลักษณะของ VAULT เมื่อเป็นผลิตภัณฑ์ 🏦🔏🗝️⏳
  • การแก้แค้นของ Junior Developer❤️‍🔥🐦‍⬛💻
Powered by GitBook
On this page
  • 👤 : ภาษา C , C++ , C#
  • ความเหมือนและความแตกต่าง
  • การพัฒนาต่อยอด
  • 👤 : กำลังศึกษาการเป็น reviewer และ contributor ใน bitcoin core และอ่านๆในบทความ dev bitcoin แนะนำให้ศึกษา c++ กับ python
  • ภาษา C++ ใน Bitcoin Core
  • ภาษา Python ใน Bitcoin Core
  • คำสั่งและแนวคิดพิเศษที่ควรรู้
  • คำแนะนำในการเริ่มต้น
  • เครื่องมือที่ควรเรียนรู้

ภาษาพื้นฐานใน Bitcoin Core 👾💬🤖

อธิบายโดย : Claude 3.7 Sonnet

👤 : ภาษา C , C++ , C#

เหมือนและต่างกันอย่างไร และถูกพัฒนาไปเป็นภาษาอะไรแล้วบ้าง และพัฒนาเป็นอะไรบ้าง ?

💬 : ภาษา C, C++ และ C# เหมือนและต่างกันอย่างไร

ความเหมือนและความแตกต่าง

ภาษา C

  • เป็นภาษาโปรแกรมมิ่งระดับกลาง พัฒนาโดย Dennis Ritchie ที่ Bell Labs ในช่วงปี 1972

  • เป็นภาษาเชิงกระบวนการ (Procedural) ที่มุ่งเน้นฟังก์ชัน

  • ไม่มีแนวคิดการเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming)

  • มีการจัดการหน่วยความจำแบบ Manual

  • มีประสิทธิภาพสูงและใช้ทรัพยากรน้อย

  • ใช้มากในการพัฒนาระบบปฏิบัติการ เฟิร์มแวร์ และซอฟต์แวร์ระดับล่าง

ภาษา C++

  • พัฒนาต่อจากภาษา C โดย Bjarne Stroustrup ในปี 1983

  • เพิ่มความสามารถเชิงวัตถุแต่ยังคงรองรับการเขียนแบบ C

  • มีคุณสมบัติเพิ่มเติม เช่น คลาส, การสืบทอด (Inheritance), Polymorphism

  • มี Templates สำหรับการเขียนโปรแกรมเชิงกฎเกณฑ์ (Generic Programming)

  • การจัดการข้อผิดพลาดด้วย Exceptions

  • ยังคงต้องจัดการหน่วยความจำเอง แต่มีเครื่องมือช่วยเพิ่มขึ้น

  • ใช้สำหรับพัฒนาเกม ระบบเครือข่าย และซอฟต์แวร์ที่ต้องการประสิทธิภาพสูง

ภาษา C# (C Sharp)

  • พัฒนาโดย Microsoft ในปี 2000 เป็นส่วนหนึ่งของ .NET Framework

  • เป็นภาษาเชิงวัตถุอย่างสมบูรณ์

  • มีการจัดการหน่วยความจำอัตโนมัติด้วย Garbage Collection

  • มีคุณลักษณะทันสมัย เช่น LINQ, Lambda Expressions, Async/Await

  • รองรับ Properties, Events, Delegates

  • มีระบบนิยามประเภท (Type System) ที่ปลอดภัยมากขึ้น

  • ใช้สำหรับพัฒนาแอปพลิเคชัน Windows, เว็บไซต์, เกม (Unity), และแอปพลิเคชันมือถือ

การพัฒนาต่อยอด

จากภาษา C พัฒนาเป็น

  • C++ (เพิ่มความสามารถ OOP)

  • Objective-C (ใช้ใน Apple macOS และ iOS ก่อนหน้า Swift)

  • D (เป็นการปรับปรุง C++ โดยเน้นความง่ายและปลอดภัยมากขึ้น)

  • Go (พัฒนาโดย Google เพื่อทดแทนความซับซ้อนของ C++)

  • Rust (เน้นความปลอดภัยของหน่วยความจำแต่ยังคงประสิทธิภาพเทียบเท่า C)

จากภาษา C++ พัฒนาเป็น

  • C++11, C++14, C++17, C++20 (มาตรฐานเวอร์ชันใหม่ที่เพิ่มคุณสมบัติมากมาย)

  • CUDA C++ (สำหรับการโปรแกรมการ์ดจอ NVIDIA)

  • Swift (ได้รับอิทธิพลบางส่วนจาก C++ และทดแทน Objective-C ใน Apple)

จากภาษา C# พัฒนาเป็น

  • C# 2.0 ถึง C# 11.0 (เวอร์ชันล่าสุด ณ ปี 2024)

  • F# (ภาษาเชิงฟังก์ชันบนแพลตฟอร์ม .NET)

  • Visual Basic .NET (ถูกออกแบบให้ทำงานร่วมกับ C# บน .NET)

  • PowerShell (ใช้หลักการจาก .NET และ C#)

  • Blazor (เฟรมเวิร์คสำหรับพัฒนาเว็บแอปพลิเคชันโดยใช้ C#)

ทั้งสามภาษามีอิทธิพลต่อวงการโปรแกรมมิ่งอย่างมาก โดย C เป็นรากฐานสำคัญของการพัฒนาภาษาโปรแกรมมิ่งสมัยใหม่หลายภาษา C++ เพิ่มความสามารถเชิงวัตถุในขณะที่ยังรักษาประสิทธิภาพสูง และ C# เป็นภาษาที่ทันสมัยที่รวมความสะดวกในการพัฒนาเข้ากับความสามารถที่หลากหลายบนแพลตฟอร์ม .NET​​​​​​​​​​​​​​​​

👤 : กำลังศึกษาการเป็น reviewer และ contributor ใน bitcoin core และอ่านๆในบทความ dev bitcoin แนะนำให้ศึกษา c++ กับ python

จึงอยากเข้าใจและเห็นภาพก่อนว่าจะต้องเจอกับคำสั่งไหน ของภาษาใด เป็นหลักบ้าง เพื่อที่จะได้ทำความเข้าใจโครงสร้างของ codebase ทั้งหมด และจะได้ศึกษาได้ตรงจุดต่อไป ? 💬 : การเตรียมตัวเป็น Reviewer และ Contributor สำหรับ Bitcoin Core

การเป็น reviewer และ contributor ใน Bitcoin Core เป็นเป้าหมายที่ดีมาก! Bitcoin Core นั้นเขียนด้วยภาษา C++ เป็นหลัก โดยมี Python สำหรับเครื่องมือทดสอบและสคริปต์ช่วยต่างๆ ผมจะแนะนำโครงสร้างหลักและคำสั่งสำคัญที่คุณควรคุ้นเคยเพื่อเข้าใจ codebase

ภาษา C++ ใน Bitcoin Core

C++ เป็นภาษาหลักของ Bitcoin Core เนื่องจากความเร็ว ประสิทธิภาพ และการควบคุมหน่วยความจำได้ดี ต่อไปนี้คือส่วนประกอบหลักที่ควรศึกษา:

1. โครงสร้างพื้นฐาน C++ ที่ใช้บ่อยใน Bitcoin Core

  • คลาสและวัตถุ: class, struct, public, private, protected - เช่น class CBlock, class CTransaction

  • Smart Pointers: std::unique_ptr<>, std::shared_ptr<> - ช่วยจัดการหน่วยความจำอัตโนมัติ

  • Containers: std::vector<>, std::map<>, std::set<>, std::unordered_map<> - ใช้เก็บข้อมูลหลายๆ ประเภท

  • Templates: ใช้มากใน Bitcoin Core เพื่อสร้าง generic code

  • Concurrency: std::thread, std::mutex, std::lock_guard<> - สำหรับการทำงานแบบขนาน

2. ไลบรารีพิเศษที่ Bitcoin Core ใช้

  • Boost: เช่น boost::signals2 สำหรับ event handling

  • Custom serialization framework: ใช้สำหรับการแปลงข้อมูลไปมาระหว่างรูปแบบเก็บข้อมูลและส่งข้อมูลในเครือข่าย

  • OpenSSL: สำหรับการเข้ารหัสและฟังก์ชันแฮช

3. ไดเร็กทอรีสำคัญใน Bitcoin Core (C++)

  • src/: โค้ดหลักของ Bitcoin Core

    • src/consensus/: กฎฉันทามติของ Bitcoin

    • src/primitives/: โครงสร้างข้อมูลพื้นฐาน เช่น block, transaction

    • src/script/: ภาษาสคริปต์ของ Bitcoin

    • src/wallet/: โค้ดที่เกี่ยวกับกระเป๋าเงิน

    • src/net/: การสื่อสารเครือข่าย P2P

    • src/validation/: การตรวจสอบบล็อคและธุรกรรม

    • src/rpc/: JSON-RPC API

    • src/policy/: นโยบายที่ไม่ใช่กฎฉันทามติ (เช่น fee estimation)

ภาษา Python ใน Bitcoin Core

Python ใช้หลักๆ สำหรับการทดสอบและเครื่องมือ:

1. การทดสอบ

  • test/functional/: ทดสอบการทำงานร่วมกันของคอมโพเนนต์ต่างๆ

  • Pytest framework: ใช้ทดสอบอัตโนมัติ

2. เครื่องมือและสคริปต์

  • contrib/: ไดเร็กทอรีนี้มีสคริปต์ Python หลายตัว

  • share/rpcauth/: สคริปต์สำหรับสร้าง authentication credentials

คำสั่งและแนวคิดพิเศษที่ควรรู้

C++ Concepts ที่เฉพาะเจาะจงใน Bitcoin Core:

  1. RAII (Resource Acquisition Is Initialization): แนวคิดการจัดการทรัพยากรที่ใช้มากใน C++

    {
        LOCK(cs_main); // ล็อคจะถูกปลดโดยอัตโนมัติเมื่อออกจาก scope
        // ทำงานกับข้อมูลที่มีการล็อค
    }
  2. Serialization framework:

    READWRITE(vtx); // อ่านหรือเขียน vector ของธุรกรรม
  3. RPC Commands:

    UniValue getblockchaininfo(const JSONRPCRequest& request) {
        // implementation
    }
  4. Consensus rules:

    bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW = true, bool fCheckMerkleRoot = true);

Python patterns ที่นิยมใช้:

  1. ใช้ Framework การทดสอบ:

    def test_simple_send(self, node, wallet):
        # Test sending coins
        node.sendtoaddress(wallet.getnewaddress(), 1.0)
  2. RPC ผ่าน Python:

    node.getblockcount()  # เรียกใช้ RPC getblockcount

คำแนะนำในการเริ่มต้น

  1. สร้างความคุ้นเคยกับ C++ ระดับกลาง-สูง:

    • Smart pointers

    • Templates

    • Move semantics (std::move)

    • Lambda expressions

    • Threading และ concurrency

  2. เรียนรู้ Python สำหรับการทดสอบ:

    • pytest framework

    • RPCAuth

    • อ่านและทำความเข้าใจ test cases

  3. เข้าใจหลักการพื้นฐานของ Bitcoin:

    • กลไก consensus

    • UTXO model

    • Blockchain validation

    • Transaction verification

    • P2P network protocol

  4. เริ่มจากการศึกษา Pull Requests:

    • ติดตาม pull requests ใหม่ๆ ใน GitHub

    • อ่านโค้ดและ code reviews จากนักพัฒนาอื่นๆ

  5. เริ่มทำการทดสอบง่ายๆ:

    • เขียนหรือปรับปรุง test cases

    • แก้ไขปัญหาเล็กๆ ใน documentation

  6. ใช้ GitHub ของ Bitcoin Core เพื่อดูโค้ดจริง:

    • https://github.com/bitcoin/bitcoin

เครื่องมือที่ควรเรียนรู้

  1. gdb/lldb: สำหรับ debug โปรแกรม C++

  2. git: ควบคุมการเวอร์ชัน

  3. CMake: ระบบการ build

  4. Valgrind: หา memory leaks

  5. clang-format: จัดรูปแบบโค้ด

เริ่มจากการคอมไพล์และรัน Bitcoin Core ในโหมด debug จากนั้นลองทดสอบด้วย Python test framework จะช่วยให้คุณเข้าใจวิธีการทำงานของระบบโดยรวมได้ดียิ่งขึ้น

เมื่อเริ่มมีความคุ้นเคยมากขึ้น ลองพิจารณาเริ่มต้นด้วยการแก้ไขเล็กๆ เช่น documentation fixes หรือแก้ bugs ง่ายๆ ที่มี tag "good first issue" ใน GitHub repository​​​​​​​​​​​​​​​​

Previousความเข้าใจด้านเทคนิคของ Bitcoin ( Pierre Rochard )NextRPC หรือ Remote Procedure Call 🏦🌐⚙️

Last updated 1 month ago