0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hướng Dẫn Xây Dựng Chợ Kỹ Thuật Số (Digital Marketplace) Trên Blockchain Algorand Với Python và Algokit

Đăng vào 3 tuần trước

• 4 phút đọc

Xây Dựng Chợ Kỹ Thuật Số Trên Blockchain Algorand

Hôm nay, chúng ta sẽ cùng nhau tìm hiểu cách viết một Hợp Đồng Thông Minh (Smart Contract) cho một chợ kỹ thuật số (Digital Marketplace) trên blockchain Algorand. Chúng ta sẽ sử dụng ngôn ngữ lập trình Python và công cụ mạnh mẽ Algokit để thực hiện điều này.

Giới Thiệu Về Algokit

Algokit là một bộ công cụ toàn diện, được phát triển đặc biệt cho việc phát triển ứng dụng phi tập trung (dApp) trên blockchain Algorand. Với Algokit, việc phát triển dApp trở nên đơn giản và tiện lợi hơn bao giờ hết nhờ vào các tính năng như localnet, các mẫu hợp đồng (template contract) và nhiều tiện ích hữu ích khác.

Trước đây, để viết Smart Contract trên Algorand, bạn sẽ phải sử dụng ngôn ngữ PyTEAL, một kiểu Python với cú pháp đặc biệt, và sau đó biên dịch sang file TEAL. Tuy nhiên, với sự ra mắt của Algokit 2.0, bạn có thể viết hợp đồng thông minh trực tiếp bằng Native Python, giúp quá trình phát triển trở nên dễ dàng hơn.

Để bắt đầu một dự án mới với Algokit, bạn chỉ cần sử dụng lệnh:

bash Copy
algokit init

Sau đó, chọn mẫu "Smart Contract" và ngôn ngữ "Python" cho dự án của bạn. Tiếp theo, hãy điền thông tin cần thiết, và Algokit sẽ tự động tạo ra một dự án mới cho bạn.

Viết Smart Contract

Sau khi hoàn thành việc tạo dự án, bạn sẽ điều hướng đến thư mục smart_contracts và mở tệp Contract.py để bắt đầu viết hợp đồng.

Tạo Ứng Dụng (Application)

Trên Algorand, khái niệm tương tự như Smart Contract trên các blockchain khác được gọi là Application.

python Copy
from algopy import *

class DigitalMarketplace(ARC4Contract):
    assetId: UInt64
    unitaryPrice: UInt64

    # Tạo ứng dụng
    @arc4.abimethod(allow_actions=["NoOp"], create="require")
    def createApplication(self, assetId: Asset, unitaryPrice: UInt64) -> None:
        self.assetId = assetId.id
        self.unitaryPrice = unitaryPrice

Phương thức này có trách nhiệm tạo ra một Application để bán Tài Sản Kỹ Thuật Số. Nó nhận hai tham số: assetId, là ID của tài sản cần bán, và unitaryPrice, là giá của tài sản. Phương thức này thiết lập các thuộc tính assetIdunitaryPrice khi bạn tạo Application lần đầu.

Thay Đổi Giá Bán

python Copy
@arc4.abimethod
def setPrice(self, unitaryPrice: UInt64) -> None:
    assert Txn.sender == Global.creator_address
    self.unitaryPrice = unitaryPrice

Phương thức này cho phép người tạo smart contract thay đổi giá bán của tài sản. Nó nhận unitaryPrice làm tham số và cập nhật thuộc tính unitaryPrice của hợp đồng. Chúng ta cần đảm bảo phương thức này chỉ có thể được gọi bởi người tạo ra smart contract, hay còn gọi là Owner.

python Copy
assert Txn.sender == Global.creator_address

Opt In Tài Sản

python Copy
@arc4.abimethod
def optInToAsset(self, mbrPay: gtxn.PaymentTransaction) -> None:
    assert Txn.sender == Global.creator_address
    assert not Global.current_application_address.is_opted_in(Asset(self.assetId))
    assert mbrPay.receiver == Global.current_application_address
    assert mbrPay.amount == Global.min_balance + Global.asset_opt_in_min_balance
    itxn.AssetTransfer(
        xfer_asset=self.assetId,
        asset_receiver=Global.current_application_address,
        asset_amount=0,
    ).submit()

Opt in là một khái niệm trên blockchain Algorand mà bạn phải nộp đơn để nhận tài sản về ví của mình. Điều này giúp Algorand tránh việc bị spam gửi token giả mạo đến các ví người dùng. Để opt-in tài sản, bạn chỉ cần gửi Assets đến ví nhận với amount = 0.

Mua Tài Sản

python Copy
@arc4.abimethod
def buy(self, buyerTxn: gtxn.PaymentTransaction, quantity: UInt64) -> None:
    assert self.unitaryPrice != UInt64(0)
    assert Txn.sender == buyerTxn.sender
    assert Txn.receiver == Global.current_application_address
    assert buyerTxn.amount == self.unitaryPrice * quantity

    itxn.AssetTransfer(
        xfer_asset=self.assetId,
        asset_receiver=Txn.sender,
        asset_amount=quantity,
    ).submit()

Ở đây, chúng ta viết phương thức cho việc mua tài sản. Đầu tiên, cần đảm bảo số tiền người mua chi trả là đủ và người nhận là Smart Contract. Sau đó, chúng ta sẽ sử dụng hàm AssetTransfer để chuyển tài sản cho người mua khi quá trình thanh toán thành công.

Xoá Ứng Dụng

python Copy
@arc4.abimethod(allow_actions=["DeleteApplication"])
def deleteApplication(self) -> None:
    assert Txn.sender == Global.creator_address
    itxn.AssetTransfer(
        xfer_asset=self.assetId,
        asset_receiver=Global.creator_address,
        asset_amount=0,
        asset_close_to=Global.creator_address,
    ).submit()
    itxn.Payment(
        receiver=Global.creator_address,
        amount=0,
        close_remainder_to=Global.creator_address,
    ).submit()

Đoạn mã trên cho phép Owner của hợp đồng có thể xoá Application. Đầu tiên, chúng ta phải đảm bảo rằng chỉ có Owner mới có quyền thực hiện hành động này.

python Copy
assert Txn.sender == Global.creator_address

Phương thức này đảm bảo Owner sẽ nhận lại toàn bộ tài sản và tiền còn lại trước khi ứng dụng bị xoá.

Mã Nguồn Hoàn Chỉnh

Bạn có thể tham khảo mã nguồn hoàn chỉnh trên GitHub Repository.

Triển Khai Hợp Đồng

Sau khi đã viết xong hợp đồng, bạn cần xây dựng hợp đồng bằng lệnh:

bash Copy
algokit project run build

Lệnh này sẽ tạo ra 4 file trong thư mục artifacts. Bạn có thể lên Dappflow và tải lên các file này để triển khai trên mạng chính (mainnet)/mạng thử nghiệm (testnet)/mạng nội bộ (localnet).

Kết Luận

Qua bài viết này, chúng ta đã có cái nhìn tổng quan về cách viết Smart Contract trên Algorand bằng Python và công cụ Algokit. Hy vọng bạn đã thu thập được thêm kiến thức và sẵn sàng thực hiện các dự án của mình trên blockchain Algorand.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào