Xây dựng ứng dụng Blockchain với Plutus

Xây dựng ứng dụng Blockchain với Plutus

Giới thiệu

Chúc mừng! Bạn vừa bắt đầu một cuộc hành trình ly kỳ vào thế giới phát triển blockchain với Plutus. Là một người đã từng ở đó, hãy để tôi nói với bạn rằng nó không chỉ đơn thuần là viết mã – mà còn là việc xây dựng nền tảng cho các hệ thống phi tập trung có thể định hình lại các ngành công nghiệp.

Blockchain đang tạo ra tác động đáng kể trên nhiều lĩnh vực bằng cách cung cấp các giải pháp phi tập trung và minh bạch. Sự phát triển trong công nghệ phát triển đã thay đổi đáng kể cục diện của cả nhà phát triển và cộng đồng. Ngoài việc phân quyền, blockchain còn mang lại những lợi ích như thời gian giao dịch nhanh hơn và loại bỏ nhu cầu xác minh của bên thứ ba, từ đó giảm gian lận và các mối đe dọa trên mạng. Đối với các nhà phát triển, việc thành thạo việc phát triển ứng dụng blockchain là một kỹ năng quý giá, đặc biệt là khi làm việc với các công cụ mạnh mẽ như Plutus. Plutus là một nền tảng hợp đồng thông minh trên chuỗi khối Cardano cung cấp nền tảng vững chắc để tạo các ứng dụng phi tập trung (DApps) an toàn và hiệu quả.

Cardano là gì?

một để quản lý các giao dịch và tài khoản, trong khi cái còn lại dành riêng để xử lý các hợp đồng thông minh và tính toán. Mục tiêu cuối cùng của Cardano là phát triển một nền tảng blockchain cung cấp tính bảo mật, khả năng mở rộng và khả năng thích ứng nâng cao so với các nền tảng tiền nhiệm. Nó tìm thấy các ứng dụng trong nhiều lĩnh vực khác nhau như quản lý chuỗi cung ứng, xác minh danh tính kỹ thuật số và dịch vụ tài chính ở các thị trường đang phát triển.

Plutus

Nói một cách đơn giản hơn, Plutus là ngôn ngữ để tạo hợp đồng trên nền tảng Cardano. Nó được xây dựng dựa trên Haskell, một ngôn ngữ lập trình chức năng, nghĩa là bạn không viết Plutus Core trực tiếp – thay vào đó, các tập lệnh được tạo tự động bởi một plugin trong trình biên dịch Haskell. Tính năng này cho phép xác minh chính thức, sử dụng bằng chứng toán học để đảm bảo tính chính xác của hợp đồng và tăng cường bảo mật, giảm các lỗi tiềm ẩn trong hợp đồng thông minh.

Trên chuỗi khối Cardano, Plutus hoạt động liền mạch, cho phép các nhà phát triển tương tác trực tiếp với cơ sở dữ liệu và cơ sở hạ tầng của Cardano. Điều này tạo điều kiện thuận lợi cho việc phát triển và triển khai các hợp đồng thông minh có thể tương tác trực tiếp với mạng Cardano. Plutus cung cấp các công cụ mô phỏng hợp đồng thông minh mà không cần nút Cardano đầy đủ, cho phép thử nghiệm trước khi khởi chạy trên mạng chính. Plutus là sự lựa chọn lý tưởng cho các nhà phát triển muốn tạo ra các ứng dụng phi tập trung mạnh mẽ và hiệu quả.

Khán giả

Bài viết này phục vụ cho các nhà phát triển mới bắt đầu dấn thân vào lĩnh vực lập trình blockchain với kinh nghiệm mã hóa tối thiểu. Chúng tôi sẽ hướng dẫn bạn từng bước cách định cấu hình không gian làm việc của bạn, nắm bắt các nguyên tắc blockchain cơ bản và xây dựng ứng dụng blockchain cơ bản bằng cách sử dụng Plutus làm điểm bắt đầu.

Thiết lập môi trường phát triển

Bắt đầu với sự chuẩn bị lý tưởng cho cuộc phiêu lưu phát triển của bạn là điều cần thiết. Vì vậy, việc thiết lập một môi trường hỗ trợ cho Plutus là nền tảng cho giai đoạn này.

1. Đang cài đặt Plutus

Tải xuống Plutus từ kho lưu trữ chính thức: 

bản sao git https://github.com/input-output-hk/plutus-apps.git
cd plutus-apps
nix-shell

Xác minh cài đặt bằng cách sử dụng: plutus -v

2. Chọn IDE

Trong khi việc phát triển các ứng dụng với Plutus có IDE phù hợp là rất quan trọng. Plutus dựa trên Haskell do đó nên có IDE hỗ trợ Haskell. Hai tùy chọn phổ biến để phát triển Plutus là Visual Studio Code (VS Code) và Plutus Playground. Đây là hướng dẫn mở rộng về cách thiết lập và sử dụng các IDE này để phát triển Plutus.

Tùy chọn Trình chỉnh sửa Mã: VSCode hoặc Visual Studio Code, là trình soạn thảo văn bản phổ biến và có khả năng thích ứng, hoạt động với hầu hết mọi ngôn ngữ lập trình và cung cấp các tiện ích mở rộng hữu ích. Điều này làm cho nó được các nhà phát triển ưa thích cho các nhiệm vụ mã hóa của họ. VSCode mã nguồn mở cung cấp một bộ công cụ và tính năng mở rộng để hợp lý hóa quy trình mã hóa của bạn.

Các bước thiết lập VSCode:

  • Tải xuống VSCode từ trang web chính thức(theo hệ điều hành của bạn)
  • Cài đặt phần mềm
  • Plutus được xây dựng trên Haskell, vì vậy bạn cần cài đặt Nền tảng Haskell, bao gồm Trình biên dịch Haskell Glasgow (GHC) và cabal (một công cụ xây dựng cho Haskell).
  • Tải xuống Haskell
  • Cài đặt tiện ích mở rộng Haskell trong Mã VS( Haskero, Haskell Syntax Higlighting, v.v.)
  • Định cấu hình tiện ích mở rộng và thiết lập tiện ích mở rộng bổ sung
  • Vì bạn đã cài đặt Plutus nên bạn đã sẵn sàng sử dụng!!

Trình chỉnh sửa Plutus trực tuyến: Trình chỉnh sửa Plutus trực tuyến đóng vai trò là không gian làm việc dựa trên web, thuận tiện được thiết kế đặc biệt để viết hợp đồng thông minh Plutus. Vì nó không yêu cầu cài đặt nên đây là điểm khởi đầu lý tưởng cho những người mới bắt đầu xây dựng kỹ năng viết mã của mình một cách tự tin.

Bạn có thể truy cập trang web Plutus Playground và bắt đầu!!

Trong cả hai trường hợp, bạn có thể phát triển Plutus một cách hiệu quả. Bạn có thể khám phá cách tiếp cận hiệu quả bằng cách sử dụng Visual Studio Code cho các dự án toàn diện, đồng thời tận dụng Plutus Playground để thử nghiệm và lên ý tưởng nhanh chóng, từ đó tận hưởng được lợi ích của từng môi trường.

3. Cài đặt thư viện cần thiết

Sử dụng cabal để cài đặt các thư viện cần thiết cho việc phát triển Plutus.

Hiểu các khái niệm về chuỗi khối với Plutus  

Nói một cách đơn giản hơn, Blockchain là một hệ thống được nối mạng phức tạp để lưu trữ dữ liệu giao dịch. Thay vì cơ sở dữ liệu truyền thống nơi thông tin nằm ở một vị trí duy nhất, hệ thống này sẽ trải rộng dữ liệu trên nhiều máy tính. Mỗi phần dữ liệu được lưu trữ (hoặc “khối”) được kết nối với các khối khác bằng các nguyên tắc toán học phức tạp và sau khi được ghi lại, các khối này rất khó thay đổi mà không gây ra sự cố với các khối tiếp theo. Thiết kế này đảm bảo rằng hồ sơ tiền tệ kỹ thuật số không bị thay đổi và an toàn.

Blockchain có ba thành phần cơ bản:

  • Khối: Khối chứa thông tin về giao dịch cùng với siêu dữ liệu. Tất cả các khối được liên kết với nhau thông qua hàm băm, tạo thành một chuỗi các khối, do đó gọi là blockchain 
  • Giao dịch: Giao dịch là việc truyền dữ liệu từ thực thể này sang thực thể khác trong chuỗi khối. Trong Plutus, các giao dịch được viết bằng Haskell và liên quan đến UTXO đầu vào và đầu ra (Đầu ra giao dịch chưa chi tiêu).
  • Chuỗi: Trong Plutus, chuỗi duy trì thứ tự giao dịch và đảm bảo rằng chúng không thể thay đổi sau khi được xác nhận.

Trong đoạn mã sau chúng ta có thể thấy cấu trúc của Khối trong Plutus:

Xây dựng ứng dụng Blockchain với Plutus

Mọi thành phần của khối đều được đề cập cùng với kiểu dữ liệu của nó

  • Chỉ số là một số nguyên cho biết vị trí của một khối
  • Dấu thời gian là thời điểm khối được tạo
  • Giao dịch là chuỗi hoặc danh sách tất cả các giao dịch có trong một khối cụ thể
  • Hash là một mẫu duy nhất và là khóa chính để xác định một khối
  • Giá trị băm trước đó đề cập đến tính liên tục và là giá trị băm của khối cuối cùng

Trong đoạn mã này chúng ta có thể thấy cấu trúc của Giao dịch trong Plutus:

Xây dựng ứng dụng Blockchain với Plutus

Cơ chế phân cấp, bất biến và đồng thuận:

Sức mạnh của Blockchain bắt nguồn từ ba yếu tố cơ bản: hệ thống phân phối, lâu dài và thỏa thuận.

Phân cấp: Phân cấp đề cập đến một đặc điểm mà không một thực thể nào có quyền đối với cơ sở dữ liệu trong Blockchain. Thiết lập này khiến cho sự sụp đổ và sai lệch của hệ thống cực kỳ khó xảy ra vì mỗi thiết bị tham gia (hoặc nút) đều giữ một bản sao của chuỗi khối. Điều này đảm bảo tính minh bạch và ngăn chặn các lỗi tập trung hoặc giả mạo.

Tính bất biến của Blockchain đề cập đến thực tế là mọi dữ liệu được ghi trên đó vẫn không thay đổi và không thể xóa được. Sau khi thông tin được ghi lại, nó không thể được sửa đổi hoặc xóa mà không ảnh hưởng đến tất cả các khối tiếp theo nhờ vào hàm băm mật mã. Điều này có nghĩa là bất kỳ thay đổi nào đã được thực hiện đều không thể đảo ngược được, khiến toàn bộ hệ thống trở nên bất biến.

Giao thức đồng thuận Blockchain: Tập hợp các quy tắc chi phối các khía cạnh khác nhau của mạng blockchain. Các giao thức này yêu cầu tất cả các nút tham gia trong mạng phải đồng tình với các phương thức đang được sử dụng. Cơ chế đồng thuận dùng để đồng bộ hóa các nút này và đảm bảo rằng tất cả chúng đều hoạt động theo cùng một nguyên tắc.

Xây dựng một Blockchain đơn giản với Plutus

Khối xây dựng cơ bản của bất kỳ chuỗi khối nào được gọi là ‘khối’. Trong đoạn mã cụ thể này, chúng tôi đã thiết lập cấu trúc dữ liệu ‘khối’, hoàn chỉnh với các phần cấu thành của nó.

Là một nhà nghiên cứu tập trung vào phát triển blockchain, tôi nhận ra tầm quan trọng của việc duy trì tính toàn vẹn của hệ thống blockchain của chúng tôi. Để đạt được điều này, điều quan trọng là mỗi khối trong chuỗi phải sở hữu một hàm băm riêng biệt. Với mục đích này, chúng tôi sử dụng phương pháp băm SHA256, phương pháp được công nhận và tin cậy rộng rãi trong lĩnh vực này, để tính toán các hàm băm này bằng Plutus.

Xây dựng ứng dụng Blockchain với Plutus

Sau khi xác định nội dung của một khối, hãy tiến hành thiết lập chuỗi khối của bạn bằng cách sử dụng khối gốc, khối này đóng vai trò là khối ban đầu trong bất kỳ chuỗi khối nào. Chúc mừng! Bây giờ bạn đã tạo một chuỗi khối, nhưng còn nhiều việc phải làm: bạn sẽ cần thêm các khối mới và truy xuất khối gần đây nhất.

Hãy tiếp tục và tham khảo mã bên dưới trong trường hợp bạn cần bất kỳ trợ giúp nào!

Xây dựng ứng dụng Blockchain với Plutus

Triển khai Cơ chế Đồng thuận trong Plutus 

Ban đầu, Cardano hoạt động theo cơ chế Proof of Work, nhưng sau đó chuyển sang hệ thống Proof of Stake. Đáng chú ý, Plutus được thiết kế có tính tương thích với giao thức Ouroboros PoS của Cardano. Thiết kế này đảm bảo khả năng mở rộng, tiết kiệm năng lượng và bảo mật cho các ứng dụng phi tập trung (DApps).

Dưới đây là tổng quan về các thuật toán đồng thuận có thể hoạt động với Plutus

  • Ouroboros: Ouroboros là một cơ chế Bằng chứng cổ phần mà Plutus có khả năng tương thích cao và nó phụ thuộc vào cổ phần của ADA mà người xác thực sẵn sàng chấp nhận để xác thực một khối mới. Hợp đồng Plutus tương tác liền mạch với giao thức Ouroboros, đảm bảo rằng việc thực hiện hợp đồng thông minh vẫn an toàn và tiết kiệm năng lượng.
  • Bằng chứng công việc: PoW là cơ chế cổ xưa nhất và được sử dụng rộng rãi trong tất cả các loại tiền điện tử cũ. Nó vẫn có thể được thực hiện trên giấy trong trường hợp của Plutus. Điều này sẽ hữu ích hơn khi nghĩ đến các tình huống riêng biệt như mục đích giáo dục và mục đích thử nghiệm.
  • Bằng chứng công việc được ủy quyền & Khả năng chịu lỗi Byzantine: Các cơ chế này không đặc biệt tương thích với Cardano nhưng về mặt lý thuyết vẫn có thể được triển khai trên Plutus.

Trong phần này, chúng ta sẽ khám phá cách một người có thể sử dụng Proof of Work trong Plutus.

Xây dựng ứng dụng Blockchain với Plutus

Trong hệ thống Bằng chứng công việc, trước tiên, những người khai thác chạy đua với nhau để giải một bài toán phức tạp, điều này cấp cho họ quyền xác thực việc tạo ra một đồng tiền mới. Trong đoạn mã này, hàm chứng minh công việc tìm kiếm một số cụ thể được gọi là ‘nonce’, khi kết hợp với hàm băm của khối trước đó, sẽ tạo ra một hàm băm mới bắt đầu bằng số lượng số 0 được xác định trước ở đầu. Đây là một ví dụ đơn giản về PoW, trong đó mức độ khó tự điều chỉnh để làm cho việc tìm kiếm một nonce hợp lệ trở nên dễ dàng hơn hoặc khó hơn.

Sau khi hoàn tất quá trình thiết lập Bằng chứng công việc, điều quan trọng là phải sửa đổi chuỗi khối để xác thực bằng chứng đã khai thác.

Đây là đoạn mã ví dụ:

Xây dựng ứng dụng Blockchain với Plutus

Chức năng này đảm bảo rằng một khối mới chỉ có thể được thêm vào chuỗi khối khi bằng chứng của nó được xác minh, do đó duy trì tính xác thực và tính nhất quán của chuỗi.

Tạo API Blockchain đơn giản với Plutus  

Trong phần này, chúng tôi sẽ hướng dẫn bạn xây dựng API cơ bản để giao tiếp với ứng dụng blockchain được phát triển thông qua Plutus. API này phục vụ hai mục đích: cho phép người dùng nối thêm các khối mới và cung cấp quyền truy cập để khám phá chuỗi khối bằng cách gửi truy vấn HTTP.

Các bước để tạo API:

  • Thiết lập Môi trường cho API: Cài đặt Haskel(Việc này đã hoàn tất), tiếp theo Cài đặt Servant bằng Cabal
  • Tải xuống tất cả các thư viện cần thiết:
    • Người phục vụ: Để tạo API
    • Aeson để mã hóa và giải mã JSON: cabal install aeson plutus-core
    • Plutus để tích hợp tất cả mã và logic

Ban đầu, khi xây dựng API, hãy bắt đầu mọi thứ bằng cách kết hợp một khối mới và tạm dừng trạng thái hiện có của chuỗi khối. Những hành động này đã được thực hiện chi tiết trong các phần trước.

Bây giờ bạn có thể tiếp tục và xác định các điểm cuối:

{-# NGÔN NGỮ DataKinds #-}{-# NGÔN NGỮ TypeOperators #-}mô-đun BlockchainAPI nơi nhập khẩu Servantimport Control.Monad.IO.Class (liftIO)— Xác định loại Khối (tham khảo Chương 3) Khối dữ liệu = Chỉ mục khối :: Int  , dấu thời gian    :: String  , dataField    :: String  , previousHash :: String  , hash         :: String  } phái sinh (Show, Eq)— Blockchain chỉ đơn giản là một danh sách Blockstype Blockchain = [Block]— Xác định loại API BlockchainAPI = “addBlock” :> ReqBody ‘[JSON] Block :> Đăng ‘[JSON] Blockchain:<|> “chain” :> Nhận ‘[JSON] Blockchain— Trình giữ chỗ cho chuỗi khối, ban đầu chỉ bắt đầu bằng Genesis blockgenesisBlock = Block 0 “2024-09-12 00:00:00” “Genesis Block” “0” “some_hash”initialBlockchain:: BlockchaininitialBlockchain = [genesisBlock]– Trình xử lý cho điểm cuối APIaddBlockHandler :: Blockchain -> Block -> Handler BlockchainaddBlockHandler blockchain newBlock = dolet newBlockchain = blockchain ++ [newBlock]    liftIO $ putStrLn “Đã thêm khối!”    return newBlockchain— Trình xử lý để truy xuất chainviewChainHandler :: Blockchain -> Handler BlockchainviewChainHandler blockchain = return blockchain-Điểm vào chính để chạy APIapp :: Applicationapp = phục vụ (Proxy :: Proxy BlockchainAPI) (blockchainServer initBlockchain)

Giải thích đoạn mã trên:

  • Khối được định nghĩa tương tự như các chương trước
  • Thư viện Servant được sử dụng để xác định cấu trúc của API. Có hai phương pháp để xác định điểm cuối API, GET và POST nghĩa là truy xuất và thêm chuỗi khối tương ứng.
  • Chúng tôi cũng đã xác định các trình xử lý (addBlockHandler)  để xử lý các khối mới đang được thêm vàviewChainHandler) xem khối khác
  • Cuối cùng, có một chức năng chính là trung tâm của mã liên kết mọi thứ lại với nhau và chạy máy chủ API.

Theo định nghĩa API, có hai cách để bao gồm Điểm cuối và thu thập thông tin chi tiết về Điểm cuối Blockchain.

Xây dựng ứng dụng Blockchain với Plutus

Hoan hô! Bạn đã tích hợp phần này một cách hiệu quả, cho phép bạn chạy API với Cabal. Hãy tự tin tiến tới giai đoạn tiếp theo vì mọi thứ dường như đã sẵn sàng!

Chạy và kiểm tra ứng dụng

Sau khi xây dựng API blockchain, hãy tiến hành chạy một số thử nghiệm. Chúng tôi có thể sử dụng các công cụ như Postman hoặc Curl để tương tác với API, đảm bảo xác nhận chức năng phù hợp của API.

Các bước chạy và kiểm tra ứng dụng:

  • Biên dịch chương trình và chạy nó:  cabal build   cabal run
  • Khởi động máy chủ: API sẽ có sẵn tại http://localhost:8080
  • Kiểm tra và thêm điểm cuối Chặn

 “chỉ mục”: 1,  
“dấu thời gian”: “2024-09-12 12:30:00”, 
 “dataField”: “Đây là khối mới của tôi”,  
“previousHash”: “some_hash”,  
“băm”: “new_block_hash”

Xem chuỗi khối

curl http://localhost:8080/chain

Với tư cách là một nhà nghiên cứu, tôi đã thiết lập thành công một ứng dụng blockchain cơ bản hiện hoạt động với API được tạo bằng cách sử dụng Plutus. API này cho phép các ứng dụng hoặc người dùng khác tương tác với chuỗi khối của tôi một cách liền mạch, cấp cho họ khả năng nối thêm các khối mới và kiểm tra trạng thái hiện tại của chuỗi khối.

Ví dụ trực tiếp về xây dựng ứng dụng Blockchain với Plutus

Xây dựng ứng dụng Blockchain với Plutus
Xây dựng ứng dụng Blockchain với Plutus
Xây dựng ứng dụng Blockchain với Plutus

Đoạn mã trên là Thực thi từng bước của:

  • Bước 1: Tạo kiểu dữ liệu Block với các thuộc tính cần thiết bằng cú pháp Plutus.
  • Bước 2: Thực hiện phương thức Calculate_hash.
  • Bước 3: Xác định kiểu dữ liệu Blockchain và khởi tạo nó bằng khối Genesis.
  • Bước 4: Thực hiện các phương pháp thêm khối mới và truy xuất khối mới nhất bằng Plutus.
  • Bước 5: Thêm chức năng Proof of Work vào loại dữ liệu Khối và cập nhật loại dữ liệu Blockchain.
  • Bước 6: Thiết lập môi trường API để xử lý các yêu cầu sử dụng Plutus.
  • Bước 7: Kiểm tra ứng dụng bằng cách khai thác khối mới và xác minh chuỗi khối bằng Postman hoặc Curl

Chúc mừng! Bạn đã đi đến cuối mô-đun và đã tìm hiểu tất cả những điều cơ bản về Plutus.

Khám phá lập trình blockchain với Plutus không chỉ đơn thuần là viết mã; đó là về việc định hình cấu trúc nền tảng cho các hệ thống phi tập trung, có thể cách mạng hóa các lĩnh vực khác nhau. Hãy tiếp tục việc học của bạn và tận hưởng hành trình viết mã của bạn!

Ngoài ra, hãy xem: Cách thiết kế, phát triển và triển khai tiền điện tử của riêng bạn: Hướng dẫn từng bước

2024-09-14 10:24