OP_CHECKTEMPLATEVERIFY (CTV)
OP_CHECKTEMPLATEVERIFY (CTV) เป็นโอปโค้ดใหม่ที่ถูกเสนอขึ้น โดยรับค่าแฮชของข้อผูกมัดเป็นพารามิเตอร์ และกำหนดให้ธุรกรรมใด ๆ ที่ดำเนินการด้วยโอปโค้ดนี้ต้องมีชุดของเอาต์พุตที่ตรงกับข้อผูกมัดนั้น ด้วยสิ่งนี้เอง ทำให้สามารถสร้างที่อยู่ที่ระบุวิธีการใช้จ่ายเงินใด ๆ ที่ได้รับไปยังที่อยู่นั้นได้ ซึ่งเป็นการออกแบบที่รู้จักใน Bitcoin ว่าเป็นพันธสัญญา (covenant)
เดิมทีนำเสนอภายใต้ชื่อ OP_CHECKOUTPUTSHASHVERIFY (COSHV) ซึ่งข้อเสนอนี้มุ่งเน้นไปที่ความสามารถในการสร้างธุรกรรมโดยใช้ congestion control (คล้าย ๆ กันกับที่ใช้คุมการไหลของ data packets ใน TCP ) ซึ่งผู้ใช้จ่ายเงินไปยังที่อยู่เดียวโดยใช้ CTV ซึ่งเมื่อได้รับการยืนยันในระดับที่เหมาะสมแล้ว จะทำให้ผู้รับหลายรายมั่นใจได้ว่าพวกเขาแต่ละคนจะได้รับเงิน กระบวนการสองขั้นตอนนี้น่าจะสามารถใช้ได้ทุกที่ ที่มีตัวเลือกการรวมการชำระเงิน (payment batching) โดยมีแนวโน้มว่าจะสามารถช่วยลดค่าธรรมเนียมได้มากกว่าการรวมการชำระเงิน
ข้อเสนอในเวอร์ชันต่อ ๆ มา มีการให้ความสำคัญกับสัญญาและพันธสัญญาอื่น ๆ ที่สามารถสร้างได้โดยใช้โอปโค้ดใหม่ เช่น ความสามารถในการสร้าง กระเป๋าสตางค์ (vaults) และธุรกรรม CoinJoin ในรูปแบบใหม่ที่อาจช่วยลดความซับซ้อนในการสร้างหรือลดค่าธรรมเนียมลงได้ นอกจากนี้ผู้เขียนท่านอื่น ๆ ได้กล่าวถึงว่าโอปโค้ดใหม่อาจใช้เพื่อให้ผู้ใช้สามารถรวมเงินทุนของตนเข้าด้วยกันใน UTXO เดียวได้อย่างน่าเชื่อถือและความเป็นส่วนตัวมากยิ่งขึ้น
การทำงานของ OP_CHECKTEMPLATEVERIFY
OP_CHECKTEMPLATEVERIFY ใช้โอปโค้ด OP_NOP4 (0xb3) เป็นการอัปเกรดซอฟต์ฟอร์ก
OP_CHECKTEMPLATEVERIFY ทำงานดังนี้:
- ต้องมีอย่างน้อยหนึ่งองค์ประกอบบนสแต็ก ไม่งั้นจะไม่สามารถทำงานได้
- องค์ประกอบบนสแต็กต้องมีความยาว 32 ไบต์ หากไม่ใช่จะทำเป็น NOP (No Operation)
- DefaultCheckTemplateVerifyHash ของธุรกรรม ณ ดัชนีอินพุตปัจจุบันต้องเท่ากับองค์ประกอบบนสแต็ก หากไม่เท่ากันจะล้มเหลว
- DefaultCheckTemplateVerifyHash ผูกมัดกับ: เวอร์ชัน,ล็อกไทม์, แฮชของ ScriptSigs (ถ้ามี ScriptSigs ที่ไม่ใช่ค่า Null), จำนวนอินพุต, แฮชของลำดับ, จำนวนเอาต์พุต, แฮชของเอาต์พุต, ดัชนีอินพุตที่กำลังดำเนินการอยู่
กฎมาตรฐานที่แนะนำเพิ่มเติม:
ปฏิเสธข้อมูลที่ไม่ใช่ 32 ไบต์ เป็น SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS
detail มากกว่านี้: https://github.com/bitcoin/bips/blob/master/bip-0119.mediawiki