Skip to main content

Phát triển khả năng lập trình blockchain

Ngày 06 tháng 09 năm 2023 - Chia sẻ bài viết này trên Twitter | FacebookTelegram

Phát triển khả năng lập trình Blockchain

Thế hệ Blockchain đầu tiên về cơ bản chỉ là một mạng lưới giao dịch giản đơn, tương tự như PayPal. Giá trị chỉ có thể được chuyển vô điều kiện từ Alice sang Bob. Bitcoin là mạng blockchain được sử dụng phổ biến nhất để chuyển giá trị theo cách đơn giản này. Tuy nhiên, hoàn toàn có thể viết một đoạn mã cho các giao dịch. Cardano và Ethereum là các nền tảng hợp đồng thông minh, và các dịch vụ ngân hàng thay thế có thể được tạo trên chúng. Nền tảng cho phép các nhà phát triển triển khai các chương trình phức tạp hơn và làm việc với các trạng thái của ứng dụng. Trong bài viết, chúng tôi sẽ mô tả khả năng lập trình của Bitcoin, Ethereum và Cardano. Chúng tôi cũng sẽ trao đổi một số khác biệt giữa hợp đồng thông minh Ethereum và tập lệnh Plutus của Cardano.

Khả năng của thế hệ Blockchain đầu tiên

Chúng ta có thể xếp Bitcoin vào thế hệ Blockchain đầu tiên. Bitcoin đã đưa ra khái niệm về sự khan hiếm kỹ thuật số. Nói chung, Blockchain cho phép tạo ra một chính sách tiền tệ cố định không thể thay đổi hoặc chỉ có thể thay đổi khi có cơ chế đồng thuận của đa số. Có thể có những token kỹ thuật số (còn gọi là tiền gốc) không thể sao chép được trong hệ thống.

Tiền gốc được sử dụng như một phần của mô hình khuyến khích của mạng (phần thưởng cho những người Phi tập trung và bảo mật mạng), nhưng điều đó không được đề cập đến trong bài viết này.

Sự tồn tại của tiền phụ thuộc vào mạng lưới phân tán và Phi tập trung.

Mạng Blockchain có thể đảm bảo việc chuyển tiền an toàn giữa hai người tham gia, chẳng hạn như từ Alice sang Bob, vì nó đảm bảo rằng cùng một số tiền không được chi tiêu hai lần liên tiếp (bảo vệ chống lại việc chi tiêu gấp đôi số tiền). Điều này bảo tồn sự khan hiếm kỹ thuật số. Hơn nữa, nó đảm bảo rằng chỉ có chủ sở hữu thực sự mới có thể tiêu tiền. Trong mạng Blockchain, không thể gian lận, không thể đóng băng tài khoản, không thể ngăn cản người khác sử dụng mạng hoặc tiêu tiền, v.v.

Chính sách tiền tệ, sự khan hiếm kỹ thuật số, sự công bằng, bình đẳng và chuyển tiền được giám sát bởi tất cả những người tham gia đồng thuận mạng.

Nói một cách đơn giản, thế hệ Blockchain đầu tiên chỉ có thể thực hiện các chức năng thiết yếu này. Việc chuyển giao giá trị kỹ thuật số là hoàn toàn vô điều kiện giữa hai người tham gia.

Việc chuyển giao giá trị là vô điều kiện. Mạng Blockchain chỉ có thể xác minh rằng Alice là chủ sở hữu thực sự của số tiền và cô ấy là người hướng dẫn chuyển giá trị đến địa chỉ của Bob thông qua giao dịch. Nếu xác thực giao dịch thành công, Bob sẽ trở thành chủ sở hữu mới của giá trị (coin) sau khi giao dịch được đưa vào khối mới và khối được hoàn tất.

Trong hình ảnh bên dưới, bạn có thể thấy cách node Bitcoin xác minh một giao dịch chung. Alice gửi BTC cho Bob. Mã nguồn để xác minh giao dịch được xác định trong ứng dụng khách Bitcoin. Node này sẽ xác minh, bên cạnh những thứ khác, liệu giao dịch có chữ ký số hợp lệ chứng minh quyền sở hữu BTC trong đầu vào hay không và liệu giao dịch có chi tiêu bất kỳ BTC nào đã được chi tiêu bởi một giao dịch khác và các quy tắc đồng thuận khác hay không.

Việc xác thực các giao dịch thông thường của Bitcoin không phụ thuộc vào chương trình của bên thứ ba. Tất cả logic được triển khai trong ứng dụng máy trạm Bitcoin. Nếu cần thực hiện bất kỳ điều gì phức tạp hơn ngoài việc xác thực thông thường, chẳng hạn như chữ ký số, thì logic phải được lập trình bởi bên thứ ba và giao thức để cho phép thực thi chương trình.

Một câu hỏi được đặt ra. Việc gửi giao dịch có điều kiện có hợp lý không? Liệu có hợp lý không khi đúc các token mới có đặc tính giống hoặc tương tự như tiền bản địa, tức là một chính sách tiền tệ không thể thay đổi? Hoặc liệu việc thay đổi chính sách tiền tệ có thể mang lại lợi ích (đốt và đúc lại token) không? Điều này đòi hỏi phải xác định các quy tắc và cho phép xác thực chúng theo cách phi tập trung.

Tập lệnh bitcoin (Bitcoin scripts) cho phép thực hiện logic phức tạp hơn. Có thể tạo giao dịch nhiều chữ ký, giao dịch có thể bị khóa thời gian (giá trị chỉ có thể được sử dụng sau một ngày hoặc chiều cao khối nhất định) hoặc giao dịch bị khóa bởi mã hash (giá trị chỉ có thể được chi tiêu bằng cách tiết lộ bí mật khớp với hàm hash nhất định).

Tập lệnh cho phép người dùng chuyển giá trị sang kênh trạng thái (Lightning Network) hoặc xác định điều kiện chi tiêu giá trị để giao dịch phải được ký bởi một số lượng người tham gia xác định (ví dụ: hai phần ba).

Bitcoin có thể xác định các điều kiện để chi tiêu token BTC.

Bitcoin Scripts là một ngôn ngữ đơn giản, dựa trên ngăn xếp và không hoàn chỉnh Turing, được thiết kế để bảo mật, mang tính xác định và dễ xác minh. Điều này có một số hạn chế lớn đối với các nhà phát triển.

Bitcoin Scripts có một bộ mã opcode và loại dữ liệu hạn chế, điều này hạn chế chức năng và hiệu quả của tập lệnh. Nó không hỗ trợ các vòng lặp, đệ quy hoặc tính toán trạng thái, khiến không thể thực hiện một số thuật toán hoặc giao thức. Hơn nữa, nó không có quyền truy cập vào bất kỳ dữ liệu hoặc sự kiện bên ngoài nào, điều này hạn chế khả năng tương tác và khả năng thích ứng của tập lệnh. Tập lệnh bitcoin không có ngữ nghĩa chính thức hoặc hệ thống phân kiểu (typed), điều này gây khó khăn cho việc suy luận về tính chính xác và bảo mật của tập lệnh.

Hầu hết các giao dịch trong mạng Bitcoin đều là tiêu chuẩn. Vào năm 2021, số lượng giao dịch (tập lệnh) không chuẩn đã tăng lên 10-18% (các phân tích khác nhau).

Điều quan trọng cần nhắc lại là mã nguồn của Bitcoin đảm nhiệm việc chuyển các giá trị trong các giao dịch thông thường. Không bên thứ ba nào có thể can thiệp vào việc xử lý các giao dịch thông thường, vì mọi thứ đều nằm dưới sự kiểm soát của các node trong mạng phi tập trung (chính xác hơn là dưới sự kiểm soát của các nhóm).

Các tập lệnh luôn được xác định bởi bên thứ ba và không phải là một phần của mã nguồn Bitcoin. Bitcoin có thể nói xử lý các tập lệnh thông qua một trình thông dịch (sẽ nói thêm về nó sau). Các tập lệnh có những rủi ro nhất định vì có thể có lỗi trong logic của tập lệnh.

Trong các hình ảnh trong bài viết, chữ viết sẽ được hiển thị màu đỏ. Trình thông dịch và máy ảo sẽ được hiển thị bằng màu xanh lam.

Bất kỳ ai tạo giao dịch đều có thể sử dụng tập lệnh Bitcoin để chỉ định cách chi tiêu BTC trong giao dịch trong tương lai. Các tập lệnh bitcoin được triển khai bằng cách đưa chúng vào đầu vào và đầu ra của giao dịch. Đầu vào chứa các tập lệnh mở khóa BTC từ các giao dịch trước đó và đầu ra chứa các tập lệnh khóa BTC cho các giao dịch trong tương lai.

Các tập lệnh bitcoin được xử lý bởi các node Bitcoin, những người xác thực các giao dịch. Khi một node nhận được một giao dịch, nó sẽ kiểm tra xem các tập lệnh ở đầu vào và đầu ra có hợp lệ hay không và tuân theo các quy tắc đồng thuận. Node thực thi các tập lệnh bằng cách sử dụng trình thông dịch dựa trên ngăn xếp.

Trình thông dịch dựa trên ngăn xếp là một chương trình có thể thực thi một chương trình khác được viết bằng ngôn ngữ đặc biệt (trong trường hợp Bitcoin, nó chỉ được gọi là Script). Trình thông dịch được nhúng vào node Bitcoin. Trình thông dịch hoạt động bằng cách đọc từng hướng dẫn của tập lệnh Bitcoin (từ trái sang phải) và thực hiện các hành động tương ứng. Node đánh giá các tập lệnh và nếu kết quả cuối cùng là đúng thì giao dịch sẽ được chấp nhận. Nếu kết quả cuối cùng là sai hoặc có lỗi hoặc ngoại lệ thì giao dịch sẽ bị từ chối.

Trình thông dịch có trên mọi node Bitcoin. Nếu cần thực thi tập lệnh như một phần của quá trình xác thực, điều đó sẽ xảy ra. Lưu ý rằng việc xác thực giao dịch diễn ra theo cách phi tập trung.

Trong hình ảnh bên dưới, bạn có thể thấy cách node Bitcoin xác minh giao dịch tập lệnh. Giao dịch chứa một tập lệnh (màu đỏ) có logic để chi tiêu giá trị. Đây là logic được cung cấp bởi bên thứ ba. Trình thông dịch tập lệnh (màu xanh) được sử dụng để xác thực tập lệnh. Đầu ra của đánh giá tập lệnh sẽ xác định xem giá trị có được sử dụng hay không (nghĩa là quyền sở hữu giá trị có được chuyển cho Bob hay không).

Ethereum là nền tảng Blockchain hoàn chỉnh Turing đầu tiên

Ethereum là nền tảng phi tập trung đầu tiên hỗ trợ ngôn ngữ lập trình có mục đích chung và hoàn chỉnh Turing được gọi là Solidity. Solidity có thể được sử dụng để viết các hợp đồng thông minh cho bất kỳ loại logic hoặc hàm nào. Hợp đồng thông minh là các chương trình tự thực hiện chạy trên blockchain Ethereum và có thể tương tác với các hợp đồng thông minh, người dùng hoặc nguồn dữ liệu bên ngoài khác.

Một trong những tính năng của Ethereum là nó cho phép người dùng tạo token tùy chỉnh thông qua hợp đồng thông minh. Token là tài sản kỹ thuật số có thể đại diện cho bất kỳ thứ gì có giá trị, chẳng hạn như tiền tệ, đồ sưu tầm hoặc quyền. Thế hệ Blockchain đầu tiên chỉ có tiền bản địa. Cả giao thức lẫn tập lệnh đều không cho phép tạo và chuyển token tùy chỉnh.

Ethereum cho phép viết các ứng dụng phức tạp có thể hoạt động với các token gốc và toàn bộ các loại token khác. Nhờ Ethereum, ngành công nghiệp DeFi đã ra đời.

Ethereum EVM là Máy ảo Ethereum, là môi trường Runtimes cho các hợp đồng thông minh trên mạng Ethereum. EVM là một máy ảo dựa trên ngăn xếp, Turing-Complete và biệt lập, có thể thực thi các lệnh mã byte được tạo từ các ngôn ngữ lập trình cấp cao như Solidity. EVM có thể truy cập và thao tác dữ liệu được lưu trữ trên Blockchain, chẳng hạn như số dư tài khoản, trạng thái hợp đồng hoặc đầu vào và đầu ra giao dịch. EVM cũng thực thi các quy tắc đồng thuận và hệ thống gas của mạng, điều này hạn chế tài nguyên tính toán và lưu trữ được sử dụng bởi các hợp đồng thông minh.

Một trong những điểm khác biệt giữa Bitcoin và Ethereum về mặt hoạt động phức tạp là các giao dịch Ethereum không chứa hợp đồng thông minh với logic chi tiêu mà chỉ tham chiếu đến hợp đồng thông minh.

Hợp đồng thông minh được lưu trữ trên blockchain Ethereum. Hợp đồng thông minh được triển khai vào blockchain bằng cách gửi một loại giao dịch đặc biệt có chứa mã byte và các tham số constructor của hợp đồng thông minh. Giao dịch sẽ tạo một địa chỉ mới trên mạng đại diện cho hợp đồng thông minh. Mã byte và trạng thái của hợp đồng thông minh được lưu trữ trong Blockchain theo địa chỉ này.

Để gọi hợp đồng thông minh, người dùng có thể gửi một loại giao dịch khác đề cập đến địa chỉ hợp đồng thông minh và cung cấp một số tham số, chẳng hạn như giá trị, giới hạn gas, giá gas, dữ liệu hoặc lệnh gọi chức năng. Giao dịch sẽ kích hoạt việc thực thi mã hợp đồng thông minh bởi các node trên mạng, sử dụng Máy ảo Ethereum (EVM).

Các tập lệnh bitcoin không có trạng thái trong khi hợp đồng thông minh Ethereum có thể giữ trạng thái trong sổ cái. Điều này có nghĩa là tập lệnh Bitcoin không có bất kỳ bộ nhớ hoặc bộ lưu trữ nào về các giao dịch hoặc sự kiện trước đó và chỉ có thể hoạt động trên dữ liệu do giao dịch hiện tại cung cấp. Mặt khác, hợp đồng thông minh Ethereum có thể có trạng thái liên tục được lưu trữ trên Blockchain và có thể được cập nhật hoặc truy cập bằng mã hợp đồng thông minh.

Tính không trạng thái của các tập lệnh Bitcoin là một lựa chọn thiết kế nhằm đảm bảo tính bảo mật, tính xác định và tính đơn giản của mạng Bitcoin. Bằng cách không có trạng thái, các tập lệnh Bitcoin tránh được các vấn đề về lạm dụng trạng thái, sự không nhất quán hoặc thao túng có thể phát sinh từ các tác nhân độc hại hoặc lỗi mạng.

Trạng thái của hợp đồng thông minh Ethereum là một lựa chọn thiết kế nhằm mục đích mang lại tính diễn đạt, chức năng và tính tương tác cao hơn của mạng Ethereum. Bằng cách có trạng thái, hợp đồng thông minh Ethereum có thể triển khai chức năng và logic phức tạp và linh hoạt cho các giao dịch, chẳng hạn như tạo token, thực hiện tính toán hoặc tương tác với các hợp đồng thông minh khác. Hợp đồng thông minh Ethereum cũng cho phép tương tác và khả năng thích ứng cao hơn, vì chúng có thể sử dụng các oracle và trình kích hoạt để truy cập và phản ứng với thông tin off-chain, chẳng hạn như nguồn cấp giá, dấu thời gian hoặc thông tin đầu vào của người dùng.

Trong hình ảnh bên dưới, bạn có thể thấy một giao dịch Ethereum trong đó Alice gửi giá trị (token) cho Bob. Vì đây là các token tùy chỉnh nên phải sử dụng hợp đồng thông minh. Alice chèn tham chiếu đến hợp đồng thông minh vào giao dịch. Máy ảo Ethereum tìm thấy hợp đồng thông minh trong blockchain (bao gồm cả trạng thái hiện tại của nó) và thực hiện thao tác được yêu cầu.

Hãy xem xét một số điểm khác biệt giữa Solidy và EVM so với Bitcoin Script và trình thông dịch dựa trên ngăn xếp.

Sự vững chắc mang lại tính diễn đạt cao hơn. Solidity là ngôn ngữ lập trình cấp cao, hướng đối tượng và hoàn chỉnh Turing, có thể triển khai chức năng và logic phức tạp và linh hoạt cho các hợp đồng thông minh.

Mã Solidity được biên dịch thành các lệnh mã byte được các EVM thực thi. Mã Bitcoin Script được nhúng trực tiếp vào đầu vào và đầu ra của giao dịch và được xử lý bởi các node trên mạng.

Mã Solidity có thể truy cập và phản ứng với dữ liệu hoặc sự kiện bên ngoài, chẳng hạn như oracle, trình kích hoạt hoặc đầu vào của người dùng, bằng cách sử dụng nhiều cơ chế khác nhau như lệnh gọi hàm, sự kiện hoặc công cụ sửa đổi. Khả năng tương tác cao với thế giới xung quanh giúp nhân rộng các dịch vụ ngân hàng truyền thống. Mã Bitcoin Script không thể truy cập hoặc phản hồi bất kỳ dữ liệu hoặc sự kiện bên ngoài nào và chỉ có thể hoạt động trên dữ liệu do chính giao dịch cung cấp.

Solidity và EVM có thể mang lại tính diễn đạt và đầy đủ hơn Bitcoin Script, vì chúng có thể sử dụng nhiều tính năng khác nhau như vòng lặp, đệ quy, tính toán trạng thái, hàm bậc cao hơn hoặc lazy valuation (tính toán trễ). Ethereum có thể cung cấp tính bảo mật và độ tin cậy cao hơn Bitcoin Script, vì hợp đồng thông minh có thể sử dụng xác minh và thử nghiệm chính thức để đảm bảo tính chính xác và an toàn của hợp đồng thông minh (có sẵn nhiều công cụ và frameworks khác nhau).

Tính diễn đạt và trạng thái cao hơn có thể đòi hỏi nhiều kỹ năng và sự cẩn trong hơn Bitcoin Script để viết và thực hiện các hợp đồng thông minh, vì chúng có thể phức tạp hơn và có nhiều cạm bẫy hay lỗi tiềm ẩn hơn.

Việc thực hiện các hợp đồng thông minh có thể phải chịu nhiều chi phí hơn Bitcoin Script để chạy các hợp đồng thông minh, vì chúng có thể tiêu tốn nhiều phí gas hơn cho các tài nguyên tính toán và lưu trữ trên mạng. Ethereum có thể phải đối mặt với nhiều vấn đề về khả năng mở rộng hơn so với việc xử lý Bitcoin Script, vì việc thực thi các hợp đồng thông minh có thể tạo ra nhiều tắc nghẽn và độ trễ mạng hơn do nhu cầu tài nguyên cao hơn.

Hầu hết các giao dịch Ethereum đều liên quan đến việc thực hiện hợp đồng thông minh. DeFi, NFT và stablecoin là những ngành Blockchain phù hợp mở ra những khả năng mới. Ethereum đã vượt qua Bitcoin về số lượng người dùng và số lượng giao dịch thực thi.

Cardano có tập lệnh gốc và tập lệnh Plutus

Cardano là một nền tảng hợp đồng thông minh tương tự Ethereum nhưng có nhiều điểm khác biệt. Việc viết tập lệnh trên Cardano có thể được thực hiện theo hai cách: tập lệnh gốc và tập lệnh Plutus.

Tập lệnh gốc là các tập lệnh đơn giản có thể được sử dụng để khóa tiền, token đúc hoặc ủy quyền ADA. Chúng được viết ở định dạng giống JSON và có thể được diễn giải trực tiếp bằng các quy tắc sổ cái Cardano. Và tập lệnh gốc không yêu cầu bất kỳ công cụ đặc biệt hoặc máy ảo nào để xác thực chúng.

Tập lệnh gốc là một cách để thực hiện giao dịch nhiều chữ ký. Chúng được sử dụng trong chứng chỉ ủy quyền. Chứng chỉ ủy quyền là một loại giao dịch cho phép các bên liên quan ủy quyền ADA của họ cho stake pool.

Trong hình ảnh bên dưới, bạn có thể thấy một giao dịch có tập lệnh gốc. Lưu ý rằng node Cardano không cần bất kỳ máy ảo hoặc trình thông dịch nào để thực thi tập lệnh (không giống như Bitcoin và Ethereum). Chúng được thực thi nguyên bản. Alice có thể gửi một giao dịch với chứng chỉ ủy quyền trong đó cô ủy quyền ADA cho nhóm của Bob. Ngoài ra, nó có thể là một giao dịch có chứa tập lệnh đúc tiền. Token sẽ được đúc vào địa chỉ của Bob (nhà phát hành token).

Có hai cách để đưa tập lệnh gốc vào giao dịch:

  • Đầu tiên, nhúng tập lệnh làm Dữ liệu trong giao dịch. Điều này có nghĩa là tập lệnh là một phần của dữ liệu giao dịch và bất kỳ ai kiểm tra giao dịch đều có thể nhìn thấy. Phương pháp này phù hợp với các tập lệnh ngắn và đơn giản hoặc cần thay đổi thường xuyên.
  • Thứ hai, lưu trữ tập lệnh trên Blockchain thông qua một giao dịch và tham chiếu nó bằng hàm hash của nó. Tập lệnh được lưu trữ dưới dạng đầu ra trên Blockchain và có thể được xác định bằng hàm hash duy nhất của nó. Đầu ra phải có địa chỉ được lấy từ hàm hash của tập lệnh và phải có giá trị ít nhất là 1 ADA để đảm bảo rằng nó không bị mạng cắt bớt. Phương pháp này phù hợp với các tập lệnh dài và phức tạp hoặc cần phải cố định và không thể thay đổi.

Có thể tham chiếu tập lệnh gốc được lưu trữ trên Blockchain nhiều lần liên tiếp. Miễn là đầu ra tập lệnh không được sử dụng bởi một giao dịch khác, nó có thể được sử dụng làm đầu vào cho nhiều giao dịch sử dụng cùng một tập lệnh.

Trong hình bên dưới, bạn có thể thấy trường hợp tương tự như trên, với điểm khác biệt là giao dịch tham chiếu đến tập lệnh gốc được lưu trữ trong blockchain thông qua hàm hash.

Các tập lệnh gốc chủ yếu là logic on-chain, vì chúng được nhúng trong giao dịch hoặc được lưu trữ trên Blockchain. Tuy nhiên, chúng cũng có thể có một số logic off-chain, chẳng hạn như tạo các giao dịch sử dụng tập lệnh gốc làm đầu vào hoặc đầu ra. Ví dụ: bạn có thể sử dụng JavaScript, Python hoặc Java để tạo các ứng dụng tạo giao dịch sử dụng tập lệnh gốc.

Bây giờ chúng ta hãy xem xét kỹ hơn các tập lệnh Plutus.

Tập lệnh Plutus là tập lệnh phức tạp và có thể diễn đạt được nhiều hơn, có thể triển khai logic tùy biến và tương tác với các hợp đồng thông minh khác. Chúng được viết bằng Haskell, một ngôn ngữ lập trình chức năng và được biên dịch thành Plutus Core, một ngôn ngữ cấp thấp chạy trên máy ảo Cardano (CVM).

Một trong những tính năng chính của tập lệnh trên Cardano là tách mã on-chain và mã off-chain (logic của chương trình).

Logic on-chain là logic chạy trên Blockchain và xác thực các giao dịch liên quan đến hợp đồng thông minh. Logic on-chain được viết bằng Plutus Core và được thực thi bởi máy ảo Cardano. Logic on-chain là bất biến và minh bạch, nghĩa là nó không thể bị thay đổi hoặc ẩn đi sau khi được triển khai trên Blockchain.

Logic off-chain là logic chạy bên ngoài Blockchain và xử lý các yêu cầu cũng như tương tác của ứng dụng hợp đồng thông minh. Logic off-chain được viết bằng Haskell, một ngôn ngữ cấp cao có thể sử dụng Khung ứng dụng Plutus (PAF) để truy cập các dịch vụ như node, ví, oracle, v.v. Tuy nhiên, các ngôn ngữ lập trình cấp cao khác cũng có thể được sử dụng (JavaScript, Python hoặc Java).

Logic off-chain có thể thay đổi và riêng tư, nghĩa là nó có thể được cập nhật hoặc sửa đổi mà không ảnh hưởng đến logic on-chain hoặc yêu cầu hark fork.

Tập lệnh Plutus là các hợp đồng thông minh sử dụng cả logic on-chain và off-chain. Phần on-chain của tập lệnh Plutus được gọi là tập lệnh xác thực, quyết định xem giao dịch chi tiêu đầu ra có được phép thực hiện như vậy hay không. Phần off-chain của tập lệnh Plutus được gọi là phần phụ trợ ứng dụng Plutus (PAB), tạo ra các giao dịch tuân theo các quy tắc của tập lệnh trình xác thực.

Việc tách mã on-chain và mã off-chain rất hữu ích vì nhiều lý do. Đầu tiên, nó cho phép các nhà phát triển viết hợp đồng thông minh bằng ngôn ngữ cấp cao như Haskell, Java, Python JavaScript, dễ đọc, viết và kiểm tra hơn các ngôn ngữ cấp thấp như Plutus Core hay Solidity. Thứ hai, nó làm giảm quy mô và chi phí của các giao dịch chạy hợp đồng thông minh, vì chỉ có mã on-chain thiết yếu mới được đưa vào giao dịch. Thứ ba, nó cải thiện tính bảo mật và khả năng mở rộng của hợp đồng thông minh, vì mã off-chain có thể được cập nhật và sửa đổi mà không ảnh hưởng đến mã on-chain hoặc yêu cầu phân nhánh cứng.

Việc tách mã on-chain và mã off-chain rất tốt để tạo ra các ứng dụng hợp đồng thông minh linh hoạt và mạnh mẽ. Bằng cách sử dụng các công cụ như Khung ứng dụng Plutus (PAF) và Phần phụ trợ ứng dụng Plutus (PAB), các nhà phát triển có thể dễ dàng tạo và triển khai các ứng dụng hợp đồng thông minh của họ cục bộ hoặc trong môi trường sản xuất trực tiếp.

Tập lệnh Plutus có thể là một phần của giao dịch dưới dạng đầu vào hoặc đầu ra, tùy thuộc vào cách chúng được sử dụng. Có hai loại tập lệnh Plutus chính: tập lệnh xác thực và chính sách đúc tiền (tập lệnh đúc tiền).

Tập lệnh xác thực được sử dụng để khóa tiền trong một địa chỉ tập lệnh và xác thực việc chi tiêu số tiền đó. Tập lệnh xác thực có thể được nhúng vào giao dịch dưới dạng Datum hoặc được lưu trữ trên Blockchain và được tham chiếu bởi hàm hash của nó. Nó tương tự như các kịch bản gốc.

Ưu điểm của việc lưu trữ tập lệnh trên Blockchain là nó làm giảm quy mô giao dịch và phí, nhưng nó cũng làm cho tập lệnh trở nên công khai và không thể thay đổi.

Chính sách đúc tiền được sử dụng để kiểm soát việc tạo và hủy token tùy chỉnh. Chính sách đúc tiền chỉ có thể được lưu trữ trên Blockchain và được tham chiếu bởi hàm hash của nó. Điều này đảm bảo rằng chính sách khai thác là duy nhất và nhất quán cho tất cả các token cùng loại.

Các tập lệnh xác thực có tính linh hoạt cao hơn, trong khi các chính sách đúc tiền có tính nhất quán hơn.

Khi tập lệnh trình xác thực được thực thi, nó sẽ chuyển ba mẩu thông tin này dưới dạng đối số:

  • Datum: Đó là một phần dữ liệu được gắn vào UTxO mà tập lệnh đang khóa. Điều này thường được sử dụng để mang trạng thái (trạng thái ứng dụng).
  • Redeemer: Đó là một phần dữ liệu được gắn vào đầu vào chi tiêu. Điều này thường được sử dụng để cung cấp đầu vào cho tập lệnh từ người chi tiêu (dữ liệu đầu vào có thể mở khóa tiền thông qua tập lệnh).
  • Context: Đây là một phần dữ liệu thể hiện thông tin về giao dịch chi tiêu. Điều này được sử dụng để đưa ra các xác nhận về cách gửi đầu ra.

Trong hình ảnh bên dưới, bạn có thể thấy hợp đồng thông minh Cardano bao gồm logic off-chain (phụ trợ) và logic on-chain. Một ứng dụng có thể sử dụng logic off-chain để tạo giao dịch bằng các tập lệnh và cùng một chương trình phụ trợ để tạo giao dịch chi tiêu. Bob đã tạo giao dịch bằng một tập lệnh. Nó chứa tập lệnh Plutus (trình xác thực) và cả UTxO bị khóa thông qua trình xác thực (tập lệnh). UTxO có thể chứa Datum, là một phần dữ liệu có thể được sử dụng để lưu trữ trạng thái của hợp đồng. Alice muốn mở khóa UTxO. Để chi tiêu UTxO, một giao dịch chi tiêu có thể chứa Redeemer phải được tạo trong phần off-chain của hợp đồng thông minh. Redeemer là đầu vào cho tập lệnh Plutus, quyết định giao dịch chi tiêu có hợp lệ hay không.

ghi chú thêm
  • Datum có thể được hiểu như một ổ khóa.
  • Redeemer có thể được hiểu như là chìa khóa.

Ai cung cấp đúng chìa khóa (Redeemer) thì sẽ mở được ổ khóa (Datum) và điều này đồng nghĩa với việc có quyền sử dụng giao dịch chứa Datum.

Logic ứng dụng được xác định trong phần phụ trợ cho phép Bob khóa giá trị và Alice mở khóa giá trị. Giao dịch đầu tiên khóa tiền tại địa chỉ tập lệnh và giao dịch thứ hai kích hoạt việc thực thi tập lệnh để mở khóa tiền.

Lưu ý rằng trong trường hợp giao dịch tập lệnh (giao dịch của Bob), mũi tên từ phía bên trái của phần phụ trợ sẽ dẫn trực tiếp đến giao dịch ở phần bên phải của hình ảnh. Điều này có nghĩa là tập lệnh Plutus không được thực thi khi giao dịch được giải quyết. Tập lệnh xác thực khóa tiền tại địa chỉ tập lệnh và việc thực thi được kích hoạt bởi một giao dịch chi tiêu (giao dịch của Alice). Đây là lý do tại sao mũi tên dẫn từ giao dịch chi tiêu đến máy ảo Cardano.

Logic off-chain có thể tạo ra các giao dịch tập lệnh khóa tiền trong một địa chỉ tập lệnh và yêu cầu một giá trị Redeemer cụ thể để mở khóa chúng. Ví dụ: Bob có thể sử dụng logic off-chain để tạo giao dịch tập lệnh khóa 10 ADA trong một địa chỉ tập lệnh và yêu cầu giá trị “Xin chào” của Redeemer để mở khóa chúng. Sau đó, Bob có thể gửi địa chỉ tập lệnh kèm theo thông báo giá trị Redeemer cho Alice, người có thể sử dụng logic off-chain để tạo giao dịch chi tiêu cung cấp giá trị Redeemer chính xác và chi tiêu 10 ADA từ địa chỉ tập lệnh.

Logic off-chain có thể sử dụng Phần phụ trợ ứng dụng Plutus (PAB) để quản lý và xử lý các yêu cầu của phiên bản ứng dụng trong suốt vòng đời của nó. PAB hoạt động như một trung gian giữa các ứng dụng Plutus, node, phần phụ trợ ví và người dùng cuối. PAB cũng giúp xây dựng các giao dịch chạy tập lệnh Plutus trên Blockchain.

Các tập lệnh Plutus không có trạng thái theo nghĩa là chúng không có quyền truy cập vào bất kỳ bộ lưu trữ liên tục hoặc biến toàn cục (global) nào. Tuy nhiên, họ có thể sử dụng một kỹ thuật gọi là phân luồng trạng thái để mô phỏng hành vi có trạng thái bằng cách truyền dữ liệu giữa các phiên bản tập lệnh khác nhau. Trạng thái được lưu trữ dưới dạng Dữ liệu được gắn vào đầu ra tập lệnh và nó có thể được truy cập bằng đầu vào tập lệnh tiếp theo sử dụng đầu ra đó. Datum có thể là bất kỳ loại dữ liệu tùy ý nào mà tập lệnh có thể mã hóa và giải mã.

Phân luồng trạng thái cho phép các tập lệnh Plutus triển khai logic và tương tác phức tạp, chẳng hạn như máy trạng thái, oracle và sơ đồ đa chữ ký. Tuy nhiên, nó cũng yêu cầu thiết kế và phối hợp cẩn thận để đảm bảo trạng thái được cập nhật chính xác và nhất quán. Ví dụ: tập lệnh có thể cần kiểm tra xem trạng thái chưa bị sửa đổi bởi giao dịch khác kể từ lần truy cập cuối cùng hay trạng thái đó có nằm trong phạm vi giá trị hợp lệ hay không.

Tập lệnh Plutus có tính diễn đạt cao hơn tập lệnh Bitcoin và hợp đồng thông minh Ethereum. Haskell là ngôn ngữ lập trình Hàm có thể thực hiện logic tùy ý và tương tác với các hợp đồng thông minh khác. Phần phụ trợ có thể được triển khai bằng bất kỳ ngôn ngữ cấp cao nào. Solidity cũng có thể triển khai logic phức tạp và tương tác với các hợp đồng thông minh khác, nhưng nó có một số hạn chế và nhược điểm so với Haskell. Ví dụ:

  • Solidity có nguy cơ xảy ra lỗi và lỗ hổng bảo mật cao hơn do trạng thái có thể thay đổi và chi tiết cấp thấp.
  • Solidity cũng có chi phí thực hiện cao hơn do mô hình gas của nó, điều này hạn chế sự phức tạp và khả năng mở rộng của các ứng dụng hợp đồng thông minh trên Ethereum.

Haskell là ngôn ngữ hỗ trợ xác minh chính thức vì nó có cú pháp rõ ràng và chính xác, hệ thống kiểu (typed) tĩnh và mạnh mẽ cũng như ngữ nghĩa thuần túy và xác định. Haskell cũng có các thư viện và công cụ có thể giúp xác minh chính thức, chẳng hạn như QuickCheck, LiquidHaskell và Coq.

Nếu bạn nhìn vào nội dung của các khối trong mạng Cardano, tập lệnh giao dịch nhiều hơn khoảng 2 lần so với các giao dịch thông thường (giao dịch không phải tập lệnh). Điều này là do Cardano có token gốc nên không cần thiết phải tương tác với tập lệnh để chuyển token. Và, bạn có thể thấy nhiều giao dịch phổ biến.

Lời kết

Bitcoin không và sẽ không có thể làm được tương tự như Cardano hoặc Ethereum. Các tập lệnh bitcoin rất đơn giản và không cho phép tạo ra logic phức tạp cần thiết để tạo ra một dịch vụ tài chính thay thế. Ordinals, Inscriptions và BRC-20 là những công nghệ không có tiềm năng vượt qua khả năng của nền tảng của hợp đồng thông minh. Giao thức Bitcoin về cơ bản chỉ ghi dữ liệu vào Blockchain mà không có bất kỳ xác thực nào về nội dung. Không có sự thực thi chương trình của bên thứ ba.

Trong bài viết, chúng tôi chủ yếu tập trung vào việc mô tả các phương án lập trình và không tập trung quá nhiều vào việc so sánh. Chúng ta sẽ xem xét điều đó vào lúc nào đó vào lần tới.

Phát triển khả năng lập trình Blockchain ( cardano )

Nguồn bài viết tại đây


Picture


Đọc thêm các bài viết liên quan tại thẻ Tags bên dưới