SATS.VN – Bitcoin Layer 2 & Tokenization Research ₿ Về trang chủ SATS.VN
Bitcoin Script · Opcodes · P2PKH · P2TR · Taproot · Stack VM

BITCOIN SCRIPT
LÀ GÌ?

Ngôn Ngữ Stack-Based Của Bitcoin – Từ P2PKH Đến Taproot, Opcodes Và Thiết Kế Intentionally Limited
₿ SATS.VN – Knowledge Base ₿ Chủ đề: Bitcoin Script & Covenant ₿ Nội dung: Kỹ thuật – Trung lập

Tóm tắt

Bitcoin Script là ngôn ngữ lập trình stack-based, intentionally limited được nhúng trong mỗi Bitcoin transaction để định nghĩa điều kiện cần thỏa mãn để chi tiêu một UTXO. Không phải smart contract theo nghĩa Ethereum — không có state lưu trữ, không có loops, không có Turing-complete execution. Thiết kế này có chủ đích: đảm bảo validation của mọi node đơn giản, deterministic và không tốn tài nguyên không giới hạn. Hiểu Bitcoin Script là nền tảng để hiểu HTLC, multisig, Taproot, covenant và tất cả L2 protocol xây dựng trên Bitcoin.

1Bitcoin Script Là Gì?

Mỗi Bitcoin UTXO (Unspent Transaction Output) đi kèm với một locking script (còn gọi là scriptPubKey) — một đoạn chương trình định nghĩa điều kiện phải thỏa mãn để chi tiêu UTXO đó. Khi muốn chi tiêu, người dùng cung cấp một unlocking script (scriptSig hoặc witness) chứa dữ liệu đáp ứng điều kiện.

Bitcoin node validate transaction bằng cách chạy unlocking_script + locking_script kết hợp. Nếu stack kết thúc với giá trị TRUE (nonzero) — transaction hợp lệ, UTXO có thể chi tiêu. Toàn bộ quá trình này là deterministic và không có side effect.

Script không phải smart contract: Ethereum smart contract có persistent state, có thể call lẫn nhau, có thể lưu trữ data. Bitcoin Script không có gì trong số đó — nó chỉ evaluate một điều kiện tại thời điểm chi tiêu và trả về đúng/sai. Đây không phải giới hạn kỹ thuật, mà là lựa chọn thiết kế.

2Stack-Based Execution – Cơ Chế Thực Thi

Bitcoin Script là stack machine: tất cả dữ liệu được push vào một stack (ngăn xếp LIFO), và opcodes thao tác trên stack đó. Không có variables, không có functions, không có memory ngoài stack.

Ví dụ thực thi P2PKH: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

Unlocking script push:
<sig>
<pubKey>
OP_DUP → duplicate top item
<sig>
<pubKey>
<pubKey>
OP_HASH160 → hash top item (SHA256+RIPEMD160)
<sig>
<pubKey>
<pubKeyHash>
OP_EQUALVERIFY → so sánh top 2 items, pop cả hai nếu bằng nhau
<sig>
<pubKey>
OP_CHECKSIG → verify chữ ký, push kết quả
TRUE (1)

→ Stack kết thúc với TRUE → Transaction hợp lệ ✅

3Locking Script vs Unlocking Script

# Cấu trúc Bitcoin transaction validation ## UTXO được tạo ra (transaction output): locking_script (scriptPubKey): OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG ## "Chỉ ai có private key tương ứng với pubKeyHash này mới chi tiêu được" ## Khi muốn chi tiêu (transaction input): unlocking_script (scriptSig / witness): <signature> <publicKey> ## "Đây là public key và đây là chữ ký của tôi" ## Node validate: chạy unlocking + locking script kết hợp ## Nếu stack == TRUE → UTXO được chi tiêu, biến mất khỏi UTXO set ## Nếu stack == FALSE hoặc error → transaction rejected

Điều quan trọng: locking script được set khi tạo UTXO — người gửi quyết định điều kiện chi tiêu. Người nhận có thể chi tiêu bằng cách cung cấp đúng unlocking data. Bitcoin không có khái niệm "tài khoản" — chỉ có UTXO với locking condition.

4Lịch Sử Address Bitcoin – P2PK Đến P2TR

2009
P2PK – Pay to Public Key
Không có address chuẩn
Locking script chứa trực tiếp public key. Satoshi Nakamoto dùng trong coinbase transaction đầu tiên. Không còn được dùng vì lộ public key ngay khi tạo address.
2010
P2PKH – Pay to Public Key Hash
1xxxx...
Hash public key thay vì lộ trực tiếp. Address bắt đầu bằng "1". Vẫn phổ biến nhưng không có SegWit benefits. Locking script: OP_DUP OP_HASH160 <hash> OP_EQUALVERIFY OP_CHECKSIG.
2012
P2SH – Pay to Script Hash
3xxxx...
Ẩn script phức tạp (multisig, HTLC) đằng sau hash. Người gửi chỉ cần biết hash, không cần biết script bên trong. Address bắt đầu bằng "3". Nền tảng cho multisig và nhiều use case phức tạp.
2017
P2WPKH / P2WSH – SegWit (Native)
bc1q...
SegWit tách witness data, giảm phí giao dịch 25–40%. Address bắt đầu bằng "bc1q". P2WPKH cho single-key, P2WSH cho script phức tạp. Lightning Network dùng P2WSH cho channel.
2021
P2TR – Pay to Taproot
bc1p...
Taproot kết hợp Schnorr signature + MAST (Merkelized Abstract Syntax Tree). Address bắt đầu bằng "bc1p". Happy path (key spend) ẩn hoàn toàn script complexity. Script spend reveal chỉ branch thực sự dùng. Privacy và efficiency tốt nhất hiện nay.

5Các Opcode Quan Trọng Cần Biết

OpcodeChức năngDùng trong
OP_CHECKSIGVerify ECDSA/Schnorr signatureP2PKH, P2TR key spend, mọi payment
OP_CHECKMULTISIGVerify M-of-N signaturesMultisig 2-of-3, federation peg
OP_HASH160SHA256 + RIPEMD160P2PKH, P2SH address
OP_SHA256SHA256 hashHTLC hashlock, inscription marker
OP_EQUALVERIFYKiểm tra 2 giá trị bằng nhauMọi hash comparison
OP_IF / OP_ELSE / OP_ENDIFConditional branchingHTLC, Taproot script path
OP_CHECKLOCKTIMEVERIFYRequire block height/time >= valueHTLC timelock, vesting
OP_CHECKSEQUENCEVERIFYRequire relative locktimeLightning channel, DLCs
OP_RETURNProvably unspendable output, embed dataRunes, OP_RETURN data
OP_FALSE / OP_0Push false/zero lên stackOrdinals inscription envelope
Disabled opcodes: Một số opcode ban đầu của Bitcoin đã bị disable (OP_CAT, OP_SUBSTR, OP_LEFT, OP_RIGHT...) vì lo ngại về security hoặc DoS. OP_CAT đặc biệt quan trọng — nó ghép hai stack items — và đang được đề xuất re-enable qua BIP 347 vì có ứng dụng lớn cho covenant và BitVM.

6Tại Sao Bitcoin Script Không Turing-Complete?

Satoshi Nakamoto có chủ đích thiết kế Bitcoin Script không Turing-complete — không có loops, không có recursion. Đây không phải thiếu sót kỹ thuật. Lý do:

  • Execution time bounded: Mọi script đều terminate trong thời gian có giới hạn. Không có infinite loop → không có DoS vector từ script validation
  • Verification deterministic: Kết quả của script execution hoàn toàn deterministic — cùng một script + input luôn cho cùng kết quả, trên mọi node, mọi lần
  • No state: Script không đọc hay ghi bất kỳ state nào ngoài stack — không cần storage, không có side effect
  • Auditability: Script ngắn và đơn giản dễ audit bảo mật hơn smart contract Turing-complete

Ethereum chọn ngược lại: Turing-complete EVM, giải quyết vấn đề execution time bằng cách charge "gas" theo từng opcode. Cả hai đều là valid engineering trade-off — Bitcoin ưu tiên simplicity và security, Ethereum ưu tiên expressiveness.

7Bitcoin Script Là Nền Tảng Của Mọi L2 Protocol

Mọi Layer 2 protocol trên Bitcoin đều build trên Bitcoin Script:

  • Lightning Network: Dùng OP_CHECKSIG (multisig funding), OP_CHECKLOCKTIMEVERIFY (HTLC timelock), OP_CSV (relative locktime cho justice tx)
  • Ordinals Inscription: Dùng OP_FALSE OP_IF...OP_ENDIF trong Taproot witness để nhúng data (bài riêng về Ordinals)
  • Runes: Dùng OP_RETURN để encode token operation
  • BitVM: Dùng Taproot script tree với hàng nghìn leaf cho commitment
  • HTLC: OP_SHA256 + OP_EQUALVERIFY (hashlock) + OP_CHECKLOCKTIMEVERIFY (timelock)

Và tất cả covenant proposals (OP_CAT, OP_CTV, OP_VAULT...) đều là đề xuất thêm opcode mới vào Script để mở rộng khả năng — cho phép L2 protocol mạnh mẽ hơn mà không thay đổi fundamental properties của Bitcoin. Đọc phân tích covenant chi tiết tại SATS.VN.

?FAQ Về Bitcoin Script

Bitcoin Script và Ethereum Solidity khác nhau như thế nào?
Khác hoàn toàn về mục tiêu và cơ chế. Bitcoin Script là một-lần-chạy, stack-based, không có state, kiểm tra điều kiện chi tiêu. Solidity là Turing-complete OOP language biên dịch sang EVM bytecode, có persistent storage, có thể call contract khác, có events. Không thể dùng Solidity trên Bitcoin, và không nên — Bitcoin Script làm đúng những gì nó cần làm.
Taproot cải thiện Bitcoin Script như thế nào?
Taproot (BIP 340/341/342) thêm ba upgrade: (1) Schnorr signature thay ECDSA — batch-verifiable, có adaptor signature cho PTLC; (2) Taproot tree (MAST) — ẩn tất cả script branches không dùng đến, chỉ reveal branch thực sự execute — tăng privacy và giảm phí; (3) Tapscript — relaxed script rules cho witness data trong Taproot leaf, cho phép script phức tạp hơn (quan trọng cho BitVM và Ordinals).
Multisig Bitcoin hoạt động như thế nào?
Multisig dùng OP_CHECKMULTISIG: locking script định nghĩa M-of-N (ví dụ 2-of-3 — cần 2 trong 3 chữ ký). Unlocking script cung cấp M signatures. Node verify: nếu đủ M signatures hợp lệ từ đúng N keys → TRUE. Dùng cho: Lightning channel funding (2-of-2), Liquid federation (11-of-15), hardware wallet multi-device (2-of-3), corporate treasury.
OP_CAT là gì và tại sao quan trọng?
OP_CAT là opcode concatenate hai stack items thành một. Bị disable từ 2010 vì lo ngại DoS (có thể tạo exponentially large stack). Nếu re-enable (BIP 347 đang đề xuất), OP_CAT cho phép: Merkle proof verification trong Script (quan trọng cho covenant và BitVM), hash computation phức tạp hơn, và nhiều primitive cryptographic khác. Đây là opcode đơn giản nhưng mở ra nhiều ứng dụng L2 phức tạp.
Hiểu Sâu Hơn: Covenant Và Tương Lai Bitcoin Script

Bitcoin Script hôm nay là nền tảng — covenant opcodes sắp tới (OP_CAT, OP_CTV, OP_VAULT) sẽ mở ra khả năng mới cho L2, trustless peg và DeFi trên Bitcoin. Đọc phân tích đầy đủ tại SATS.VN.

→ Đọc Phân Tích Tổng Thể Tại SATS.VN