Hợp đồng thông minh trên Bitcoin

Posted by baobui.dev on Sunday, October 29, 2023

Trái ngược với quan niệm phổ biến, Bitcoin hỗ trợ hợp đồng thông minh (smart contract) từ lúc mới ra đời. Trong bài viết này, chúng tôi giới thiệu cơ bản về hợp đồng thông minh trên Bitcoin và minh họa nó thông qua một ví dụ.

Mô hình UTXO (Unspent Transaction Output)

Mỗi giao dịch bitcoin bao gồm các input (đầu vào) và output (đầu ra). Một output bao gồm:

  • Số lượng bitcoin nó chứa
  • Một đoạn mã máy tính (gọi là script khóa)

Khi A gửi B một đồng bitcoin, một giao dịch (TX_1) được ghi vào chain. Trong output đầu tiên của giao dịch đó (TX_1_OUT_1), có một đồng bitcoin và đồng bitcoin này chỉ được di chuyển bởi khóa riêng tư của B.

Khi B gửi đồng bitcoin cho C, B tạo một giao dịch mới (TX_2). Input của giao dịch này bao gồm một tham chiếu đến output của giao dịch trước đó (TX_1_OUT_1) và một “chìa khóa” được ký với khóa riêng tư của B (gọi là script mở khóa). Output của giao dịch (TX_2_OUT_1) bao gồm đồng bitcoin và một khóa mới chỉ có thể mở được bởi C (một script khóa mới). TX_2 được gửi lên mạng Bitcoin và chỉ được ghi vào chain khi các thợ đào kiểm tra xong tính hợp lệ của các script chứa trong đó. Đây là nguyên tắc của việc luân chuyển bitcoin nói chung.

Output TX_1_OUT_1 được đánh dấu là đã sử dụng (spent) bởi mạng vì nó được dùng trong TX_2. Nếu bất kì giao dịch nào khác tham chiếu đến nó một lần nữa, output đó sẽ được xem là chi tiêu hai lần (double spending) và sẽ bị mạng từ chối. TX_2_OUT_1 được gọi là một UTXO (Unspent Transaction Output – Tạm dịch là “Đầu ra chưa được dùng mất”) vì nó chưa được dùng trong bất kì giao dịch nào khác.

img

Tóm lại, một input tham chiếu đến một output của giao dịch trước đó và dùng mất lượng bitcoin trong output. Một giao dịch di chuyển lượng bitcoin từ (các) output này sang (các) output khác. Chỉ khi input chứa “chìa khóa” khớp với “ổ khóa” của output, lượng bitcoin chứa trong output đó mới có thể được di chuyển sang output mới.

Máy ảo Bitcoin và Script

Điểm cốt lõi của việc hiểu các đoạn mã máy tính này nằm ở máy ảo Bitcoin (Bitcoin Virtual Machine – BVM). Một nút mạng bitcoin có một máy ảo (Virtual Machine – VM) mà chúng tôi gọi là BVM. BVM thực thi các chỉ thị và thực hiện các tính toán trong một ngăn xếp. Mỗi chỉ thị bao gồm một toán tử (opcode) và các toán hạng của nó. (Opcode còn được gọi là bytecode vì nó có kích thước là một byte). Mỗi opcode được theo sau từ không đến hai toán hạng.

Bảng sau đây đưa ra một vài opcode ví dụ. Danh sách hoàn chỉnh các opcode của BVM có thể được tìm thấy ở đây.

Opcode Miêu tả
OP_1, OP_2,… OP_16 Đẩy các giá trị 1, 2,… 16 lên ngăn xếp
OP_ADD Tính tổng hai phần tử
OP_EQUAL So sánh hai phần tử xem có bằng nhau không

Trong Bitcoin, các chỉ thị này được gọi là Script. Các đoạn mã máy tính miêu tả trong phần trước được gọi là các script. Khi kiểm tra tính hợp lệ của một giao dịch, script của output (gọi là script khóa vì nó khóa bitcoin trong output) được nối vào sau script của input tham chiếu đến output (gọi là script mở khóa). Script kết hợp được đưa vào BVM và được thực thi. Sau khi hoàn thành, nếu đỉnh của ngăn xếp là một giá trị true (giá trị khác không), script thành công và việc tiêu dùng bitcoin được cho phép. Ngược lại, giao dịch bị từ chối.

Một ví dụ minh họa

Trong một giao dịch, một lượng bitcoin bị khóa trong một output với script sau đây: OP_1 OP_2 OP_ADD OP_EQUAL

Một giao dịch khác có thể dùng mất output này với input chứa script sau đây: OP_3

Để hiểu làm thế nào việc tiêu dùng bitcoin trên là hợp lệ, chúng ta hãy xem chi tiết việc thực thi của script.

Đầu tiên, hai script sẽ được nối vào nhau: OP_3 OP_1 OP_2 OP_ADD OP_EQUAL

Tiếp theo, BVM bắt đầu thực hiện đánh giá script từ trái qua phải. Các bước đánh giá như sau:

img

Sau khi hoàn thành, giá trị true nằm ở đỉnh của ngăn xếp và như vậy script thành công. Với bất kì con số nào khác 3 đưa vào script mở khóa, script kết hợp sẽ bị đánh giá là false.

Hợp đồng thông minh trên Bitcoin

Như đã thấy trong ví dụ, với một script khóa cho trước, chỉ các script mở khóa nhất định mới có thể làm ra script kết hợp được đánh giá thành công. Theo cách này, bất kì việc tiêu dùng bitcoin có thể xem như một hợp đồng: một bên đưa ra một lượng bitcoin và các điều khoản thỏa thuận, bên còn lại chỉ có thể nhận được lượng bitcoin đó nếu anh ta có thể thỏa mãn được các điều khoản của hợp đồng. “Thông minh” ở đây được hiểu theo nghĩa là hợp đồng được thi hành tự động bởi các thợ đào trong mạng Bitcoin, không giống như một hợp đồng truyền thống.

Các hợp đồng thông minh trên Bitcoin đơn giản là các đoạn mã máy tính dưới dạng Script được thực thi bởi BVM. Nhờ vào tính linh hoạt và khả năng diễn tả của bitcoin Script, chúng ta có thể chạy các đồng thông minh phức tạp tùy ý trên Bitcoin. Chúng tôi sẽ minh họa cụ thể hơn trong các bài đăng tiếp theo.

(Bài dịch từ bài tiếng Anh của sCrypt).

comments powered by Disqus