Hướng Dẫn Viết Hợp Đồng Thông Minh cho Thị Trường Kỹ Thuật Số trên Algorand Sử Dụng Python
Hôm nay, chúng ta sẽ bắt đầu hành trình tạo ra một hợp đồng thông minh cho thị trường kỹ thuật số trên chuỗi khối Algorand, sử dụng ngôn ngữ lập trình Python và công cụ Algokit.
Giới Thiệu về Algokit
Algokit là bộ công cụ toàn diện được thiết kế cho việc phát triển ứng dụng phi tập trung (dApp) trên chuỗi khối Algorand. Algokit mang đến một môi trường lập trình thuận tiện bao gồm localnet, nhiều mẫu hợp đồng, và nhiều tiện ích khác, giúp việc phát triển trở nên dễ dàng và tiếp cận hơn.
Trước đây, việc viết hợp đồng thông minh trên Algorand thường liên quan đến việc sử dụng ngôn ngữ PyTEAL. Tuy nhiên, mới đây, Algorand đã ra mắt Algokit 2.0, cho phép viết hợp đồng thông minh bằng ngôn ngữ Python thuần.
Để bắt đầu một dự án mới, chúng ta sử dụng lệnh sau:
algokit init
Sau đó, chọn mẫu là "Hợp Đồng Thông Minh" và ngôn ngữ là "Python". Tiếp theo, điền thông tin cần thiết và Algokit sẽ tạo ra một dự án mới cho chúng ta.
Viết Hợp Đồng Thông Minh
Sau khi tạo dự án, chúng ta điều hướng đến thư mục Hợp Đồng Thông Minh và mở tệp Contract.py để bắt đầu viết hợp đồng thông minh.
Phương Thức Tạo Ứng Dụng
python
from algopy import *
class Digital_marketplace(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 chịu trách nhiệm tạo ra một ứng dụng để bán một tài sản trong thị trường kỹ thuật số. Nó nhận hai tham số: assetId
, ID của tài sản sẽ được bán, và unitaryPrice
, giá của tài sản. Phương thức này thiết lập các thuộc tính assetId
và unitaryPrice
của hợp đồng.
Cập Nhật Giá Niêm Yết
python
@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 hợp đồng cập nhật giá niêm yết của tài sản. Nó nhận giá unitaryPrice
làm tham số và cập nhật thuộc tính unitaryPrice
của hợp đồng. Phương thức này chỉ có thể được gọi bởi người tạo hợp đồng.
Tham Gia Tài Sản sẽ Bán
python
@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()
Phương thức này cho phép người dùng tham gia vào tài sản sẽ được bán trong thị trường. Nó nhận một giao dịch thanh toán mbrPay
làm tham số và đảm bảo rằng người gửi là người tạo hợp đồng, tài sản chưa được tham gia trước đó và số tiền thanh toán là đủ. Sau khi xác thực thành công, nó sẽ cho phép người dùng tham gia vào tài sản.
Mua Tài Sản
python
@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()
Phương thức này giúp thực hiện việc mua tài sản bởi người mua. Nó nhận một giao dịch thanh toán buyerTxn
và số lượng tài sản cần mua làm tham số. Nó xác minh rằng giá đã được thiết lập và tương ứng với số tiền thanh toán. Sau khi xác thực thành công, nó sẽ chuyển giao tài sản cho người mua.
Xóa Ứng Dụng
python
@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()
Phương thức này cho phép người tạo hợp đồng xóa ứng dụng và thu hồi bất kỳ tài sản và tiền nào còn lại. Nó đảm bảo rằng người gửi là người tạo hợp đồng. Sau khi xác thực thành công, nó sẽ chuyển giao các tài sản và tiền còn lại cho người tạo hợp đồng và xóa ứng dụng.
Mã Nguồn Đầy Đủ
Xem mã nguồn đầy đủ tại: GitHub - Algorand Bootcamp
Xây Dựng Hợp Đồng Thông Minh
Sau khi viết xong hợp đồng thông minh, chúng ta cần xây dựng hợp đồng để triển khai nó lên chuỗi khối Algorand. Sử dụng lệnh sau:
algokit project run build
Kết Luận
Qua bài viết này, chúng ta đã có cái nhìn tổng quan về việc viết hợp đồng thông minh trên Algorand sử dụng ngôn ngữ Python và công cụ Algokit. Hy vọng rằng bạn đã thu nhận thêm kiến thức và sẵn sàng theo đuổi các dự án của mình trên chuỗi khối Algorand.
Đừng ngần ngại tham gia cộng đồng Algorand và tiếp tục khám phá công nghệ blockchain thú vị này!
source: viblo