หลังจากไม่ได้เขียนบล็อกมาตั้งแต่สมัยหนุ่มๆ มาวันนี้ตัองเตรียมตัวพรีเซ้นท์งานเรื่อง Blockchain ให้เข้าใจง่ายๆ เลยถือโอกาสเขียนอธิบายง่ายๆในนี้แทน ไม่แน่ใจว่าจะงงกว่าเดิมหรือเปล่า จะพยายามอธิบายให้ง่ายที่สุดนะครับ
ทุกวันนี้คำว่า “Blockchain” เป็นคำที่ยอดฮิตมากในปี 2016 นี้ แม้แต่ Gartner ยังยกให้เป็น 1 ใน 10 เทคโนโลยีมาแรงในปีหน้า (2017) เคียงคู่กับ AI, IoT, Drone, etc.
http://www.gartner.com/smarterwithgartner/gartners-top-10-technology-trends-2017/
ที่นี้ก็มีปัญหาอยู่ว่าทุกคนได้ยิน Blockchain ทุกคนอยากทำ Blockchain ทุกคนอยากดูกิ๊บเก๋ด้วยคำว่า Blockchain แต่ไม่เข้าใจว่ามันคืออะไร จะทำอย่างไรให้อธิบายให้คนอื่นเข้าใจได้ง่ายๆ
ก่อนอื่นต้องเริ่มต้นย้อนกลับไปเมื่อปี 2008 เมื่อครั้งที่เกิดวิกฤต Subprime ที่อเมริกา ค่าเงิน USD ตกต่ำเป็นประวัติการณ์ แถมอยู่ดีๆพี่กันแกบอกว่าจะทำ QE ปั๊มเงินเข้าระบบโดยไม่ต้องมีทองมารับประกัน ทำกันง่ายๆเลยได้ด้วย อ้าว.. เฮ้ย.. ไม่เหมือนที่คุยไว้นี่
คนเลยเริ่มไม่มั่นใจในระบบการเงินที่มีรัฐบาลกลางเป็นคนรับรองค่าเงิน (Fiat Currency) จึงมีกระทานายคนหนึ่งชื่อ Satoshi Nakamoto ซึ่งเป็นนามสมมุติ จนบัดนี้ยังหาตัวไม่เจอว่าเป็นใคร ได้ตีพิมพ์เอกสาร ชื่อ “Bitcoin: A Peer-to-Peer Electronic Cash System”
https://drive.google.com/viewerng/viewer?url=https://bitcoin.org/bitcoin.pdf
ที่นี่คนก็เริ่มสนใจ มีการพัฒนาระบบการเงินแบบไม่ต้องมีคนกลาง (P2P, Peer-to-Peer) ขึ้นมาชื่อว่า Bitcoin และสร้างเหรียญ Bitcoin แรกขึ้นมา (Genesis coin) ขึ้นมาเมื่อปี 2009
หลังจากนั้นคนก็เริ่มให้ความสนใจและพัฒนา Platform ของตนเองขึ้นมาอย่างมากมาย ทั้งแบบใช้พื้นฐานบน Bitcoin หรือเป็นแบบเอกเทศตั้งตนขึ้นมาแข่งกับ Bitcoin
ปูพื้นฐานก่อนนะ
ก่อนที่จะเข้าเรื่องของ Bitcoins และ Blockchain ต้องทำความเข้าใจก่อนว่า Bitcoin เกิดขึ้นมาโดยใช้หลักการของระบบ Decentralized โดยจะกระจายการเก็บข้อมูลไว้ที่ทุกคน แทนที่จะไว้ที่ส่วนกลาง และมีการเข้ารหัส โดยจะใช้กระบวนการที่เรียกว่า HASH (SHA-256)
CENTRALIZED/ DECENTRALIZED / DISTRIBUTED NETWORK คืออะไร ?
จากความเดิมที่ทุกคนไม่ไว้ใจในระบบธนาคารกลางที่มีการรวมศูนย์ของข้อมูล ถ้าตรงกลางมีคนโกงขึ้นมาก็จบ ถ้าตรงกลางเกิดใช้งานไม่ได้ก็จบ
จึงมีความคิดว่าทำอย่างไรที่จะไม่ให้ข้อมูลไปกระจุกไว้ที่คนๆ เดียว จึงมีแนวคิดที่ให้ข้อมูลไปเก็บไว้ที่ทุกคนซะเลย ทุกคนมีระบบจัดเก็บข้อมูลของตัวเอง ซึ่งเรียกว่า Node ไว้ทำการตรวจสอบข้อมูล ยืนยันข้อมูล
แต่ระบบข้อมูลแบบกระจายตัวก็มีปัญหาตามมาว่า เราจะเชื่อใจทุกคนที่อยู่ในระบบได้อย่างไร ? ถ้าเกิดมีใครปลอมแปลงข้อมูลขึ้นมาจะตรวจสอบได้อย่างไร ? แล้วจะตรวจสอบข้อมูลที่ถูกต้องได้อย่างไร? จึงเป็นที่มาของเทคโนโลยี Blockchain ที่นำมาเพื่อใช้แก้ปัญหาเหล่านี้
HASH คืออะไร?
คือ การเข้ารหัสทางเดียว โดยจะสร้าง Digital Signature ของข้อมูล Digital ที่ไม่สามารถถอดรหัสกลับมาได้ และใช้เป็นตัวแทนของข้อมูลนั้นๆ โดยใช้หลักการของ Private key และ Public key
สมมุติว่าจะเข้ารหัสข้อความ “I am IceZ”
ทำการเข้ารหัสด้วย Function Hash โดยใช้ Private Key ของผู้ส่ง ออกมาเป็น Digital Signature
- เมื่อได้ Digital Signature มาก็จะส่งให้กับผู้รับ พร้อมกับ Public Key
- ผู้รับตรวจสอบ Digital Signature ที่ได้โดยใช้ Public Key ของผู้ส่งถ้าได้ค่า Hash ที่ตรงกันก็จบ .. Happy ending ตรวจสอบได้ว่าเป็นข้อความที่ถูกต้อง เชื่อถือได้
โดยการใช้ Hash Function จะมีคุณสมบัติหลักๆ คือ
- ค่า Hash ของข้อความเดิมจะต้องเหมือนกันเสมอ ไม่ว่าจะ Hash กี่รอบ ข้อความ “I am World Wide Wealth” ก็ต้องได้ค่า Hash ที่เหมือนเดิมเสมอ
- Collision-Free : ค่า Hash ของข้อมูลที่ไม่เหมือนกันจะไม่มีทางเหมือนกัน เช่น ถ้าเข้ารหัสข้อความ “I am World Wide Wealth” กับ “i am world wide wealth”ก็จะไม่มีทางได้ค่าที่เหมือนกัน
3. Hiding : ไม่สามารถนำค่า Hash ที่ได้มาเพื่อถอดรหัสกลับหาค่าข้อความเดิมได้
4. ค่า Hash จะมีความยาวเท่ากันเหมือนไม่ว่า ข้อความนั้นจะสั้นหรือยาว กล่าวคือถ้าเรา Hash ข้อความข้างต้น หรือใส่ไปทั้งไฟล์ ค่า Hash ที่ได้ก็จะมีความยาวเท่ากัน
และ Bitcoin ก็ได้นำเอาคุณสมบัติเหล่านี้มาใช้ ในการตรวจสอบความถูกต้องของรายการโดย สร้างเป็น Ledger Address ของแต่ละบัญชี เพื่อใช้แทนเลขที่บัญชี โดย Address ของ Bitcoin จะสร้างจาก
- Private Key ซึ่งเป็น User/ Password หรือเป็น Secret words ที่แต่ละคนจะกำหนดไว้ ซึ่งทุกคนต้องจำให้ได้ หายไปก็จบเข้าไปใช้งานบัญชีตัวเองไม่ได้นะ
- สร้าง Public Key จาก Private Key ขึ้นมา
- เมื่อได้ Public Key ก็จะทำการคำนวณหาค่า Hash (SHA-256) เพื่อให้ได้ค่าที่มีความยาว 33–34 Bytes (Base58 string) และใช้แทนเลขที่บัญชี
ส่งเงินให้กันอย่างไร ?
ในเมื่อทุกคนมีเลขที่บัญชีแล้ว ต่อไปก็จะส่งเงินให้กันและกัน โดยจะใช้เลขที่บัญชีที่ได้นั้นแหล่ะ เป็นตัวอ้างอิงในการส่ง เช่น
- ALICE บอกว่าจะส่งเงินให้ BOB 1,000 บาท
- ALICE สร้างรายการบอกว่ามีการโอนเงินให้ BOB 1,000 บาท แล้วเข้ารหัสด้วย Private Key ของ ALICE
- ALICE ส่งรายการไปให้ทุกคนเก็บไว้
- ทุกคนสามารถเห็นว่า ALICE ส่งเงินให้ BOB เท่าไร และ ALICE มีเงินเหลือเท่าไร และยืนยันความถูกต้อง โดยใช้ Public Key ของ Alice (ก็คือเลขที่บัญชีของ Alice นั่นแหล่ะ) ในการตรวจสอบ
ทุกคนสามารถเห็นได้ (ดูผ่านเว็บเช่น https://blockchain.info, https://blockexplorer.com)แต่ไม่สามารถทำรายการโอนออกจากบัญชีของ ALICE ได้ เนื่องจากไม่มี Private Key หรือถ้าทำได้ก็จะไม่ถูกต้องอยู่ดีเพราะไม่ได้เข้ารหัสด้วย Private Key ของ Alice
Unspent Transaction Output, UTXO
เนื่องจากใน Bitcoin จะไม่มีการเก็บจำนวนเงิน Balance คงเหลือ Bitcoin จึงใช้วิธีการ UTXO ในการเก็บค่าของแต่ละ TRX โดยจะต้องคำนวณได้ว่า Output = Input
ตัวอย่าง
Alice ได้รับเงินมาจากคนอื่น 10 เหรียญ (TRX#1)
Alice ได้รับเงินมาจากอีกคน 2 เหรียญ (TRX#2)
Alice ส่งเงินให้ Bob 5 เหรียญ (TRX #3) และให้ Charlie 1 เหรียญ (TRX #4)
Alice ก็จะเหลือเงินอยู่อีก 6 เหรียญ แต่เนื่องจาก Bitcoin ไม่เก็บ Balance ในบัญชีไว้ (ทุกสิ่งอย่างเป็นแค่รายการเดินบัญชี) ทำไงล่ะ ? Alice ก็ต้องส่งเงินทอนกลับไปที่ตัวเองอีก 6 เหรียญ
ก็ดูดีนะแล้วมีปัญหาอะไร ?
เนื่องด้วยเราใช้ระบบแบบกระจายตัวจะมีปัญหาอยู่ก็คือ
- ไม่ทราบว่ารายการไหนเกิดก่อนหรือหลัง ?
2. จะทำอย่างไรถ้ามีคนแก้ไขรายการที่เกิดขึ้นแล้ว จะตรวจสอบได้อย่างไร ?
3. Double Spending: ถ้ามีคนเอาเหรียญอันเดียวกันไปจ่ายให้คนสองคน ? จะตรวจสอบได้อย่างไร ?
เราเลยต้องมาใช้ Block ?
ในที่นี้จะขออ้างอิงถึง Block ของ Bitcoins เพราะว่าเป็น Blockchain ที่แพร่หลายมากที่สุดในตอนนี้
ปํญหา ?
ไม่ทราบว่า TRX ไหนเกิดก่อนหรือหลัง ?
- เพื่อแก้ไขปัญหาว่ารายการไหนมาก่อนหรือหลัง จะมีการรวมรายการในช่วงเวลาใกล้เคียงกันให้เป็น Block เดียวกันและทำการสร้าง Hash แทนค่าของ Block นั้น
- เวลาทำการยืนยันข้อมูลก็จะได้ทำพร้อมกันไม่ต้องเสียเวลาทำทีละรายการ
- ใช้ Timestamp เข้ามาช่วยยืนยันความต่อเนื่องในแต่ละ Chain โดยค่าของ Timestamp จะต้องบอกถึงค่า Timestamp ของ Block ก่อนหน้านั้นด้วย
ปัญหาถัดไป ?
2. จะทำอย่างไรถ้ามีคนแก้ไข TRX ที่เกิดขึ้นแล้ว จะตรวจสอบได้อย่างไร ?
3. Double Spending: ถ้ามีคนเอาเหรียญอันเดียวกันไปจ่ายให้คนสองคน ? จะตรวจสอบได้อย่างไร ?
เพื่อป้องกันการแก้ไขข้อมูลในรายการที่เกิดขึ้น จึงได้นำเอา Block ที่ได้มาต่อกันโดยเชื่อมโยงกับ Block ก่อนหน้าด้วยค่า HASH ของ Block ก่อนหน้านั้น แล้วสร้างเป็นค่า HASH ใหม่ของ Block นั้น และเชื่อมต่อกันไปเรื่อยๆ ในกรณีนี้เวลามีคนแก้ไขข้อมูลใน ฺBlock เมื่อเทียบกับค่า Hash ใน Block ก่อนหน้าก็จะเห็นว่าไม่ตรงกัน เราก็จะรู้ได้ทันทีว่ามีการแก้ไขข้อมูล วิธีการนี้เราเลยเรียกมันว่า
“Blockchain”
แล้วไง? ก็แก้อันก่อนหน้าไปเรื่อยๆสิ
พูดง่ายแต่ทำยากเนื่องจากว่าเมื่อเวลาผ่านไปเรื่อยๆ ก็จะมีคนยืนยัน Block และประกาศเข้าไปต่อใน Chain ไปเรื่อยๆ ซึ่งถ้าคุณจะแก้ไขทุก Block ก่อนหน้าให้ทันก่อนที่จะมีคนมายืนยันและต่อ Block ใหม่เข้าไป (เวลาประมาณ 10 นาที) คุณก็จะต้องมีคอมพิวเตอร์ที่มีความสามารถในการยืนยัน Block ที่เร็วมาก และสามารถแก้ไขทุก Block ได้ก่อนที่จะมีคนต่อได้
Miner ยืนยันความถูกต้อง บุรุษผู้ปิดทองหลังพระ
ในระบบนี้เราจะเรียกผู้ที่ช่วยยืนยันความถูกต้องของรายการว่า “Miner” โดยใช้วิธีการ Proof-of-Work ดังนี้
- รายการใหม่แต่ละรายการจะถูกประกาศไปยังทุก Node
- แต่ละ Node จะทำการเก็บข้อมูลของรายการและเก็บรวบรวมเป็น Block
- แต่ละ Node จะเป็นผู้ตรวจสอบความถูกต้องของแต่ละ Block โดยใช้การคำนวณแก้โจทย์ทางคณิตศาสตร์เพื่อหาค่า Nounce ที่อยู่ในแต่ละ Block ถ้ามีค่า Block Hash เริ่มต้นด้วย 0 ก็จะประกาศเป็น Block ที่ถูกต้องและเชื่อมต่อใน Blockchain
- ค่าความยากจะมีการปรับขึ้นไปเรื่อยๆ เมื่อมีการประกาศ Block ที่ถูกต้องได้ ทุกๆ 2016 Block (ปัจจุบัน, Dec-2016, ต้องหาค่า Hash ที่มีเลข 0 นำหน้าถึง 17 หลักด้วยกัน)
ไม่ได้เหนื่อยฟรีนะ Miner จะได้รับค่าตอบแทนเป็น Bitcoin จำนวนหนึ่งเมื่อทำการยืนยัน Block
จึงมีการแข่งขันกัน Miner ที่มีคอมพิวเตอร์ที่มีความสามารถในการประมวลผลสูงๆ จะสามารถคำนวณและประกาศ Block ได้ก่อน
แต่ก็มีข้อควรระวังคือ ถ้า Miner สามารถสร้าง Node ที่มีการประมวลผลสูงมากๆ จนเกิน 51% ของความสามารถในการคำนวณของทั้งระบบ Miner นั้นก็อาจจะสามารถปลอมแปลงข้อมูลใน Blockchain ได้ Sybil Attack (51% Attack)
Orphan Block ?
ในกรณีที่มีการส่ง Block มาในเวลาเดียวกัน Block ที่ถูกยืนยันก่อนก็จะเป็น Block ที่ถูกต้องและ Block อีกอันจะเป็น Orphan Block และถูกส่งกลับไปต่อคิวใหม่ใน Unconfirmed Pool เพื่อรอการยืนยันใหม่ ทำให้ไม่สามารถนำเหรียญเดียวกันมาใช้พร้อมกันได้
CONSENSUS METHOD: วิธีการยืนยันรายการ
Proof-of-Work (Bitcoins)
- ใช้ Computing power เพื่อเล่นเกมส์ในการถอดรหัสของ Block การถอดรหัสปัญหายากขึ้นเรื่อยๆ ทำให้ต้องใช้ Computing Power ที่สูงขึ้น
- สามารถสร้าง computer ที่มี Computing power สูงๆ เพื่อมาโกงได้
Proof-of-Stake (Peercoin/ NXT/ (Ethereum))
- ใช้หลักการว่าใครที่มีจำนวนเหรียญในครอบครองมากก็จะมีความสามารถในการยืนยันรายการได้มาก โดยสามารถยืนยัน Block ได้ตามสัดส่วนของจำนวนเหรียญที่ถือครองอยู่
Proof-of Existance (Fatcom)
- ตรวจสอบความมีจริงของแต่ละ Node โดยจะต้องมีการยืนยันตัวตนของ Node แต่ะ Node ก่อนจึงจะได้การยอมรับ
PBFT: Practical Byzantine Fault Tolerance (HyperLedger)
- ใช้วิธีการ Vote โดยนับจำนวนเสียงข้างมาก (2N+1 /3)
Full Node / Lightweigh Node (Thin Client)
ถ้าเราจะใช้ระบบ Blockchain เราจะต้องตั้ง Node ขึ้นมาเพื่อเชื่อมต่อกับระบบของ Bitcoin เพื่อใช้เก็บข้อมูล ยืนยัน Block และติดต่อกับ Node อื่นเพื่อประกาศ Block ใหม่ โดยเราสามารถตั้ง Node ได้ 2 แบบคือ
Full Node:
คือ Node ที่มีการโหลดข้อมูลของ Blockchain ทั้งหมดมาเก็บไว้ที่ตัวเอง ซึ่งดูเหมือนไม่ยากแต่ คิดง่ายๆ ยกตัวอย่างของ Bitcoin ปัจจุบัน (DEC-2016) Block size ทั้งหมดจะอยู่ที่ 95 GB แค่คิดจะโหลดมาก็เหนื่อยล่ะครับ ซึ่งทุกคนที่ไม่จำเป็นต้องใช้ Full Node ตลอด
Lightweight Node/ Thin Client:
สำหรับคนที่คิดจะใช้งานทั่วไปเฉยๆ เช่นโอนเงิน เช็คยอดเงิน ไม่คิดจะต้องมีการทำ Proof-of-Work ยืนยันความถูกต้องของ Block ใหม่ ก็ไม่จำเป็นต้องเหนื่อยทำ Full Node เราสามารถใช้ Node อีกแบบคือ Lightweight Node มาใช้งาน
ซึ่งเจ้า Thin Client นี้จะใช้วิธีการ SPV: Simplified Payment Verification โดยจะโหลดมาเฉพาะส่วน Header ของแต่ละ Block มาเก็บไว้ และจะใช้ Bloom Filter (Query Database) จาก Full Node และดึงข้อมูลที่เราอยากได้มาดู
SMART CONTRACTS ?
กลับมาที่ Timeline เดิม ตอนแรกๆ Blockchain ที่พัฒนาออกมานั้นจะอ้างอิงพื้นฐานของ Bitcoin คือเป็นเรื่องเกี่ยวกับเงินๆทองๆ อย่างเดียว แล้วต้องใช้คอมพิวเตอร์ตั้งเยอะแยะมายืนยันรายการ เปลืองไฟน่าดูเลย ทำไมไม่เอามาทำอย่างอื่นบ้างแทนที่จะส่งแค่จำนวนเงิน
หลายๆท่านเลยแตกแขนงออกมาเป็น Blockchain Platform มากมาย โดยที่ดังๆ ก็จะมีคือ
- Bitcoin-based : Litecoin, Dogecoin, Namecoin, Monero, Dash, counterparty.io ใช้พื้นฐานมาจาก Bitcoin ทำในเรื่องเงินๆทองๆ
- Ethereum: แตกแขนงมาจาก Bitcoin โดยมีความสามารถพิเศษที่จะใส่ Programming script ลงไปได้ด้วย สามารถเขียน Condition ให้ตรวจสอบได้ ว่าถ้าตรงเงื่อนไขที่กำหนดไว้ก็จะให้ทำอะไร เช่น จ่ายเงินไปยังผู้อื่น
3. HyperLedger: ก่อตั้งโดย Linux Foundation โดยมีจุดประสงค์ในการนำ Blockchain ไปใช้ในเชิงธุรกิจ ทำเป็น Private Blockchain ที่ทุกคนจะต้องเป็นสมาชิกก่อนถึงจะใช้งานได้ ทำให้มีความปลอดภัยมากขึ้น
4. Ripple: มุ่งเน้นทำเป็น ฺBlockchain ที่ใช้ในการทำ Settlement ระหว่างธนาคาร จึงดังในแวดวงการเงินการธนาคาร
จะเห็นว่าจริงๆแล้ว Blockchain สามารถทำอะไรได้มากมายนอกจากเรื่องเงินๆทองๆ ดังนั้น “Blockchain ไม่ใช่ Bitcoin”
Bitcoin ไม่ใช่ทุกอย่างของ Blockchain เป็นเพียงแค่ Blockchain แบบหนึ่งเท่านั้น เราสามารถนำ Blockchain ไปต่อยอดพัฒนาใช้ได้กับหลายๆอย่าง ตัวอย่างเช่น
แถมศัพท์เทคนิคเล็กน้อย
ในแวดวง Blockchain จะได้ยินศัพท์เทคนิคว่า Soft Fork, Hard Fork อยู่เป็นประจำ มันคืออะไรนะเหรอ ?
FORK ก็แปลตรงตัวแปลว่า ส้อม นึกถึงส้อมมีด้านจับอันเดียวแต่พอมาที่ปลายก็แตกแขนงเป็นหลายอัน ในแวดวงคอมพิวเตอร์ก็เหมือนกันคือถ้าเราต้องการที่จะแตกแขนง Program ไหนสักอันหนึ่งมาเป็นแขนงของตัวเองเพื่อพัฒนาต่อไปก็จะใช้วิธีการ Fork นี่หล่ะ
Fork เกี่ยวอะไรกับ Blockchain ล่ะ ? เนื่องจาก Blockchain เป็นระบบที่ออกแบบมาเพื่อไม่ให้ใครก็ตามสามารถแก้ไขข้อมูลในระบบได้เลย ดังนั้นถ้าเกิดข้อผิดพลาดขึ้นมา วิธีแก้ไขก็คือต้องทำการ Fork แก้ไข Code หรือข้อมูลใน Blockchain
“HARD FORK”
คือการเปลี่ยนแปลงกฎระเบียบในตัว Blockchain ให้เป็นแบบใหม่ไปเลย โดยที่เมื่อทำการ Hard Fork แล้วจะทำให้ Block เดิมที่ไม่ถูก Upgrade ด้วยกลายเป็น Block ที่ไม่ถูกต้องและถูกเตะออกจากระบบไป ผู้ใช้งานในระบบก็ต้อง Upgrade Node ของตัวเองเพื่อรองรับระบบใหม่ด้วย ไม่งั้นก็จะใช้งานไม่ได้
ที่ผ่านมา Hard Fork ที่เป็นข่าวดังๆก็คือระบบของ Ethereum ที่มีผู้ถูกขโมยเงินออกไปจากโปรแกรม DAO เป็นมูลค่าหลายสิบล้านเหรียญ วิธีการเอาคืนมาให้ถูกต้องก็คือต้องทำการ Hard Fork และทำให้เงินที่ถูกขโมยไปเป็นโมฆะ หรืออีกครั้งคือเมื่อมีผู้โจมตีระบบ Ethereum มีการใส่ Code ที่ทำให้ระบบไม่สามารถยืนยัน Block หนึ่งได้ ระบบก็ไปต่อไม่ได้ ต้องมีการทำ Hard Fork แก้ไขระบบขึ้น จนปัจจุบันนี้ Ethereum ได้ทำการ Hark Fork ไปแล้ว 3 ครั้งเพื่อปรับปรุงประสิทธิภาพของระบบ
“SOFT FORK”
คล้ายๆกับ Hard Fork แต่เบากว่าหน่อย (เลยเรียก Soft Fork ไง) มีการเปลี่ยนแปลงกฎระเบียบที่ใช้ในตัว Blockchain เช่นกัน เพียงแต่ว่าไม่โหดให้ Block เก่ากลายเป็นโมฆะไป Block เดิมก็ยังสามารถใช้ได้อยู่ภายในกฎเดิม
References:
- Bitcoin: A Peer-to-Peer Electronic Cash System, https://bitcoin.org/bitcoin.pdf
- Bitcoin Wiki, https://en.bitcoin.it/wiki/Main_Page
- Coursera: Bitcoin and Cryptocurrency Technologies, https://www.coursera.org/learn/cryptocurrency
- Blockchain คืออะไร? อธิบายแบบละเอียด แต่เข้าใจง่าย(มั้ง, )https://nuuneoi.com/blog/blog.php?read_id=900
- Blockchain for Geek … เบื้องหลังการทำงานฉบับ Technical ตัวอย่างจาก Bitcoin, https://nuuneoi.com/blog/blog.php?read_id=901
- http://www.investopedia.com/terms
- http://withbitco.in/book/