Còn được gọi là “Script” ở trong ngữ cảnh của Bitcoin. Đây là một ngôn ngữ đơn giản giúp định nghĩa các điều kiện, chẳng hạn như khóa hoặc mở khóa các số tiền trong một transaction của Bitcoin.

Quote

The script is actually a predicate. It’s just an equation that evaluates to true or false. Predicate is a long and unfamiliar word so I called it script. – Satoshi Nakamoto

Script có các tính chất sau:

  • Forth like (giống ngôn ngữ Forth)
  • Turing-incomplete: chỉ cho phép chạy hữu hạn bước1.
  • Stack-based: hoạt động dựa trên ngăn xếp.
  • Reverse-polish notation (RPN): ví dụ RPN của 5 + 65 6 +.

Script bao gồm hai thành phần:

  • Dữ liệu, ví dụ: các public key và các chữ ký.
  • Opcodes: là các hàm đơn giản thao tác trên data.

Script dùng để khóa output được gọi là scriptPubKey (locking script) còn script dùng để mở khóa output được gọi là scriptSig (unlocking script).

Bằng cách kết hợp các loại dữ liệu và các opcode, chúng ta có thể tạo ra nhiều script pattern phục vụ cho nhiều mục đích khác nhau. Một số script pattern tiêu chuẩn được sử dụng ở trong Bitcoin:

  • P2PK (Pay To Pubkey)
  • P2PKH (Pay To Pubkey Hash)
  • P2MS (Pay To Multisig)
  • P2SH (Pay To Script Hash)

Minh họa P2PKH script được sử dụng ở trong Bitcoin:

Script được thực thi từ trái sang phải và sử dụng cấu trúc dữ liệu stack để lưu dữ liệu và opcodes. Minh họa stack của Bitcoin:

Một script được xem là hợp lệ nếu stack có một phần tử và phần tử đó có giá trị là 1.

Footnotes

  1. Xem thêm Turing-complete