P2SH được xem là một script tiêu chuẩn cho phép ta lock BTC vào hash của một script. Để unlock, ta cần cung cấp script gốc.

How Does P2SH Work?

Locking script chứa hash của một locking script khác (ta gọi giá trị hash này là script hash), opcode HASH160EQUAL:

Unlocking script bao gồm redeem script và các data/opcode cần dùng để unlock redeem script:

Redeem script về bản chất là P2MS locking script:

Opcode OP_0 và signature trước đó chính là thành phần cần thiết dùng để unlock redeem script.

Execution

Warning

P2SH locking script được xem như là một special script nên nó được thực thi hơi khác so với các script thông thường khác.

Quá trình thực thi P2SH bao gồm hai phần:

Phần 1: redeem script được hash và được so sánh với script hash ở trong locking script.

Phần 2: redeem script được deserialize thành một locking script mới có dạng P2MS script và được thực thi theo cách thức của P2MS script:

Toàn bộ quá trình:

Trong khi thực thi opcode HASH160, stack chứa scriptPubKey sẽ được sao chép.

Why Do We Have P2SH?

Trước khi có P2SH, người gửi BTC cần phải gửi theo toàn bộ locking script:

Sau khi có P2SH, người gửi BTC chỉ cần kèm theo script hash ở trong output của transaction:

Việc giảm kích thước output sẽ giúp giảm chi phí của transaction. Gánh nặng về kích thước sẽ chuyển từ người gửi sang người nhận (người nhận cần cung cấp scriptSig có bao gồm cả P2MS locking script).

Ngoài ra, do P2MS script đã được hash nên mọi người sẽ không biết một output sẽ thuộc về public key nào cho đến khi có ai đó sử dụng nó.

Để chương trình Bitcoin chạy nhanh nhất có thể, tất cả các unspend output của các transaction (UTXOs) sẽ được lưu ở trong RAM máy tính.

Các UTXOs đó có chứa locking script, nên việc giảm kích thước của locking script sẽ giúp chúng ta tiết kiệm được lượng RAM sử dụng để chứa tập các UTXOs.

Nếu tập UTXOs không chứa đủ ở trong RAM, node sẽ trở nên chậm chạp trong quá trình xác thực các giao dịch.

Resources