Sui.

Bài viết

Chia sẻ kiến thức của bạn.

article banner.
harry phan.
Apr 30, 2025
Bài Viết

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
  1. 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
3
Chia sẻ
Bình luận
.

Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.

405Bài viết564Câu trả lời
Sui.X.Peera.

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.

Chiến dịch phần thưởngTháng Bảy