Bài viết
Chia sẻ kiến thức của bạn.

Xây dựng DEX trên Sui bằng cách sử dụng DeepBook: Hướng dẫn thực tế cho các nhà phát triển Move
Chào mừng bạn đến với cấp độ tiếp theo của phát triển Sui Move. Trong hướng dẫn thực hành này, chúng tôi sẽ đi sâu vào DeepBook - công cụ CLOB (Central Limit Order Book) mạnh mẽ trong hệ sinh thái Sui để chỉ cho bạn cách xây dựng DEX từ đầu. Cho dù bạn đang tạo mẫu cho các ứng dụng DeFi hay khám phá cơ chế mã thông báo, hướng dẫn này sẽ hướng dẫn bạn cách tạo, tương tác và thử nghiệm hợp đồng thông minh bằng cách sử dụng các mô-đun mới nhất của DeepBook.
Giới thiệu: Tại sao DeepBook lại quan trọng
Nếu bạn đã quen thuộc với các giao thức DeFi như Uniswap hoặc dYdX, bạn sẽ biết một sổ lệnh trên chuỗi hiệu suất cần thiết như thế nào. DeepBook mang lại khả năng đó cho Sui với thiết kế có thể cấu hình nguyên bản. Nó cho phép các lệnh giới hạn, lệnh thị trường, nhóm thanh khoản và tài khoản lưu ký - tất cả được gói trong các mô-đun Move.
Bài viết này tiếp nối phần giới thiệu trước đây của chúng tôi về DeepBook và hoàn toàn thực tế: chúng tôi sẽ hướng dẫn bạn cách đúc token, tạo nhóm thanh khoản, nạp/rút tài sản và thực hiện cả lệnh giới hạn và lệnh thị trường.
Thiết lập dự án của bạn
Bắt đầu bằng cách tạo một dự án Move mới:
$ sui move new howtosui_deepbook
Chúng tôi sẽ xây dựng hai module:
*usdt
: mã thông báo tài sản báo giá tùy chỉnh
*deepbook
: logic tương tác của chúng tôi với các mô-đun DeepBook
Mô-đun mã thông báo USDT
module howtosui::usdt {
use sui::coin::{Coin, TreasuryCap, Self};
public struct USDT has drop {}
fun init(witness: USDT, ctx: &mut TxContext) {
let (treasury, metadata) = coin::create_currency(witness, 6, b"USDT", b"", b"", option::none(), ctx);
transfer::public_freeze_object(metadata);
transfer::public_transfer(treasury, tx_context::sender(ctx))
}
public entry fun mint(treasury_cap: &mut TreasuryCap<USDT>, amount: u64, recipient: address, ctx: &mut TxContext) {
treasury_cap.mint_and_transfer(amount, recipient, ctx)
}
public entry fun burn(treasury_cap: &mut TreasuryCap<USDT>, coin: Coin<USDT>) {
treasury_cap.burn(coin);
}
}
Tích hợp mô-đun DeepBook
module howtosui::deepbook {
use deepbook::clob_v2 as deepbook;
use deepbook::custodian_v2 as custodian;
use sui::coin::{Coin, Self};
use sui::clock::Clock;
const FLOAT_SCALING: u64 = 1_000_000_000;
public fun new_pool<Base, Quote>(payment: &mut Coin<SUI>, ctx: &mut TxContext) {
let fee = coin::balance_mut(payment).split(100 * FLOAT_SCALING);
let coin = coin::from_balance(fee, ctx);
deepbook::create_pool<Base, Quote>(1 * FLOAT_SCALING, 1, coin, ctx);
}
public fun new_custodian_account(ctx: &mut TxContext) {
transfer::public_transfer(deepbook::create_account(ctx), tx_context::sender(ctx));
}
public fun make_base_deposit<Base, Quote>(pool: &mut deepbook::Pool<Base, Quote>, coin: Coin<Base>, account_cap: &custodian::AccountCap) {
deepbook::deposit_base(pool, coin, account_cap);
}
public fun make_quote_deposit<Base, Quote>(pool: &mut deepbook::Pool<Base, Quote>, coin: Coin<Quote>, account_cap: &custodian::AccountCap) {
deepbook::deposit_quote(pool, coin, account_cap);
}
public fun withdraw_base<Base, Quote>(pool: &mut deepbook::Pool<Base, Quote>, quantity: u64, account_cap: &custodian::AccountCap, ctx: &mut TxContext) {
let base = deepbook::withdraw_base(pool, quantity, account_cap, ctx);
transfer::public_transfer(base, tx_context::sender(ctx));
}
public fun place_limit_order<Base, Quote>(
pool: &mut deepbook::Pool<Base, Quote>,
client_order_id: u64,
price: u64,
quantity: u64,
self_matching_prevention: u8,
is_bid: bool,
expire_timestamp: u64,
restriction: u8,
clock: &Clock,
account_cap: &custodian::AccountCap,
ctx: &mut TxContext
): (u64, u64, bool, u64) {
deepbook::place_limit_order(pool, client_order_id, price, quantity, self_matching_prevention, is_bid, expire_timestamp, restriction, clock, account_cap, ctx)
}
public fun place_base_market_order<Base, Quote>(
pool: &mut deepbook::Pool<Base, Quote>,
account_cap: &custodian::AccountCap,
base_coin: Coin<Base>,
client_order_id: u64,
is_bid: bool,
clock: &Clock,
ctx: &mut TxContext
) {
let quote_coin = coin::zero<Quote>(ctx);
let quantity = coin::value(&base_coin);
place_market_order(pool, account_cap, client_order_id, quantity, is_bid, base_coin, quote_coin, clock, ctx);
}
fun place_market_order<Base, Quote>(
pool: &mut deepbook::Pool<Base, Quote>,
account_cap: &custodian::AccountCap,
client_order_id: u64,
quantity: u64,
is_bid: bool,
base_coin: Coin<Base>,
quote_coin: Coin<Quote>,
clock: &Clock,
ctx: &mut TxContext
) {
let (base, quote) = deepbook::place_market_order(pool, account_cap, client_order_id, quantity, is_bid, base_coin, quote_coin, clock, ctx);
transfer::public_transfer(base, tx_context::sender(ctx));
transfer::public_transfer(quote, tx_context::sender(ctx));
}
}
Thiết lập môi trường: Kiểm tra Localnet
Chạy bộ xác thực của bạn cục bộ:
$ sui client switch --env localnet
Tạo hai tài khoản:
$ sui client new-address ed25519 yasmine
$ sui client new-address ed25519 yoyo
Tài trợ cả hai thông qua vòi địa phương.
Triển khai và tương tác
4.1 Xuất bản mô-đun
$ sui client publish --gas-budget 100000000
Xuất các đối tượng chính như PACKAGE_ID, TREASURY_CAP_ID, POOL_ID, v.v.
4.2 Mã thông báo giá Mint (USDT)
$ sui client call --function mint ... 1000000000 <address>
4.3 Tạo hồ bơi
$ sui client call --function new_pool --args <payment_coin_id>
4.4 Tạo tài khoản giám sát
$ sui client call --function new_custodian_account
4.5 Tài sản tiền gửi
$ sui client call --function make_base_deposit
$ sui client call --function make_quote_deposit
4.6 Đặt lệnh giới hạn
$ sui client call --function place_limit_order --args <price> <quantity> <expire>
4.7 Thực hiện lệnh thị trường
$ sui client call --function place_base_market_order
- Tóm tắt
Với DeepBook, Sui cung cấp một công cụ đặt hàng hoàn toàn trên chuỗi, có thể ghép lại và hiệu quả phù hợp với các giao thức DeFi hiệu suất cao. Từ đúc token đến thực hiện lệnh, mọi thành phần đều có thể lập trình và kiểm tra thông qua Move. Hướng dẫn này cung cấp cho bạn cơ sở để xây dựng nền tảng giao dịch, chiến lược thanh khoản hoặc thậm chí các hệ sinh thái DeFi phức tạp do DAO quản lý trên Sui.
Hãy theo dõi Phần 3, nơi chúng tôi đi sâu vào phân tích sự kiện, theo dõi lịch sử đơn hàng và tích hợp giao diện người dùng bằng Sui SDK. Hãy tiếp tục xây dựng
- Sui
- SDKs and Developer Tools
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Kiếm phần của bạn từ 1000 Sui
Tích lũy điểm danh tiếng và nhận phần thưởng khi giúp cộng đồng Sui phát triển.

- 24p30p... SUI+78
1
- MoonBags... SUI+71
2
- Meaning.Sui... SUI+43
3
- ... SUIJojo+39
- ... SUIOpiiii+31
- ... SUI0xduckmove+20
- ... SUIHaGiang+20
- ... SUIfomo on Sui+16
- ... SUIobito+11
- ... SUI
- Tại sao BCS yêu cầu thứ tự trường chính xác để khử chuỗi khi cấu trúc Move có các trường được đặt tên?53
- Nhiều lỗi xác minh nguồn” trong các ấn phẩm về mô-đun Sui Move - Giải quyết lỗi tự động43
- Giao dịch Sui thất bại: Đối tượng được dành riêng cho giao dịch khác25
- Làm thế nào để các ràng buộc về khả năng tương tác với các trường động trong các bộ sưu tập không đồng nhất?05