การวิเคราะห์ทางเทคนิค: อะไรคือความแตกต่างระหว่างสัญญาอัจฉริยะบน Ethereum, Bitcoin และ Bitcoin Cash?
หมายเหตุบรรณาธิการ: บทความนี้มาจากคลังสินค้าชั้นหนึ่ง (ID: first_vip1)พิมพ์ซ้ำโดย Odaily โดยได้รับอนุญาต

หมายเหตุบรรณาธิการ: บทความนี้มาจาก
คลังสินค้าชั้นหนึ่ง (ID: first_vip1)
พิมพ์ซ้ำโดย Odaily โดยได้รับอนุญาต
บทความนี้มุ่งเน้นไปที่ความแตกต่างที่สำคัญระหว่างสัญญาอัจฉริยะบนแพลตฟอร์มทั้งสามนี้ เนื่องจากการมุ่งเน้นที่สัญญาอัจฉริยะและฟังก์ชันการเขียนสคริปต์ พื้นฐานของแพลตฟอร์มหรือบล็อกเชนจะไม่ถูกกล่าวถึงในที่นี้ บทความนี้ยังแนะนำสัญญาอัจฉริยะบนเครือข่าย และการมีอยู่ของโซลูชันสัญญาอัจฉริยะชั้นสองหลายตัว เช่น RSK โซลูชันเหล่านี้ควรค่าแก่การพูดคุยอย่างแน่นอน และฉันจะไม่ทำการศึกษาเชิงลึกมากนักเนื่องจากพื้นที่ว่าง
ชื่อเรื่องรอง
Ethereum: มันมีสถานะของตัวเองและ Turing เสร็จสมบูรณ์
คำอธิบายภาพ
รูปภาพ: โครงสร้างค่าธรรมเนียม EVM
การทำธุรกรรมแต่ละครั้งมีค่าใช้จ่ายจำนวนมากของก๊าซ ขึ้นอยู่กับรหัส opcode ที่ใช้ ค่าธรรมเนียมก๊าซจะชำระด้วยสกุลเงินดิจิทัลดั้งเดิมของ Ethereum หรือ ETH เพื่อจำกัดจำนวนการคำนวณที่โหนดเหล่านี้ต้องดำเนินการต่อบล็อก จึงมีขีดจำกัดเกี่ยวกับปริมาณของก๊าซที่สามารถใช้ได้ในบล็อกเดียว ซึ่งเรียกว่า "ขีดจำกัดของบล็อกแก๊ส"
ในระหว่างการดำเนินการของฟังก์ชันสัญญาอัจฉริยะ สัญญาสามารถจัดเก็บและเข้าถึงข้อมูลที่จำเป็นได้ ข้อมูลเหล่านี้สามารถจัดเก็บไว้ในตำแหน่งต่างๆ ได้ ขึ้นอยู่กับการใช้งาน เช่น ในตำแหน่งข้อมูลต่างๆ อย่างแรกคือ "สแต็ก" ซึ่งมีค่าที่ใช้ในการคำนวณ เข้าถึงได้ง่ายเพียง 16 รายการแรกในสแต็ก จึงไม่เหมาะสำหรับการจัดเก็บระยะยาว การคำนวณโดยใช้สแต็กแสดงไว้ด้านล่าง
คำอธิบายภาพ
รูป: การคำนวณตามสแต็ก
ประการที่สอง เพื่อเสริมสแต็ก สามารถใช้ "หน่วยความจำสัญญา" เพื่อจัดเก็บ ดึงข้อมูล และส่งผ่านข้อมูลระหว่างการดำเนินการตามสัญญาปัจจุบัน สามารถเรียกค่าเหล่านี้จากหน่วยความจำเพื่อใช้ในการคำนวณบนสแตกและเก็บผลลัพธ์กลับไปยังหน่วยความจำได้ ค่าเหล่านี้จะคงอยู่ในช่วงเวลาของการดำเนินการปัจจุบันเท่านั้น เมื่อสิ้นสุดการดำเนินการตามสัญญา หน่วยความจำและสแต็กของสัญญาจะถูกลบ
ในที่สุด ที่เก็บข้อมูลคือ "พื้นที่จัดเก็บตามสัญญา" ซึ่งใช้เพื่อคงข้อมูลไว้ในระหว่างการดำเนินการตามสัญญา ตัวแปรถาวร เช่น ยอดโทเค็นจะถูกจัดเก็บไว้ในที่จัดเก็บสัญญา เพื่อความคงอยู่ของข้อมูล หน่วยความจำสัญญาจะถูกจัดเก็บไว้ในโหนด Ethereum แต่ละโหนด ดังนั้นหน่วยความจำจึงเหมือน RAM และพื้นที่เก็บข้อมูลก็เหมือนฮาร์ดไดรฟ์หรือฐานข้อมูลถาวร
สามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการทำงานของ Ethereum Virtual Machine ได้ในบทความของ MyCrypto
การเขียนสัญญาอัจฉริยะ แม้ว่าสัญญาอัจฉริยะทั้งหมดใช้ EVM แต่สัญญาอัจฉริยะส่วนใหญ่ไม่ได้เขียนด้วยมือโดยใช้ EVM bytecode เช่นเดียวกับ JVM bytecode ส่วนใหญ่ไม่ได้เขียนด้วยมือ มีภาษาระดับสูงหลายภาษาที่สามารถใช้ในการเขียนสัญญาอัจฉริยะใน Ethereum ซึ่งเป็นที่นิยมมากที่สุดคือ Solidity แต่ยังมี Vyper ซึ่งเป็นภาษาโปรแกรมที่เน้น EVM ภาพด้านล่างมีตัวอย่างสัญญาอัจฉริยะ Solidity ที่ง่ายมาก
สัญญาที่ปรับใช้เหล่านี้มีอยู่ในเครือข่ายเป็น "แฟรกเมนต์" ของ EVM bytecode เท่านั้น และแทบจะใช้งานไม่ได้ด้วยตัวมันเอง ในการ "เชื่อมต่อ" กับพวกเขา จำเป็นต้องมี Application Binary Interface (ABI) ซึ่งรวมถึงรายการของฟังก์ชันสาธารณะทั้งหมดและพารามิเตอร์ของฟังก์ชันเหล่านั้น เพื่อให้ผู้ใช้รับทราบสัญญาเหล่านี้มากขึ้น บริการต่างๆ เช่น Etherscan ช่วยตรวจสอบซอร์สโค้ดของสัญญา เพื่อให้ผู้ใช้สามารถตรวจสอบรหัสก่อนใช้สัญญา
สัญญาอัจฉริยะทั้งหมดสามารถเข้าถึงได้โดยตรงโดยเชื่อมต่อกับโหนด Ethereum และใช้อินเทอร์เฟซ JSON-RPC อย่างไรก็ตาม สัญญาอัจฉริยะจำนวนมากเข้าถึงได้ผ่านแอปพลิเคชันส่วนหน้าที่เชื่อมต่อกับโหนดและจัดการ ABI ซึ่งสามารถทำได้ด้วยหนึ่งใน Ethereum SDK ต่างๆ (เช่น web3.js หรือ ethers.js) ซึ่งสามารถเรียกใช้ JSON-RPC ได้ สิ่งนี้มอบประสบการณ์ที่ดีขึ้นสำหรับผู้ใช้สัญญา เนื่องจากส่วนที่ยากที่สุดจะถูกแสดงเป็นภาพ
สัญญาอัจฉริยะสามารถโต้ตอบได้สองวิธี: การโทรและการทำธุรกรรม การโทรเป็นการเรียกแบบเนทีฟไปยังฟังก์ชันสัญญา ไม่มีการถ่ายทอดอะไรไปยังบล็อกเชน ดังนั้น กระบวนการโทรจึงเป็นแบบ "อ่านอย่างเดียว" ไม่สามารถเปลี่ยนแปลงสถานะสัญญาได้ และไม่ต้องเสียค่าธรรมเนียมใดๆ ธุรกรรมนี้เป็น "การดำเนินการเขียน" จริง ซึ่งจะเผยแพร่ไปยังเครือข่ายและรวมอยู่ในบล็อกเชน และจะสร้างค่าธรรมเนียมในการขุด ยกตัวอย่างโทเค็น ERC20 ยอดคงเหลือของโทเค็นจะถูกเรียกคืนโดยการโทร และโทเค็นจะถูกโอนโดยการเริ่มต้นธุรกรรม
คุณสมบัติเหล่านี้ของ Ethereum (พร้อม EVM ที่สมบูรณ์แบบของ Turing และพื้นที่เก็บข้อมูลถาวร) ช่วยให้สามารถสร้างแอปพลิเคชันแบบกระจายอำนาจประเภทใดก็ได้ที่รันบนเครือข่าย ตัวอย่างที่ดีคือระบบนิเวศ DeFi ซึ่งรวมถึงแอปพลิเคชัน เช่น Maker, Uniswap และ Compound ตลอดจนมาตรฐานโทเค็น ERC20 และ ERC721 แอปพลิเคชันเหล่านี้อนุญาตให้มีฟังก์ชันที่ซับซ้อนพร้อมตัวแสดงไดนามิกไม่จำกัดจำนวน
รูป: การทำงานร่วมกันของ DeFi ใน rDai
สิ่งสำคัญที่สุดคือ สัญญาอัจฉริยะสามารถกลายเป็น "ผู้มีส่วนร่วม" ในสัญญาอัจฉริยะอื่นๆ ได้ด้วยตัวมันเอง ทำให้สามารถรวมและจัดองค์ประกอบที่มีประสิทธิภาพระหว่างสัญญาเหล่านี้ได้ ตัวอย่างเช่น สัญญาอัจฉริยะที่เก็บโทเค็นยอดคงเหลือและให้ยืมเป็น Compound หรือแลกเปลี่ยนกับ Uniswap หรือใช้ rDai เพื่อลงทุนใน DAI โดยอัตโนมัติและบริจาคดอกเบี้ยสะสมให้กับองค์กรการกุศล
แม้ว่าสัญญาอัจฉริยะจะสามารถโต้ตอบกันได้ แต่ทุกธุรกรรมบนเครือข่ายต้องมาจากบัญชีภายนอก ดังนั้นการโต้ตอบระหว่าง Ethereum smart contract จะต้องถูกกระตุ้นโดยผู้ใช้ผ่านการทำธุรกรรมเริ่มต้น หลังจากทริกเกอร์เริ่มต้นนี้ การโต้ตอบระหว่างสัญญาจะคล้ายกับการเข้าถึงโดยตรง
กล่าวอีกนัยหนึ่ง สัญญาอัจฉริยะสามารถเรียก "ฟังก์ชันอ่านอย่างเดียว" ของสัญญาอัจฉริยะอื่นๆ หรือทริกเกอร์ "การดำเนินการเขียน" (ธุรกรรม) เนื่องจากมีเพียงบัญชีภายนอกเท่านั้นที่สามารถทริกเกอร์ธุรกรรมได้ ธุรกรรมระหว่างสัญญาอัจฉริยะจึงเรียกว่าธุรกรรมภายในหรือการเรียกข้อความเพื่อแยกความแตกต่างระหว่างธุรกรรมที่เริ่มต้นโดยผู้ใช้
ชื่อเรื่องรอง
Bitcoin: ไร้สัญชาติและเรียบง่าย
ธุรกรรม Bitcoin ทั้งหมด (รวมถึงการโอนปกติ) ได้รับการสนับสนุนโดยภาษาโปรแกรมแบบสแต็กที่เรียกว่า "สคริปต์ Bitcoin" (สคริปต์) ตามที่กล่าวไว้ข้างต้น EVM ของ Ethereum ได้รับการออกแบบมาสำหรับสัญญาอัจฉริยะของ Turing ที่สมบูรณ์และทำงานร่วมกันได้ ในขณะที่ Bitcoin Script ได้เพิ่มข้อจำกัดต่างๆ โดยเจตนาและทำงานในลักษณะที่แตกต่างกันโดยพื้นฐาน การตีความ Bitcoin Script เหมือนกับ EVM, Bitcoin Script ใช้สแต็ก (Stack) เพื่อเก็บค่า (Value) และทำการคำนวณค่าเหล่านี้ แต่แตกต่างจาก EVM สแต็กเป็นตำแหน่งข้อมูลเดียวที่มีอยู่ใน Bitcoin Script ซึ่งหมายความว่าเป็นการยากที่จะจัดเก็บค่าหลายค่าเพื่อใช้ในการดำเนินการตามสัญญาในภายหลัง ที่สำคัญกว่านั้น หมายความว่าเป็นไปไม่ได้ที่จะจัดเก็บหรือแก้ไขค่าที่คงอยู่ในระหว่างการดำเนินการตามสัญญา (แต่ EVM ทำได้)
นี่คือข้อแตกต่างที่ยิ่งใหญ่ที่สุดระหว่างสัญญาอัจฉริยะของ Ethereum และ Bitcoin โมเดลของ Ethereum นั้นมีสถานะในขณะที่ Bitcoin นั้นไร้สถานะ ความเข้าใจที่ได้รับความนิยมคือ Ethereum นั้นคล้ายกับกระบวนทัศน์การเขียนโปรแกรมข้อมูลที่ไม่แน่นอนที่จำเป็นทั่วไป ในขณะที่ Bitcoin นั้นคล้ายกับกระบวนทัศน์ข้อมูลที่ไม่แปรผันของฟังก์ชัน
โมเดลของ Bitcoin ช่วยให้สามารถตรวจสอบธุรกรรมได้อย่างเป็นอิสระและมีประสิทธิภาพมากขึ้น ซึ่งทำให้การทำธุรกรรมแบบขนานและแยกย่อยทำได้ง่ายขึ้น อย่างไรก็ตาม หากไม่มีที่เก็บข้อมูลที่ไม่แน่นอน การสร้างสัญญาอัจฉริยะที่ซับซ้อนเช่น Ethereum บน Bitcoin นั้นยากขึ้น ตัวอย่างเช่น สัญญา ERC20 จะต้องติดตามยอดโทเค็นและทำการเปลี่ยนแปลง
นอกเหนือจากความแตกต่างของสถานะเหล่านี้แล้ว ยังมีปัจจัยอื่นๆ ที่จำกัดความซับซ้อนของสัญญาอัจฉริยะของ Bitcoin โดยเฉพาะอย่างยิ่ง Bitcoin Script ขาดการสนับสนุนสำหรับฟังก์ชันทางคณิตศาสตร์บางอย่าง เช่นเดียวกับการวนซ้ำหรือการเรียกซ้ำทุกรูปแบบ สัญญายังมีขีดจำกัดขนาดที่มีประสิทธิภาพที่ 520 ไบต์และสามารถบรรจุรหัสได้สูงสุด 201 รหัสเท่านั้น
สัญญาอัจฉริยะส่วนใหญ่ใน Bitcoin แบ่งออกเป็นสัญญาง่ายๆ ไม่กี่ประเภท ตัวอย่างเช่น สัญญาแบบหลายลายเซ็นที่ผู้เข้าร่วมหลายคนสามารถใช้ได้ หรือสัญญาแบบล็อกเวลาแบบแฮช (HTLC)
และเนื่องจากสัญญาเหล่านี้บน Bitcoin นั้นง่ายมาก มูลค่าส่วนใหญ่จึงถูกจับได้โดยการรวมสัญญาต่างๆ เข้ากับลอจิกแอปพลิเคชันนอกเครือข่ายอื่นๆ ด้วยวิธีนี้ สัญญาที่เรียบง่ายสามารถรวมกันเพื่อสร้างโซลูชันที่ซับซ้อน เช่น Lightning Network หรือการประมูลข้ามสายโซ่ เป็นต้น
อธิบายธุรกรรม Bitcoin ทุกธุรกรรมใน Bitcoin รับรู้ผ่านสิ่งที่เรียกว่า "ผลลัพธ์ของธุรกรรม" เมื่อผลลัพธ์ของธุรกรรมเหล่านี้มีอยู่ในบัญชี จะเรียกว่า Unspent Transaction Outputs (UTXO) UTXO เหล่านี้ถูกล็อกโดยสคริปต์การล็อก (หรือ scriptPubKey) และเงื่อนไขการใช้งานที่ระบุ เมื่อพยายามใช้ UTXO จะมีการจัดเตรียมสคริปต์การปลดล็อก (หรือ ScriptSig) และสคริปต์เหล่านี้จะทำการคำนวณร่วมกัน ธุรกรรมจะมีผลก็ต่อเมื่อสคริปต์ทำงานโดยไม่มีข้อผิดพลาดและค่าผลลัพธ์เป็น TRUE
เช่นเดียวกับ EVM โหนด Bitcoin ทั้งหมดดำเนินการสคริปต์เหล่านี้เพื่อตรวจสอบการทำธุรกรรม แต่ Bitcoin blockchain ไม่มีแนวคิดเกี่ยวกับต้นทุนก๊าซ ดังนั้นผู้ขุดจะได้รับค่าตอบแทนต่อไบต์ของข้อมูลธุรกรรม เพื่อจำกัดปริมาณงานที่โหนดต้องทำ ข้อจำกัดบางอย่างได้ถูกนำไปใช้กับการทำงานของสคริปต์ที่เข้มข้นมากขึ้น
การโต้ตอบกับสัญญาอัจฉริยะ สัญญาอัจฉริยะใน Bitcoin เขียนขึ้นโดยใช้โมเดล P2SH (บันทึกคลังสินค้าชั้นหนึ่ง: มีคำแปลเป็น "การชำระเงินให้กับสคริปต์แฮช") สคริปต์การล็อกในโหมด P2SH มีแฮชของสคริปต์และจำเป็นต้องจัดเตรียมสคริปต์ปลดล็อกสำหรับสคริปต์แบบเต็ม (เรียกว่าสคริปต์การแลกใช้) และสคริปต์ปลดล็อกสำหรับสคริปต์การแลกใช้นั้น รูปด้านล่างแสดงรูปแบบนี้
คำอธิบายภาพ
รูป: โหมด P2SH
ความรู้ด้านคลังสินค้าชั้นหนึ่ง: โหมด P2SH ถูกนำมาใช้เพื่อลดความซับซ้อนของการใช้สคริปต์ที่ซับซ้อน (กลไกดั้งเดิมคือ P2PKH) และสคริปต์การล็อกที่ซับซ้อนถูกคอมไพล์เป็นสคริปต์อย่างง่ายที่มีแฮช 20 ไบต์ เช่นเดียวกับที่อยู่ Bitcoin คือ A 20 คีย์สาธารณะ -byte ขึ้นอยู่กับการเข้ารหัส Base58 ความแตกต่างที่ใหญ่ที่สุดระหว่างวิธี P2SH และวิธี P2PKH แบบดั้งเดิมคือเปลี่ยนผู้กำหนดเงื่อนไขการถ่ายโอนจากผู้ส่งเป็นผู้รับ ธุรกรรมรูปแบบต่างๆ เช่น ธุรกรรมหลายลายเซ็น สามารถรับรู้ได้โดยการเพิ่มเงื่อนไขการโอนออกต่างๆ ในสคริปต์การไถ่ถอน
โหนด Bitcoin ตรวจสอบธุรกรรมสัญญาอัจฉริยะเหล่านี้ในสองขั้นตอน ขั้นแรก สคริปต์ Redeem จะถูกแฮชและตรวจสอบกับแฮชในสคริปต์การล็อก หากตรงกัน ระบบจะใช้ "Lock Script" เพื่อปลดล็อก "Redemption Script" เหมือนกับว่า "Redemption Script" เป็นสคริปต์การล็อกดั้งเดิม
ความแตกต่างของการปรับใช้เหล่านี้ส่งเสริมการใช้สัญญาอัจฉริยะทั้งสองประเภทร่วมกัน ตัวอย่างที่ดีคือ LocalCryptos ซึ่งรองรับธุรกรรมท้องถิ่นที่ไม่ต้องดูแลสำหรับ Ethereum และ Bitcoin สำหรับ Ethereum นั้นใช้สัญญาอัจฉริยะขนาดใหญ่หนึ่งสัญญาเพื่อติดตามธุรกรรมทั้งหมด ในขณะที่สำหรับ Bitcoin นั้นจะสร้างสัญญาแยกต่างหากสำหรับแต่ละธุรกรรม
การเขียนสัญญาอัจฉริยะ ในขณะที่ Ethereum มีภาษาระดับสูงหลายภาษาที่คอมไพล์เป็น EVM bytecode แต่ Bitcoin กลับให้ความสนใจกับเรื่องนี้น้อยลง แม้จะมีความซับซ้อนของระบบที่สามารถสร้างได้ด้วย Bitcoin Script แต่สัญญาก็มักจะเรียบง่าย ดังนั้นจึงมีความจำเป็นเพียงเล็กน้อยที่จะละทิ้งระบบพื้นฐาน และเนื่องจากสัญญา Bitcoin มีข้อ จำกัด ด้านขนาดและค่าใช้จ่ายสูงของแต่ละไบต์เพิ่มเติม สิ่งสำคัญคือต้องรักษาสัญญาให้ "มีขนาดเล็กที่สุด"
แม้ว่าภาษาระดับสูงเหล่านี้จะมีความสำคัญน้อยกว่าใน Bitcoin แต่ก็มีอยู่จริง Ivy เป็นภาษาระดับสูงที่ "ขัดเกลาที่สุด" ใน Bitcoin ซึ่งสร้างโดย Dan Robinson ในปี 2560 ภาพด้านล่างแสดงตัวอย่างสัญญาอัจฉริยะที่เขียนด้วยภาษา Ivy สัญญาสามารถใช้เพื่อส่งเงินที่ผู้ส่งสามารถกู้คืนได้หากผู้รับไม่ใช้จ่ายให้ทันเวลา
เมื่อเร็ว ๆ นี้ นักวิจัยหลายคนที่ Blockstream ได้เปิดตัว Miniscript ซึ่งเป็นภาษาที่มุ่งเน้นไปที่การวิเคราะห์และการเรียบเรียงของสัญญาอัจฉริยะมากกว่าที่จะสรุประบบพื้นฐาน เนื่องจากสัญญา Bitcoin มักไม่มีความซับซ้อนในเชิงนามธรรม ดูเหมือนว่าจะเป็นเส้นทางที่ถูกต้อง
ชื่อเรื่องรอง
ที่กล่าวมาข้างต้นคือ Ethereum ซึ่งสามารถสร้างสัญญาอัจฉริยะที่ทรงพลังและมีประโยชน์มากมายซึ่งมีอยู่บนเครือข่าย Ethereum ทั้งหมด และในขณะเดียวกันเนื่องจากลักษณะสถานะของมัน (Stateful) มันยังทำให้เกิดปัญหาด้านการขยายขนาดอีกด้วย ในทางกลับกัน รูปแบบสัญญาอัจฉริยะไร้สถานะ (Stateless) ของ Bitcoin ช่วยให้สามารถตรวจสอบธุรกรรมสัญญาอัจฉริยะได้อย่างอิสระและง่ายดาย แต่ระบบสคริปต์จำกัดการใช้งานจริงของสัญญา
ก่อนการแยก Bitcoin Cash และ Bitcoin แบ่งปันประวัติศาสตร์เดียวกัน ดังนั้นระบบสคริปต์พื้นฐานของพวกเขาจึงทำงานเหมือนกัน และ Bitcoin Cash ได้รับประโยชน์จากแง่มุมเดียวกันนี้ ตั้งแต่นั้นเป็นต้นมา ชุมชน Bitcoin Cash ส่วนใหญ่ได้ตระหนักถึงความจำเป็นของ "สัญญาอัจฉริยะที่มีประโยชน์มากกว่า" Bitcoin Cash เปิดใช้งานคุณสมบัติใหม่ที่ทำให้สัญญาอัจฉริยะมีประโยชน์มากขึ้น ในขณะที่ยังคงรักษาคุณสมบัติพื้นฐานที่อนุญาตให้มีการตรวจสอบ Bitcoin แบบไร้สัญชาติ
การอัปเกรดคุณสมบัติสำหรับ BCH เพื่อให้เข้าใจถึงความเป็นไปได้ของสัญญาอัจฉริยะ Bitcoin Cash เราจำเป็นต้องดูที่การอัปเกรดเครือข่ายทุกสองปี การอัปเกรดเครือข่ายเหล่านี้ดำเนินการทุกเดือนพฤษภาคมและพฤศจิกายน นับตั้งแต่การฮาร์ดฟอร์กดั้งเดิมในปี 2560 เราพูดคุยถึงการเปลี่ยนแปลงกลไกการเขียนสคริปต์ Bitcoin โดยเฉพาะ แม้ว่าจะมีการปรับปรุงอื่นๆ บางอย่าง เช่น ลายเซ็นของ Schnorr
ในช่วงแรก ๆ ของ Bitcoin opcodes บางตัวถูกปิดใช้งานเนื่องจากการใช้งานที่ไม่ปลอดภัย ภายในปีแรกหลังจาก Bitcoin Cash fork ผู้พัฒนาโหนด Bitcoin-ABC ได้แก้ไขปัญหาเหล่านี้และแนะนำ opcode อีกครั้งด้วยฟังก์ชันการทำงานที่ปรับเปลี่ยนเล็กน้อยดังแสดงในแผนภาพด้านล่าง สิ่งสำคัญที่สุดคือ การอัปเกรดทำให้สามารถเข้ารหัสและถอดรหัสข้อมูลที่มีโครงสร้างใน Bitcoin Script ได้
คำอธิบายภาพ
รูป: BCH เปิดใช้งาน opcode ใหม่ในเดือนพฤษภาคม 2018
ครึ่งปีต่อมา opcode ใหม่ได้รับการเผยแพร่ในการอัปเกรดเครือข่าย Bitcoin Cash ในเดือนพฤศจิกายน 2018 หนึ่งในนั้นคือการอัปเดต OP_CHECKDATASIG ซึ่งอนุญาตให้ผู้ใช้ตรวจสอบลายเซ็นของข้อความใดๆ ใน Bitcoin Script หากเรารวมการอัปเดตสคริปต์ที่เปิดตัวในปี 2018 การอัปเดตเหล่านี้สามารถใช้เพื่อแนะนำฟังก์ชันสัญญาอัจฉริยะใหม่และมีประโยชน์ให้กับ Bitcoin Cash
การเขียน Smart Contracts คุณลักษณะใหม่ของ Bitcoin Cash เพิ่มความซับซ้อนเป็นพิเศษให้กับสัญญาอัจฉริยะเมื่อเทียบกับสคริปต์ Bitcoin ดั้งเดิม สิ่งนี้ทำให้มีความสำคัญยิ่งขึ้นไปอีกที่จะต้องมีระบบนิเวศที่ให้เลเยอร์นามธรรมระดับสูงผ่านภาษาระดับสูง SDK และเครื่องมือต่างๆ
โครงการใหญ่สองโครงการที่กำลังแก้ไขปัญหานี้คือ Spedn (สร้างโดยนามแฝง Tendo Pein) และ CashScript (สร้างโดยผู้เขียนบทความนี้ Rosco Kalis ซึ่งได้รับแรงบันดาลใจจากภาษา Solidity ของ Ethereum) แม้ว่าพวกเขาจะยังอยู่ระหว่างการพัฒนาอย่างแข็งขัน แต่เครื่องมือเหล่านี้ช่วยให้การทำงานกับสัญญาอัจฉริยะใน Bitcoin Cash ง่ายขึ้น ฟังก์ชันบางอย่างแสดงไว้ด้านล่างโดยใช้ข้อมูลโค้ด CashScript
ตัวอย่างนี้สามารถดูได้ในสัญญาตัวอย่าง HODLVault ด้านล่าง สัญญานี้บังคับใช้ HODLing จนกว่าจะถึงราคา BCH/USD ที่แน่นอน ฟีดราคา BCH/USD ที่ต้องการได้รับการเผยแพร่โดยผู้ให้บริการ oracle และส่งต่อไปยังสัญญาโดยผู้ใช้ สำหรับการกระจายอำนาจที่เพิ่มขึ้น สามารถตั้งค่าสัญญาอัจฉริยะเพื่อใช้แหล่งข้อมูลหลายแหล่ง แทนที่จะเชื่อถือบริการส่วนกลางเพียงแห่งเดียว
Covenants กรณีการใช้งานหลักประการที่สองคือเทคนิคที่เรียกว่า Covenants ซึ่งได้ชื่อมาจากคำศัพท์ที่ใช้ในกฎหมายทรัพย์สินเพื่อจำกัดการใช้วัตถุ ในกรณีของ Bitcoin Cash จะจำกัดการใช้สกุลเงินในสัญญาอัจฉริยะ ดังนั้นในขณะที่สัญญาอัจฉริยะใน Bitcoin สามารถอนุมัติการใช้จ่ายทางการเงินโดยทั่วไปเท่านั้น สัญญา Bitcoin Cash สามารถกำหนดข้อจำกัดเกี่ยวกับจำนวนเงินที่สามารถใช้จ่ายหรือระบุตัวตนของผู้รับได้
เมื่อโอน bitcoins ผู้ส่งจะต้องให้ลายเซ็นเพื่ออนุญาตการทำธุรกรรม ในการสร้างลายเซ็นนี้ ผู้ส่งลงนามแทนแฮชของธุรกรรม แฮชนี้เรียกว่า Sighash และข้อมูลธุรกรรมจริงจะอยู่ในพรีอิมเมจของ Sighash
ด้วยการใช้ _OP_CHECKSIG_ และ _OP_CHECKDATASIG_ ที่มีลายเซ็นเดียวกัน เราสามารถเข้าถึงข้อมูล Sighash ได้ สามารถตรวจสอบรูปแบบข้อมูลได้ในข้อมูลจำเพาะและรวมอยู่ในภาพด้านล่าง ฟิลด์ที่สำคัญคือ scriptCode ซึ่งมี bytecode ของสัญญาอัจฉริยะ อีกอันคือ hashOutputs ซึ่งอนุญาตให้ผู้ใช้บังคับใช้เอาต์พุตธุรกรรม
คำอธิบายภาพ
รูป: รูปแบบข้อมูล Bitcoin Cash Sighash
เป็นเรื่องดีที่ได้ทราบว่าสัญญารับประกันทำงานอย่างไรในระดับเทคนิค แต่ CashScript ได้ขจัดความซับซ้อนส่วนใหญ่ที่เกี่ยวข้องกับสัญญาออกไปแล้ว เมื่อเขียนสัญญาอัจฉริยะโดยใช้ CashScript ฟิลด์เหล่านี้จะพร้อมใช้งานโดยไม่ต้องมีขั้นตอนด้วยตนเองในการตรวจสอบและถอดรหัสต้นฉบับของ Sighash
สัญญาอัจฉริยะรายแรกที่ใช้เทคโนโลยีสัญญาค้ำประกันคือ Licho's Last Will ซึ่งเป็นสัญญาอัจฉริยะที่ช่วยให้ผู้ใช้สามารถโอนมรดกของผู้เสียชีวิตให้เป็นของตนเองได้ สัญญากำหนดหน้าที่ที่แตกต่างกันสามประการ ครั้งแรกอนุญาตให้ผู้สืบทอดเรียกร้องเงินหลังจาก 180 วัน ประการที่สองอนุญาตให้ใช้รหัสเย็นของเจ้าของ (ColdKey) ในทางใดก็ได้ ปุ่มที่สามช่วยให้ Hot Key ของเจ้าของรีเฟรชระยะเวลา 180 วันโดยบังคับให้ส่งยอดคงเหลือในสัญญาทั้งหมดกลับไปที่สัญญา
เวอร์ชัน Last Will ของ CashScript มีอยู่ด้านล่าง แต่เวอร์ชันต้นฉบับเขียนโดย Spedn และสามารถดูได้ที่นี่
นี่เป็นหนึ่งในตัวอย่างง่ายๆ ของสัญญารับประกันที่มีประโยชน์ แต่สัญญารับประกันช่วยให้การทำงานซับซ้อนยิ่งขึ้นไปอีก หลังจากเซ็นสัญญา Last Will ผู้สร้าง Karol Trzeszczkowski ได้สร้าง Mecenas ซึ่งเป็นบริษัทที่บังคับใช้การชำระเงินแบบประจำกับ Patreon และอื่น ๆ
เดิมทีมีการเสนอสัญญารับประกันในบทความเรื่อง "Bitcoin Covenants" ซึ่งต้องใช้รหัส opcode ใหม่ _OP_CHECKOUTPUTVERIFY_ คำแนะนำอื่นๆ ตามมา เช่น _OP_CHECKTEMPLATEVERIFY_ หรือ _OP_CHECKSIGFROMSTACK_ อย่างหลังนี้คล้ายกับการดำเนินการตามข้อตกลงของ Bitcoin Cash ดูข้อมูลเพิ่มเติมเกี่ยวกับสัญญาค้ำประกันได้ในบทความของ Tendo Pein
รัฐจำลองดูที่สัญญา "เจตจำนงสุดท้าย" อาจเป็นประโยชน์ในการเปลี่ยนทายาทเมื่อสัญญามีผลบังคับใช้ เนื่องจากเราสามารถบังคับให้ส่งไปยังสัญญาปัจจุบันได้โดยดูที่ bytecode ของสัญญาปัจจุบัน เราจึงสามารถบังคับให้ส่งไปยังสัญญาที่แตกต่างกันเล็กน้อยได้โดยเปลี่ยน bytecode นี้เล็กน้อย สามารถสร้างฟังก์ชันที่ส่งยอดคงเหลือของสัญญาทั้งหมดไปยังสัญญาที่มีรหัสไบต์เดียวกันทุกประการ แต่มีทายาทต่างกัน
เมื่อใช้เทคนิคนี้ คุณจะสามารถเปลี่ยนตัวแปรบางอย่างในสัญญาได้โดยยังคงรักษากฎเดิมของสัญญาไว้ เราเรียกมันว่า "สถานะจำลอง" เพราะมันให้ประโยชน์บางประการของสถานะสัญญา โดยไม่มีปัญหาความสามารถในการปรับขนาดของระบบที่มีสถานะเหมือน Ethereum วิธีนี้มีข้อเสียอื่น ๆ เนื่องจากต้องมีการแลกเปลี่ยนที่ใดที่หนึ่ง
สรุปแล้ว
การแทนที่ตัวแปรเหล่านี้ภายใน bytecode อาจรู้สึกยุ่งยาก โดยเฉพาะอย่างยิ่งเมื่อพยายามแทนที่ตัวแปรที่อยู่ลึกเข้าไปใน bytecode ฟังก์ชันนี้ควรเป็นนามธรรมในภาษาระดับสูงเพื่อให้รหัสไบต์ใหม่ถูกสร้างขึ้นโดยอัตโนมัติโดยการระบุพารามิเตอร์ใหม่ สิ่งที่เป็นนามธรรมนี้อาจมีลักษณะดังนี้:
มองไปที่อนาคต
สิ่งที่เป็นนามธรรมจำนวนมากมาจากต้นทุนของสัญญาขนาดใหญ่ ส่งผลให้ค่าธรรมเนียมสูงขึ้น แต่โดยทั่วไปค่าธรรมเนียมการทำธุรกรรมของ Bitcoin Cash นั้นต่ำ ดังนั้นจึงเป็นสิ่งที่ดีที่สุดของทั้งสองโลก แต่ Bitcoin Cash มีขนาดจำกัดเช่นเดียวกับ Bitcoin ดังนั้นสิ่งที่เป็นนามธรรมเหล่านี้ทำให้ยากที่จะอยู่ภายในขีดจำกัด ส่งผลให้นักพัฒนาจำนวนมากต้องเพิ่มประสิทธิภาพ bytecode ที่คอมไพล์ด้วยตนเอง
สรุปแล้ว
เงินดิจิตอลทุกสกุลมีน้ำหนักในระบบสัญญาอัจฉริยะ Ethereum เป็นแพลตฟอร์มสัญญาอัจฉริยะที่ใช้บ่อยที่สุดพร้อมคุณสมบัติที่หลากหลายที่สุด Bitcoin ให้บริการสัญญาอัจฉริยะเวอร์ชันพื้นฐานผ่านระบบสคริปต์ไร้สัญชาติ ซึ่งมีประสิทธิภาพมากกว่าในการตรวจสอบแต่ทำงานได้น้อยกว่า Bitcoin Cash มีรากฐานเดียวกันกับ Bitcoin แต่เพิ่มคุณสมบัติใหม่ที่พยายามประนีประนอมระหว่างการตรวจสอบที่มีประสิทธิภาพและสัญญาอัจฉริยะที่มีประโยชน์ ในที่สุด ทุกคนก็มุ่งสู่เป้าหมายเดียวกัน


