📙
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
  • ความเข้าใจด้านเทคนิคของ Bitcoin
  • ความรู้พื้นฐานด้านคอมพิวเตอร์
  • Command Line
  • Git
  • Command Line + Bitcoin + Lightning
  • การเขียนโปรแกรม
  • การเขียนโปรแกรม + Bitcoin
  • การเขียนโปรแกรม + Bitcoin Bootcamps
  • การเขียนโปรแกรม + Lightning

ความเข้าใจด้านเทคนิคของ Bitcoin ( Pierre Rochard )

แปลโดย : Claude 3.7 Sonnet / source : https://pierre-rochard.medium.com/understanding-the-technical-side-of-bitcoin-2c212dd65c09

PreviousHow to Review Pull Requests in Bitcoin Core ( Jon Atack )Nextภาษาพื้นฐานใน Bitcoin Core 👾💬🤖

Last updated 1 month ago

ความเข้าใจด้านเทคนิคของ Bitcoin

Pierre Rochard

เมื่อเร็วๆ นี้ ผมได้รับข้อความส่วนตัวทาง Twitter ที่น่าสนใจ: ได้ฟังพอดคาสต์ Tales from the Crypt ตอนแรกของคุณและเห็นด้วยอย่างยิ่งว่าการมีประสบการณ์ด้านคอมพิวเตอร์จะสำคัญมากทั้งสำหรับ bitcoin และอนาคตโดยทั่วไป คุณแนะนำเส้นทางไหนสำหรับการทำความเข้าใจด้านเทคนิคของ btc ผมมาจากพื้นฐานด้านการเงินที่มีความรู้เกี่ยวกับเศรษฐศาสตร์แนวออสเตรียนและอนาร์โค-แคปิตอลลิสม์อย่างมาก แต่ไม่มีประสบการณ์ด้านวิทยาการคอมพิวเตอร์/การเขียนโค้ดเลย ขอบคุณครับ, Nick

ผมเห็นทักษะที่หลากหลายในคำถามนี้ สำหรับแต่ละคำแนะนำเหล่านี้ คุณอาจรู้บางอย่างอยู่แล้ว ข้อมูลที่คุณสามารถอ่านผ่านๆ ได้ และข้อมูลที่คุณเพียงแค่ต้องรู้ว่าคุณไม่รู้ ผมสัญญาคุณว่า: คุณจะไม่มีวันเรียนรู้ทุกสิ่งทุกอย่างเกี่ยวกับคอมพิวเตอร์ ไม่มีวัน สถานะปัจจุบันของเทคโนโลยีคอมพิวเตอร์มีขอบเขตกว้างขวางมาก ประวัติศาสตร์การคำนวณมีความซับซ้อนที่เกี่ยวพันกันหลายทศวรรษ และมีซอฟต์แวร์และฮาร์ดแวร์ใหม่ๆ ออกมาทุกวัน คุณไม่สามารถรู้ทั้งหมดได้ นั่นคือสิ่งที่ทำให้สาขานี้น่าสนใจ! อย่างไรก็ตาม คุณสามารถเรียนรู้ได้เพียงพอที่จะบรรลุเป้าหมายของคุณ ไม่ว่าจะเป็นเพียงการรักษาความปลอดภัย private keys อย่างสมเหตุสมผล การส่งและรับการชำระเงินผ่าน BTC/LN ไปจนถึงการสร้างแอปพลิเคชันเว็บ BTC/LN เต็มรูปแบบ

หากคุณมีข้อเสนอแนะเพื่อปรับปรุงคู่มือนี้หรือมีคำถามใดๆ เกี่ยวกับเรื่องนี้ ติดต่อผมทาง Twitter @pierre_rochard หรืออีเมลผมที่ pierre@rochard.org ขอบคุณครับ!

ความรู้พื้นฐานด้านคอมพิวเตอร์

อ่านภาพรวมของส่วนประกอบฮาร์ดแวร์คอมพิวเตอร์ต่างๆ ซึ่งเป็นวัตถุทางกายภาพที่คุณจะเข้าถึง: https://www.explainingcomputers.com/hardware.html

อ่านหนังสือ ที่แนะนำโดยวิศวกรโปรโตคอล Lightning, Lisa Neigut ผมยังไม่ได้อ่าน (ยัง!) แต่รีวิวบน Amazon ดูมีแนวโน้มที่ดีมาก

เรียนรู้การพิมพ์: https://www.typing.com/

เพื่อให้ได้ภาพรวมระดับสูงของระบบปฏิบัติการจากมุมมองของผู้ใช้ ให้หาหนังสือ "For Dummies" ล่าสุดสำหรับระบบปฏิบัติการที่คุณใช้: Linux, macOS หรือ Windows หากคุณมีเวลาและความสนใจ ให้ติดตั้งระบบปฏิบัติการทั้งสามระบบบนคอมพิวเตอร์เครื่องเดียวกันหรือต่างเครื่องกัน เพื่อดูว่าคุณชอบระบบไหนและเพื่อเข้าถึงซอฟต์แวร์ที่มีเฉพาะในระบบปฏิบัติการนั้นๆ

Command Line

ในฐานะผู้ใช้ คุณอาจหยุดแค่นี้ แต่ถ้าคุณต้องการเข้าใจด้านเทคนิค คุณจะต้องคุ้นเคยกับ command line ซึ่งเป็นอินเทอร์เฟซที่มีเพียงข้อความ ที่เมาส์ของคุณ (มักจะ) ไร้ประโยชน์! Command line interface (CLI) เป็นสิ่งตรงข้ามกับสิ่งที่คุณอาจคุ้นเคยกับการโต้ตอบ นั่นคือ graphical user interface (GUI) ผมรู้เพียงพอเกี่ยวกับ CLI ที่จะใช้งานได้ แต่มีคนที่เป็นปรมาจารย์ด้าน CLI Windows มี CLI ที่แตกต่างจาก Linux และ macOS มาก ดังนั้นผมจึงแนะนำให้ติดตั้ง Windows Subsystem for Linux (WSL) มันจะช่วยให้คุณเรียนรู้ command line ในแบบที่สามารถนำไปใช้กับ macOS และ Linux ได้โดยทั่วไป

มีคู่มือมากมายออนไลน์ และเอกสารภายใน command line เอง Christopher Allen ได้เขียนบทเรียนที่เน้น macOS https://github.com/ChristopherA/intro-mac-command-line และ Codecademy มีคอร์สในเบราว์เซอร์: https://www.codecademy.com/learn/learn-the-command-line

Git

git เป็นระบบควบคุมเวอร์ชันแบบกระจายที่ใช้กันอย่างแพร่หลายในการพัฒนาซอฟต์แวร์ ผมคิดว่า git เป็นสิ่งสำคัญที่ควรเรียนรู้เพราะมันถูกใช้โดยโปรเจกต์ Bitcoin และ Lightning ทั้งหมดที่ผมเคยพบ (แก้ไขผมหากผมผิด!) และเอกสารด้านเทคนิคมักจะใช้ git และจะเป็นการดีถ้าคุณสามารถมีส่วนร่วมในการแก้ไขข้อผิดพลาด การแก้ไข การปรับปรุง และการเพิ่มเติม "upstream" ขณะที่คุณอ่านเอกสาร GitHub.com เป็นบริการเว็บที่สร้างขึ้นบน git พร้อม GUI แต่ git โดยทั่วไปจะทำงานในเครื่องคอมพิวเตอร์/แล็ปท็อปของคุณเองโดยใช้ CLI นี่คือแหล่งข้อมูลและบทเรียนสำหรับเริ่มต้นใช้งาน git: https://try.github.io/​​​​​​​​​​​​​​​​

Command Line + Bitcoin + Lightning

อ่าน Mastering Bitcoin อย่างละเอียด: https://www.amazon.com/Mastering-Bitcoin-Unlocking-Digital-Cryptocurrencies/dp/1449374042 หรือ https://github.com/bitcoinbook/bitcoinbook

ศึกษาผ่าน Programming with Bitcoin Core and Lightning โดย Christopher Allen: https://github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line/blob/master/README.md

Bitcoin Improvement Proposals (BIPs) มีความหลากหลาย ดังนั้นอาจมุ่งเน้นไปที่ข้อเสนอที่ดูเหมือนจะปรากฏบ่อยในสิ่งที่คุณอ่าน ผมไม่แนะนำให้พยายามนั่งอ่านทั้งหมดตั้งแต่ต้นจนจบ นี่คือทั้งหมด: https://github.com/bitcoin/bips/blob/master/README.mediawiki

Mastering Bitcoin มีส่วนสั้นๆ เกี่ยวกับ LN อ่าน LN Technical Primer ของ Joe Kendzicky: https://blog.usejournal.com/the-bitcoin-lightning-network-a-technical-primer-d8e073f2a82f ซึ่งแนะนำโดย Billy Garrison

ข้อกำหนดที่กำลังดำเนินการของ LN อยู่ที่นี่: https://github.com/lightningnetwork/lightning-rfc ผมขอแนะนำอย่างยิ่งให้อ่าน BOLTs เหล่านี้อย่างละเอียดจากต้นจนจบ สักสองสามครั้งหากจำเป็น! พวกมันเป็น หรือควรจะเป็น สิ่งที่เข้าใจได้สำหรับผู้ที่ไม่ใช่นักพัฒนา (หากมีอะไรไม่ชัดเจน ให้วิจัยเพื่อเขียน BOLT ใหม่และส่ง pull request!)

ผมขอแนะนำให้ดูชุดวิดีโอ Chaincode Labs Lightning Residency ที่นี่ https://www.youtube.com/watch?v=aX7lOqf83h0&list=PLpLH33TRghT1SbxinAsNDS6L7RkAjC8ME อ่านภาพรวมของ Lighting Labs https://dev.lightning.community/overview/ และศึกษาผ่านบทเรียน CLI ของ Lightning Labs https://dev.lightning.community/tutorial/

หากคุณต้องการลิงก์เพิ่มเติมอีกมากเกี่ยวกับ Bitcoin / blockchain / Lightning ดูคู่มือของ Oded Leiba https://github.com/oleiba/blockchain-getting-started

หากคุณหยุดแค่นี้ คุณจะมีประสบการณ์ด้านคอมพิวเตอร์ที่แข็งแกร่งมาก อย่างน้อยก็มีความเข้าใจพื้นฐานเกี่ยวกับด้านเทคนิคของ BTC/LN และมีเส้นทางที่ชัดเจนในการทดลองใช้ซอฟต์แวร์ของผู้อื่น แต่บางทีคุณอาจต้องการเขียนซอฟต์แวร์ของคุณเอง!​​​​​​​​​​​​​​​​

การเขียนโปรแกรม

ผมคิดว่าถ้าคุณพยายามเรียนรู้หัวข้อการเขียนโปรแกรมที่เกี่ยวข้องโดยตรงกับการใช้งาน Bitcoin ที่นิยมที่สุด ("Bitcoin Core" หรือเรียกว่า "bitcoind") คุณอาจจะรู้สึกท่วมท้น ตามความรู้ของผม ไม่มีเส้นทางการเรียนรู้ที่ราบรื่นสำหรับการเรียน C++ ผมคิดว่าง่ายกว่าที่จะเรียนภาษาอย่าง Python ก่อน เนื่องจากมันซ่อนความซับซ้อนมากมายและช่วยให้คุณสามารถมุ่งเน้นไปที่การเรียนรู้พื้นฐานของตรรกะการเขียนโปรแกรมก่อน โดยบังเอิญ ชุดทดสอบของ Bitcoin Core เขียนด้วย Python

มีหลายสิ่งที่ได้เขียนไว้เกี่ยวกับการเรียนรู้วิธีการเขียนโค้ด เส้นทางของผมคือเริ่มต้นด้วย Python บน Codecademy https://www.codecademy.com/learn/learn-python

เพื่อนของผม Michael Goldstein เริ่มต้นด้วยหนังสือสอน Ruby on Rails ที่เขียนโดย Michael Hartl ซึ่งมีทรัพยากรฟรีและเสียเงินที่ยอดเยี่ยมมากมายที่นี่: https://www.learnenough.com/ ติดตาม Hartl บน Twitter ได้ที่นี่: https://twitter.com/mhartl

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

บ่อยครั้ง สภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE) สามารถชี้ให้เห็นปัญหาโดยอัตโนมัติเพื่อให้คุณมีประสบการณ์ของโปรแกรมเมอร์หลายสิบปีช่วยคุณ ส่วนตัวผมสนุกกับการใช้ JetBrains ผู้ผลิต IDE ตลอดหลายปีในทุกภาษา สำหรับ Python พวกเขามี PyCharm (รุ่นชุมชนเป็นฟรี รุ่นโปรฟรีสำหรับนักศึกษามหาวิทยาลัย) https://www.jetbrains.com/pycharm/

คุณยังสามารถสร้างสภาพแวดล้อมคล้าย Codecademy ที่เป็นเว็บและมีการโต้ตอบสูงด้วย Jupyter IPython https://ipython.org/ ผมขอแนะนำจริงๆ สำหรับการทดลองที่รวดเร็ว

หากหลังจากประสบการณ์นั้นคุณติดการเขียนโปรแกรมและ Python เหมือนที่ผมเป็น ลองดู https://docs.python-guide.org/

ผมเรียนรู้การพัฒนาเว็บพื้นฐานโดยติดตาม Flask Mega-Tutorial ของ Miguel Grinberg: https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world

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

การพัฒนาเว็บแบบ "Full stack" นำไปสู่การเรียนรู้เกี่ยวกับฐานข้อมูลแบบ relational และ document, key/value stores, message queues, concurrency, networking และอื่นๆ ที่มีความเกี่ยวข้องบางส่วนหรือทั้งหมดกับการเขียนโปรแกรม BTC/LN อย่างไรก็ตาม คุณสามารถเรียนรู้แนวคิดเหล่านี้ทั้งหมดโดยทำงานกับ BTC/LN โดยตรงแทนที่จะเป็นการพัฒนาเว็บที่ไม่เกี่ยวข้องอย่างที่ผมทำ!

เมื่อคุณชำนาญและสบายใจกับ "การเขียนสคริปต์แบบมือสมัครเล่น" ให้เริ่มท้าทายตัวเอง ไม่ว่าคุณจะใช้ภาษาโปรแกรมสมัยใหม่ใด มีหนังสือ "ระดับกลาง" และ "ขั้นสูง" ในหัวข้อเช่น การเขียนโปรแกรมเชิงวัตถุและเชิงฟังก์ชัน นอกจากนี้ยังมีหนังสือที่น่าสนใจมากที่เกี่ยวกับสถาปัตยกรรมซอฟต์แวร์ คุณภาพของโค้ด วิธีการพัฒนา การทดสอบ และอื่นๆ คุณสามารถพัฒนาทักษะการเขียนโปรแกรมของคุณได้เสมอโดยการเรียนรู้ภาษาใหม่ๆ ที่น่าสนใจ อ่านโค้ดที่ได้รับการยอมรับอย่างกว้างขวางว่ามีคุณภาพสูง และขอให้มีการตรวจสอบโค้ดบน StackExchange: https://codereview.stackexchange.com/​​​​​​​​​​​​​​​​

การเขียนโปรแกรม + Bitcoin

ศึกษาผ่าน Learn Blockchains by Building One โดย Daniel van Flymen: https://hackernoon.com/learn-blockchains-by-building-one-117428612f46

ทดลองใช้ Tinychain แบบเรียบง่ายของ James O'Beirne: https://github.com/jamesob/tinychain

หากคุณเลือกที่จะเรียนรู้ JavaScript คุณโชคดี! Stéphane Roche เพิ่งเขียนคู่มืออย่างละเอียดเกี่ยวกับ BitcoinJS: https://github.com/bitcoin-studio/Programming-Bitcoin-with-BitcoinJS

ณ จุดนี้ หากคุณต้องการแฮกภายใน Bitcoin Core คุณจะต้องเรียนรู้ C++! ทางเลือกอื่นคือ btcd ซึ่งเขียนด้วย Go และโดยทั่วไปถือว่าอ่านง่ายกว่า หรือ bcoin ซึ่งเขียนด้วย JavaScript

ก่อนที่คุณจะเริ่มการผจญภัยกับ C++ ให้พิจารณาแวะไปที่ Rust เนื่องจากอาจช่วยให้เส้นโค้งการเรียนรู้ราบรื่นขึ้น

ผมเรียนรู้พื้นฐานของ C++ ด้วย https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113 และ https://en.cppreference.com/w/

ผมพบว่าการสร้างตัวอย่างโดยใช้ xeus-cling https://github.com/QuantStack/xeus-cling ซึ่งเป็น IPython แต่สำหรับ C++ มีประโยชน์ ผมพบว่าสิ่งนี้มีประโยชน์ในการทำให้การทำซ้ำเร็วกว่าสภาพแวดล้อม C++ แบบดั้งเดิมที่ต้องคอมไพล์ใหม่ตลอดเวลา

อ่าน Contributing to Bitcoin Core, a personal account โดย John Newbery: https://bitcointechtalk.com/contributing-to-bitcoin-core-a-personal-account-35f3a594340b

อ่านเกี่ยวกับการมีส่วนร่วมได้ที่นี่: https://github.com/bitcoin/bitcoin/blob/master/CONTRIBUTING.md

อ่านบันทึกการประชุมล่าสุดเพื่อดูว่าคนอื่นๆ กำลังทำงานอะไรอยู่: https://bitcoincore.org/en/meetings/

ผมสร้างเว็บไซต์สำหรับดู pull requests ของ Bitcoin Core ทั้งหมดที่สามารถให้คุณเห็นภาพว่ามีอะไรในไปป์ไลน์และคืบหน้าไปแค่ไหนในกระบวนการตรวจสอบ: https://bitcoinacks.com/

การเขียนโปรแกรม + Bitcoin Bootcamps

แต่ละ bootcamp มีจุดเน้นที่แตกต่างกัน เยี่ยมชมเว็บไซต์ของพวกเขาสำหรับหัวข้อ วันที่ และราคา:

Jimmy Song → https://programmingblockchain.com/

Justin Moon → https://buidlbootcamp.com/

Vortex → https://programmingwithbitcoin.com/

การเขียนโปรแกรม + Lightning

มีการใช้งานเต็มรูปแบบหลายตัวให้ดู เรียงตามลำดับตัวอักษร:

c-lightning เขียนด้วย C: https://github.com/ElementsProject/lightning Billy Garrison ชี้ให้เห็นว่ามีตัวอย่าง Python ของวิธีการเขียนโปรแกรมกับ c-lightning ที่นี่: https://github.com/ElementsProject/lightning/blob/master/contrib/pylightning/lightning/lightning.py

eclair เขียนด้วย Scala (รูปแบบการเขียนโปรแกรมเชิงฟังก์ชันของ Java): https://github.com/ACINQ/eclair

LND เขียนด้วย Go: https://github.com/lightningnetwork/lnd

ศึกษาผ่านคู่มือเชิงลึกของ André Neves เพื่อช่วยให้คุณเริ่มต้นและปรับปรุงเวิร์กโฟลว์การพัฒนาแอปพลิเคชัน Lightning ของคุณ: https://medium.com/lightwork/lightning-network-development-for-modern-applications-e4dd012dac82​​​​​​​​​​​​​​​​

Code: The Hidden Language of Computer Hardware and Software โดย Charles Petzold