Bài đăng Xây dựng ứng dụng Blockchain với Plutus xuất hiện đầu tiên trên Coinpedia Fintech News

Giới thiệu

Blockchain đang đóng góp cho nhiều ngành công nghiệp khác nhau thông qua các giải pháp phi tập trung và minh bạch của mình. Những tiến bộ trong lĩnh vực phát triển đã có sự thay đổi mang tính chuyển đổi đối với các nhà phát triển và cộng đồng. Lợi ích của blockchain vượt ra ngoài phạm vi phi tập trung. Nó tiết kiệm thời gian giao dịch và không cần bất kỳ xác minh nào của bên thứ ba, giúp giảm thiểu rủi ro gian lận và tấn công mạng. Là một nhà phát triển, việc hiểu cách xây dựng các ứng dụng blockchain rất có giá trị, đặc biệt là khi sử dụng 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 blockchain Cardano. Nó cung cấp một khuôn khổ mạnh mẽ cho các nhà phát triển để tạo ra các ứng dụng phi tập trung (DApp) an toàn và hiệu quả.

Cardano là gì?

Cardano Một nền tảng blockchain được Charles Hoskinson (đồng sáng lập Ethereum) ra mắt vào năm 2017. Cardano là nền tảng thế hệ thứ ba, thường được coi là giải pháp thay thế cho Ethereum, nền tảng thế hệ thứ hai. Nó sử dụng cơ chế bằng chứng cổ phần hiệu quả hơn các nền tảng truyền thống. Cardano có tiền điện tử riêng là ADA, được đặt theo tên của Ada Lovelace. Nó có hai lớp riêng biệt, một lớp xử lý các giao dịch và tài khoản trong khi lớp còn lại được sử dụng để quản lý các hợp đồng thông minh và tính toán. Cardano đặt mục tiêu tạo ra một nền tảng blockchain an toàn hơn, có khả năng mở rộng và thích ứng hơn so với các nền tảng tiền nhiệm và đang được sử dụng trong nhiều ứng dụng khác nhau, bao gồm 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 tại các thị trường mới nổi

Sao Diêm Vương

Plutus là ngôn ngữ lập trình được sử dụng để viết hợp đồng thông minh dựa trên Cardano. Plutus dựa trên Haskell, một ngôn ngữ chức năng. Là một nhà phát triển, bạn không cần phải viết Plutus Core mà tất cả các tập lệnh sẽ được tạo bởi một plugin biên dịch Haskell. Plutus hỗ trợ Xác minh chính thức, cung cấp một cách để chứng minh tính đúng đắn của một chương trình bằng toán học. Do đó, tăng cường bảo mật và giảm khả năng xảy ra bất kỳ lỗi nào trong hợp đồng thông minh.

Plutus được tích hợp sẵn vào chuỗi khối Cardano, cho phép các nhà phát triển tương tác trực tiếp với sổ cái và cơ sở hạ tầng của Cardano. Điều này giúp bạn xây dựng và triển khai các hợp đồng thông minh tương tác trực tiếp với hệ sinh thái Cardano. Plutus có các công cụ giúp bạn mô phỏng các hợp đồng thông minh mà không cần nút Cardano đầy đủ và thử nghiệm trước khi triển khai trên mạng chính. Plutus rất phù hợp với các nhà phát triển muốn tạo các ứng dụng phi tập trung đáng tin cậy và hiệu suất cao.

Khán giả

Bài viết này hướng đến những nhà phát triển mới tham gia phát triển blockchain với ít kiến ​​thức về lập trình cơ bản. Chúng tôi sẽ hướng dẫn bạn các bước thiết yếu để thiết lập môi trường, hiểu các khái niệm blockchain và xây dựng một ứng dụng blockchain đơn giản bằng Plutus.

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

Việc thiết lập hoàn hảo trước khi bạn bắt đầu hành trình phát triển là rất quan trọng. Do đó, thiết lập môi trường hỗ trợ Plutus là bước đệm của chương này.

1. Cài đặt Plutus

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

git clone https://github.com/input-output-hk/plutus-apps.gitcd plutus-appsnix-shell

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

2. Chọn IDE

Trong khi phát triển ứng dụng với Plutus, việc có IDE phù hợp là rất quan trọng. Plutus dựa trên Haskell do đó nên có một 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. Sau đâ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.

Visual Studio Code: VS Code là trình soạn thảo Code rất linh hoạt và đa năng, hỗ trợ hầu hết mọi ngôn ngữ và có các tiện ích mở rộng rất hữu ích. Do đó, đây là trình soạn thảo được các nhà phát triển ưa thích sử dụng. VSCode là mã nguồn mở và cung cấp nhiều công cụ và tính năng để hoàn thiện code.

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

  • Tải xuống VSCode từ trang web chính thức (tùy 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 Glasgow Haskell (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 VS Code (Haskero, Haskell Syntax Higlighting, v.v.)

  • Cấu hình các tiện ích mở rộng và thiết lập các tiện ích mở rộng bổ sung

  • Vì bạn đã cài đặt Plutus nên bạn đã sẵn sàng!!

Plutus Playground: Plutus Playground là trình soạn thảo trực tuyến dựa trên web dành riêng cho hợp đồng thông minh Plutus. Do đó, không cần cài đặt và hoàn hảo cho người mới bắt đầu để có thêm sự tự tin khi viết mã.

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

Cả hai môi trường đều có thể được sử dụng hiệu quả để phát triển Plutus và bạn có thể thấy rằng việc kết hợp cả hai - sử dụng VS Code cho các dự án lớn hơn và Plutus Playground để thử nghiệm và tạo mẫu nhanh - sẽ mang lại hiệu quả tốt nhất.

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

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

Hiểu các khái niệm về Blockchain với Plutus

Blockchain là một cơ sở dữ liệu phân tán và tiên tiến lưu trữ các bản ghi giao dịch dưới dạng các khối. Mỗi khối cần được liên kết với nhau bằng các nguyên tắc mật mã. Các cơ chế mạnh mẽ được sử dụng để bảo vệ các khối do đó không ai có thể thay đổi bất kỳ bản ghi nào của các loại tiền tệ trước thời hạn và không ảnh hưởng đến các khối tiếp theo.

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 băm tạo thành chuỗi khối, do đó là blockchain

  • Giao dịch: Giao dịch là việc chuyển dữ liệu từ thực thể này sang thực thể khác trong blockchain. Trong Plutus, giao dịch được viết bằng Haskell và liên quan đến UTXO (Đầu ra giao dịch chưa chi) đầu vào và đầu ra.

  • Chuỗi: Trong Plutus, chuỗi duy trì thứ tự các giao dịch và đảm bảo chúng không thể thay đổi sau khi được xác nhận.

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

Mỗi thành phần của khối đượ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 bao gồm trong một khối cụ thể

  • Băm là một mẫu duy nhất và là chìa khóa chính để xác định một khối

  • Băm trước đó đề cập đến tính liên tục và là 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:

Cơ chế phi tập trung, bất biến và đồng thuận:

Nền tảng của blockchain dựa trên ba nguyên tắc cốt lõi: Phân cấp, Không thể thay đổi và Cơ chế đồng thuận

Phi tập trung: Phi tập trung là một đặc tính mà không có thực thể nào nắm quyền kiểm soát cơ sở dữ liệu của Blockchain khiến cho hệ thống không thể bị lỗi và thiên vị. Mỗi thiết bị tham gia (nút) duy trì một bản sao của blockchain, đảm bảo tính minh bạch và ngăn chặn lỗi hoặc thao túng tập trung.

Tính bất biến: Khi dữ liệu được ghi vào blockchain, nó không thể thay đổi mà không thay đổi tất cả các khối tiếp theo. Điều này được thực hiện với sự trợ giúp của băm mật mã. Do đó, tất cả các thay đổi đã thực hiện một lần không thể hoàn tác khiến nó không thể thay đổi.

Cơ chế đồng thuận: Một tập hợp các giao thức quản lý tất cả các nhu cầu cần thiết của blockchain. Tất cả các nút trong mạng cần phải đồng ý về các phương pháp. Cơ chế đồng thuận được sử dụng để hợp lý hóa các nút và đảm bảo tất cả các nút trong mạng đều ở cùng một trang.

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

Khối là đơn vị cơ bản của bất kỳ blockchain nào. Trong đoạn mã này, chúng tôi đã định nghĩa một kiểu dữ liệu khối cùng với các thành phần của nó.

Ngoài ra, sau khi chúng ta đã định nghĩa lớp khối, chúng ta cần đảm bảo tính toàn vẹn của blockchain, trong đó mỗi khối phải có một hàm băm duy nhất. Do đó, với hàm băm tính toán, chúng ta sử dụng phương pháp băm phổ biến SHA256 cho cùng một hàm băm trong Plutus.

Sau khi hoàn thành Định nghĩa về một khối, hãy tiếp tục và khởi tạo blockchain của bạn với sự trợ giúp của khối genesis, đây là khối đầu tiên cho bất kỳ blockchain nào. Tuyệt!! Bạn vừa tạo một blockchain nhưng không chỉ có vậy, bạn cần thêm các khối mới và cũng cần lấy khối mới nhất.

Hãy tham khảo mã bên dưới trong trường hợp bạn cần trợ giúp!

Thực hiện các cơ chế đồng thuận trong Plutus

Cardano sử dụng cơ chế PoS trong khi ban đầu, nó đã áp dụng Proof of Work. Plutus được thiết kế để tương thích với giao thức Ouroboros PoS của Cardano, cung cấp khả năng mở rộng, hiệu quả năng lượng và bảo mật cho các ứng dụng phi tập trung (DApp).

Sau đâ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à cơ chế Proof of stake mà Plutus tương thích cao và phụ thuộc vào stake 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ũ hơn. Nó vẫn có thể được triển khai 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 thực sự 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 sử dụng Proof of Work trong Plutus.

Trong Proof of Work, thợ đào cần phải cạnh tranh về thời gian để giải một câu đố mật mã để trở thành người xác thực đồng tiền mới. Trong mã này, hàm proof of work tìm kiếm một nonce, khi kết hợp với hàm băm của khối trước đó, tạo ra một hàm băm với một số lượng số 0 đứng đầu nhất định. Đây là một triển khai cơ bản của PoW, trong đó mức độ khó xác định mức độ khó để tìm ra một nonce hợp lệ.

Sau khi hoàn tất triển khai Bằng chứng công việc, bạn cần cập nhật blockchain để xác thực bằng chứng đã được khai thác.

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

Chức năng này đảm bảo rằng khối mới chỉ được thêm vào chuỗi khối nếu bằng chứng của nó hợp lệ, duy trì tính toàn vẹn của chuỗi.

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

Trong chương này, bạn sẽ học cách tạo một API đơn giản để tương tác với ứng dụng blockchain được xây dựng bằng Plutus. API này sẽ cho phép bạn thêm khối và xem blockchain thông qua các yêu cầu HTTP.

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

  • Thiết lập Môi trường cho API: Cài đặt Haskel (Đã thực hiện), sau đó 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 cài đặt aeson plutus-core

    • Plutus để tích hợp tất cả các mã và logic

Để bắt đầu Xây dựng API, trước tiên chúng ta cần thêm một khối mới và hủy trạng thái hiện tại của blockchain. Cả hai bước này đã được thực hiện trong các chương trên.

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

{-# LANGUAGE DataKinds #-}{-# LANGUAGE TypeOperators #-}module BlockchainAPI whereimport Servantimport Control.Monad.IO.Class (liftIO)— Định nghĩa kiểu Block (tham khảo Chương 3)data Block = Block  { index        :: Int  , timestamp    :: String  , dataField    :: String  , previousHash :: String  , hash         :: String  } deriving (Show, Eq)— Blockchain chỉ đơn giản là một danh sách các Blockstype Blockchain = [Block]— Định nghĩa API typetype BlockchainAPI =  “addBlock” :> ReqBody ‘[JSON] Block :> Post ‘[JSON] Blockchain:<|> “chain” :> Get ‘[JSON] Blockchain— Trình giữ chỗ cho blockchain, 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 các đ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 = serve (Proxy :: Proxy BlockchainAPI) (blockchainServer initialBlockchain)

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 có nghĩa là truy xuất và thêm blockchain tương ứng.

  • Chúng tôi cũng đã xác định trình xử lý (addBlockHandler) để xử lý các khối mới đang được thêm vào và viewChainHandler) để xem khối khác

  • Cuối cùng, có một hàm 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.

Sau khi định nghĩa API, bạn có hai phương pháp để thêm Điểm cuối và truy xuất thông tin Điểm cuối Blockchain.

Yay!! Bạn đã triển khai thành công phần phụ này và bây giờ bạn có thể sử dụng cabal để chạy API và sẵn sàng cho phần tiếp theo.

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

Sau khi xây dựng blockchain API, đã đến lúc kiểm tra nó. Chúng ta sẽ sử dụng Postman hoặc curl để tương tác với API và xác minh rằng nó hoạt động chính xác.

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 các điểm cuối khối

{  “index”: 1,  “timestamp”: “2024-09-12 12:30:00”,  “dataField”: “Đây là khối mới của tôi”,  “previousHash”: “some_hash”,  “hash”: “new_block_hash”}

Xem Blockchain

curl http://localhost:8080/chain

Bằng cách làm theo các bước này, giờ đây bạn có một ứng dụng blockchain đơn giản chạy với API được xây dựng bằng Plutus. API cho phép các ứng dụng hoặc người dùng bên ngoài tương tác với blockchain của bạn bằng cách thêm các khối mới và xem trạng thái blockchain hiện tại.

Ví dụ thực tế về việc xây dựng ứng dụng Blockchain với Plutus

Đoạn mã trên là bản thực hiện 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: Triển khai 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: Triển khai các phương pháp để thêm khối mới và lấy khối mới nhất bằng Plutus.

  • Bước 5: Thêm chức năng Proof of Work vào kiểu dữ liệu Block và cập nhật kiểu dữ liệu Blockchain.

  • Bước 6: Thiết lập môi trường API để xử lý các yêu cầu bằng Plutus.

  • Bước 7: Kiểm tra ứng dụng bằng cách khai thác một khối mới và xác minh chuỗi khối bằng Postman hoặc Curl

Xin chúc mừng! Bạn đã hoàn thành xong mô-đun và nắm được tất cả những kiến ​​thức cơ bản về Plutus.

Khi bạn dấn thân vào phát triển blockchain với Plutus, bạn không chỉ viết code mà còn tạo ra xương sống của các hệ thống phi tập trung có thể định nghĩa lại các ngành công nghiệp. Hãy tiếp tục học hỏi và lập trình vui vẻ!!

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