Skip to main content
Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.Xem bản tiếng Anh →
Biểu ngữ phiên bản.Ghim phiên bản SDK trong package.json của bạn. Giao diện bonding-curve đã phát triển giữa các bản phát hành nhỏ.

Thiết lập

Các demo ở đây phản ánh các tệp trong raydium-sdk-V2-demo/src/launchpad. Bootstrap tuân theo config.ts.template của repo demo:

Tạo một launch

Nguồn: src/launchpad/createMint.ts (và createBonkMintApi.ts cho biến thể Bonk do API điều khiển) Hầu hết các yếu tố kinh tế của launch không phải là các đối số — chúng đến từ GlobalConfig mà bạn liên kết thông qua configId, và SDK điền phần còn lại từ các tham số mặc định của API. Bạn truyền danh tính của mint, config để liên kết, và (tùy chọn) một lần mua đầu tiên:
Ghi chú:
  • Không có đối số curveType, graduationFractionBps, initialK, quoteMint, openTime, fees hoặc postGraduationLpPolicy. Hình dạng curve và quote mint là các thuộc tính của GlobalConfig mà bạn liên kết; tỷ lệ phí nằm trên GlobalConfigPlatformConfig; xử lý LP tại graduation là một cài đặt PlatformConfig. Xem products/launchlab/instructions để biết chính xác InitializeV2 chấp nhận cái gì.
  • symbol dài hơn 10 ký tự và uri trống đều bị từ chối phía client trước bất kỳ RPC nào.
  • Truyền transferFeeExtensionParams chuyển builder sang InitializeWithToken2022 và buộc migrateType thành "cpmm".
  • Builder trả về một mảng transactions; createOnly: false thêm giao dịch mua đầu tiên. Luôn execute({ sequentially: true }) — mint phải tồn tại trước khi lần mua được thực hiện.

Lấy trạng thái launch

Nguồn: src/launchpad/poolInfo.ts Không có getLaunchById. Pool id là một PDA của (programId, mintA, mintB), và getRpcPoolInfo trả về PoolState được giải mã với configInfo được liên kết của nó:
getRpcPoolsInfo({ poolIdList }) là dạng batch và trả về một poolInfoMap được khóa bằng pool id — sử dụng nó cho các chế độ xem danh mục thay vì lặp. Nếu bạn muốn giải mã các tài khoản thô tự mình, LaunchpadPool.decodeLaunchpadConfig.decode được xuất.

Mua — quote chính xác vào

Nguồn: src/launchpad/buy.ts Trợ giúp quote ngoài chuỗi là Curve.buyExactIn, một phương thức tĩnh trên lớp Curve được xuất — không phải một phương thức trên raydium.launchpad. Builder giao dịch là buyToken. Cả hai đều cần tỷ lệ phí của nền tảng, nằm trên một tài khoản PlatformConfig riêng biệt:
Bạn có thể truyền minMintAAmount một cách rõ ràng thay vì slippage; bỏ qua cả hai và SDK sẽ tính toán giới hạn từ dữ liệu RPC trực tiếp. shareFeeRate không được vượt quá poolInfo.configInfo.maxShareFeeRate, và nó chỉ áp dụng khi bạn cũng truyền một shareFeeReceiver.

Mua — base chính xác ra

Builder là buyTokenExactOut, và các đối số số lượng là outAmount (base bạn muốn) và maxBuyAmount (quote bạn sẽ chi tối đa). Curve.buyExactOut({ poolInfo, amountA, ... }) là xem trước ngoài chuỗi phù hợp.
Hữu ích cho các UI “mua chính xác X token”. Builder từ chối outAmount bằng không phía client, và chương trình sẽ hoàn nguyên nếu curve đã di chuyển đủ để yêu cầu quote vượt quá maxBuyAmount.

Bán

Nguồn: src/launchpad/sell.ts Builder là sellToken (sellTokenExactOut cho biến thể exact-quote-out), với sellAmount và một minAmountB tùy chọn. Curve.sellExactIn({ poolInfo, amountA, ... }) xem trước nó.
Đường bán của curve đối xứng với đường mua: giảm real_a bằng sellAmount trả về quote_out bằng diện tích tích phân dưới curve giữa real_a − sellAmountreal_a, trừ phí bán. sellAmount phải lớn hơn không — builder từ chối không trước bất kỳ RPC nào.

Graduation

Graduation không phải là điều mà một integrator có thể kích hoạt. Không có raydium.launchpad.graduate, không có cờ autoGraduate trên các builder mua, và không có trường willGraduate trên giá trị trả về của chúng. Trên chuỗi, graduation là MigrateToCpswap (hoặc MigrateToAmm kế thừa), và cả hai hướng dẫn đều hạn chế người ký của chúng thành một ví được ghi lại trên GlobalConfig liên kết — migrate_to_cpswap_walletmigrate_to_amm_wallet tương ứng. Một cuộc gọi từ bất kỳ người ký nào khác sẽ thất bại với InvalidOwner. Nó không được phép, và không có bot MEV nào có thể chạy đua với nó.
Những ví đó được vận hành bởi crank graduation của Raydium, vì vậy trong thực tế migration sẽ được thực hiện trong vài giây sau khi ngưỡng bị vượt qua bất kể ai thực hiện lần mua cuối cùng. Từ phía integrator, điều duy nhất cần làm là coi sự chuyển đổi trạng thái như một sự kiện nhanh: poll getRpcPoolInfo (hoặc đăng ký qua gRPC, bên dưới) và chuyển UI của bạn từ curve sang pool CPMM kết quả khi status thay đổi. Xem products/launchlab/instructions để biết danh sách tài khoản, phí migration, và cách LP được chia tại graduation.

Thu thập phí creator

Nguồn: src/launchpad/claimCreatorFee.ts (mint đơn) và collectAllCreatorFees.ts (batch) Phương thức là claimCreatorFee (và claimMultipleCreatorFee cho dạng batch). Nó được khóa bằng quote mint, không phải bằng một launch — một cuộc gọi quét phí creator tích lũy của người ký trong mint đó trên tất cả các launch của họ:
Chuyển bộ đếm phí creator tích lũy sang ATA của creator trên quote mint. Có thể gọi trước hoặc sau graduation; sử dụng nó định kỳ thay vì chờ một số dư khổng lồ tích lũy. Các nhà khai thác nền tảng có các builder song song claimPlatformFee / claimAllPlatformFee / claimVaultPlatformFee.

Theo dõi một launch qua vòng đời của nó

Kết hợp lại, một script giám sát có thể trông như thế này:
Poll getRpcPoolInfo trên bộ hẹn giờ 10 giây là tốt cho một launch duy nhất. Đối với một indexer, hãy sử dụng đăng ký gRPC bên dưới thay thế — getRpcPoolsInfo({ poolIdList }) batch, nhưng poll hàng trăm pool vẫn tiêu tốn tín dụng RPC mà không có lợi ích.

Theo dõi configs và pools qua gRPC

Nguồn: src/grpc/launchpadPoolInfo.ts Đăng ký chương trình LaunchLab qua Yellowstone gRPC và ghi nhật ký mọi cập nhật GlobalConfigPoolState với chương trình token của mỗi mint. Hai bộ lọc datasize trên một đăng ký accounts tách hai loại tài khoản, vì vậy một luồng duy nhất bao gồm cả hai. Demo là tài liệu tham khảo chính xác ngắn nhất để phân loại mint của một launch, điều mà phiên bản quote-mint Token-2022 làm cần thiết:
  • Pools được phân loại trực tiếp từ PoolState.token_program_flag, giải mã bit0 cho base mint và bit1 cho quote mint mà không cần lấy mint nào cả. Kiểm tra toàn bộ byte so với 0 — điều này đã đủ trong khi quote mint chỉ là legacy — sẽ đọc sai một base mint legacy là Token-2022 bất cứ khi nào quote mint là Token-2022.
  • Configs không thể được phân loại theo cách đó: một GlobalConfig lưu trữ địa chỉ quote mint của nó và không có cờ chương trình, vì vậy demo sẽ đọc chủ sở hữu tài khoản mint một lần và lưu vào bộ nhớ cache cho mỗi mint.
Nó cũng kiểm tra chéo hai cái với nhau, điều này là một khẳng định hữu ích để giữ trong indexer của riêng bạn. Lưu ý rằng create so với update được suy ra từ bộ nhớ cache của demo, được gieo hạt khi khởi động từ getProgramAccounts; với việc gieo hạt đó bị vô hiệu hóa, hãy đọc “create” là “lần đầu tiên được nhìn thấy trên luồng này”. Truy cập gRPC không phải là một phần của bề mặt RPC công khai — xem src/grpc/README.md của repo demo.

Rust CPI

Gọi LaunchLab từ chương trình Anchor của riêng bạn là hiếm (hầu hết các tích hợp launch chỉ là phía TS). Nếu bạn làm:
  • Crate là raydium-launchpad (tên lib raydium_launchpad), phiên bản 0.2.0, và nó có tiếp xúc với tính năng cpi. Không có raydium_launchlab.
  • không được xuất bản trên crates.io — phụ thuộc vào nó bằng git revision, cách tương tự như các crate chương trình Raydium khác.
  • Các điểm vào CPI được đặt tên theo các hướng dẫn trên chuỗi, không phải theo các phương thức TypeScript của SDK: buy_exact_in, buy_exact_out, sell_exact_in, sell_exact_out, claim_creator_fee, create_vesting_account, claim_vested_token. migrate_to_amm / migrate_to_cpswap được gated người ký cho các ví migration GlobalConfig và không thể gọi từ một chương trình integrator.
Xem sdk-api/rust-cpi để biết các quy tắc ghim crate — đặc biệt là phân tách phiên bản Anchor, quyết định xem một crate có thể CPI vào cả LaunchLab và CLMM hay không.

Những cạm bẫy

  • Nhầm lẫn tên hướng dẫn trên chuỗi với tên phương thức SDK. Chương trình có buy_exact_in / sell_exact_in; SDK có buyToken / sellToken. buyExactInsellExactIn chỉ tồn tại dưới dạng phương thức tĩnh trên Curve, và chúng tính toán một quote — chúng không xây dựng một giao dịch.
  • Quên extraSigners. createLaunchpad tạo base mint từ một keypair mà bạn tạo, vì vậy keypair đó phải ký. Bỏ qua extraSigners: [pair] và giao dịch sẽ thất bại xác minh chữ ký.
  • Không chọn quote mint. Bạn không truyền một. Quote mint là một thuộc tính của GlobalConfig mà bạn liên kết thông qua configIdgetPdaLaunchpadConfigId(programId, quoteMint, curveType, index). Để launch chống lại một quote mint khác, liên kết một config khác; raydium.api.fetchLaunchConfigs() liệt kê các config có sẵn với các tham số mặc định của chúng.
  • Kích thước metadata. Các chuỗi uri dài đẩy Metaplex CPI vượt quá ngân sách. Giữ uri dưới ~200 ký tự — hầu hết metadata JSON được lưu trữ trên CDN phù hợp dễ dàng. symbol bị giới hạn cứng ở 10 ký tự.
  • Coi graduation như một cuộc đua mà bạn có thể tham gia. Nó không phải — xem cảnh báo ở trên. UI của bạn vẫn nên coi các chuyển đổi status như các sự kiện nhanh, vì crank của Raydium sẽ thực hiện migration trong vài giây sau khi ngưỡng bị vượt qua.

Tiếp theo đi đâu

Nguồn: