本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
交易結構
Solana 交易有三個核心組件:- 訊息:有序的指令列表、這些指令引用的帳戶,以及最近的區塊雜湊。
- 簽名:每個簽署者一個,證明交易已獲授權。
- 最近區塊雜湊:證明交易是最近的;具有過期區塊雜湊(超過 150 個槽)的交易會被拒絕。
指令
指令指定:program_id— 要調用的程式。accounts— 程式可能接觸的帳戶(及其可寫/簽署者標誌)。data— 程式解釋的不透明位元組。
ComputeBudget::SetComputeUnitLimit— 提高預設 CU 限制。ComputeBudget::SetComputeUnitPrice— 設定優先費用。- 可選的
CreateAssociatedTokenAccount— 如果使用者沒有輸出 ATA,則建立一個。 Raydium::SwapBaseInput— 執行交換。- 可選的
CloseAccount— 關閉包裝的 SOL ATA。
raydium.cpmm.swap、raydium.clmm.swap、raydium.liquidity.swap),或用於多跳路由的 raydium.tradeV2.swap。
交易中的帳戶
交易中任何指令接觸的每個帳戶都必須列在交易的帳戶金鑰中。每個帳戶都被標記為:- 簽署者/非簽署者:帳戶所有者是否必須簽署交易?
- 可寫/唯讀:交易是否可以修改帳戶?
solana-fundamentals/account-model)。具有多個 tick 陣列交叉的 CLMM 交換可能有 20 個以上。
交易大小限制
Solana 將交易限制在 1232 位元組,包括簽名、訊息和標頭。這是複雜交易最常見的障礙——Raydium 的 CLMM 與多跳路由經常接近此限制。 典型的 ~1000 位元組 Raydium 交換的分解:地址查詢表(ALT)
ALT 允許交易透過 1 位元組索引引用已發佈表中的帳戶,而不是完整的 32 位元組公鑰。這大幅壓縮交易:- 直接引用 20 個帳戶的交易:~640 B 的公鑰。
- 使用 ALT 的相同交易:~20 B 的索引 + ALT 參考。
計算預算
每個交易都有一個計算單位(CU)預算。超過它會終止執行並使交易失敗。- 預設值:每個交易 200,000 CU。
- 最大值:每個交易 1,400,000 CU(透過
ComputeBudget::SetComputeUnitLimit提高)。 - 每區塊上限:每個區塊 48M CU(協議級別)。
integration-guides/priority-fee-tuning 的完整表格):
始終透過
ComputeBudget 設定明確的 CU 限制;否則你會得到 200k 預設值,這對大多數 Raydium 指令來說太低了。
優先費用
除了基本交易費用(每個簽名 5000 lamports),驗證者越來越多地優先考慮支付優先費用的交易:每 CU 的微 lamports 小費。integration-guides/priority-fee-tuning 了解如何動態調整此值。
指令計數和帳戶計數限制
除了 1232 位元組的總限制:- 每個交易的最大帳戶數:128。
- 每個指令的最大帳戶數(CPI):64。
- 每個交易的最大指令數:無硬限制,僅受大小限制約束。
- 最大 CPI 深度:4(一個程式可以呼叫另一個,它可以呼叫另一個,4 層深)。
Raydium 交換中的費用類別
使用者交換交易在兩個類別中支付費用:Solana 網路費用
支付給驗證者的 SOL。- 基本簽名費用:每個簽名 5000 lamports。幾乎總是 1 個簽名 = 0.000005 SOL。
- 優先費用:CU 價格 × CU 限制(以微 lamports 計)。隨擁塞而變化;見
integration-guides/priority-fee-tuning。
Raydium 協議費用
從交換金額中扣除。- 交換費用:輸入的百分比(CPMM 典型 0.25%,CLMM 0.01%–1% 每層)。在 LP 和協議目的地之間分割。見
ray/protocol-fees。
範例:$1000 USDC → SOL 透過 CPMM 0.25% 層級
滑點(價格影響 + 市場變動)不是費用,但會影響相同的底線。
版本化交易
Solana 有兩種交易格式:- 舊版:原始格式,不支援 ALT。
- v0(版本化):支援 ALT,可擴展到未來版本。
區塊雜湊新鮮度
交易必須包含最後 ~150 個槽(~60 秒)內的區塊雜湊。超過該窗口,驗證者會拒絕它。 對於重試迴圈,在每次重試時獲取新的區塊雜湊:integration-guides/priority-fee-tuning 了解完整的重試升級費用模式。
平行執行
Solana 在多核驗證者上平行執行不衝突的交易。如果兩個交易都寫入相同帳戶,則它們衝突。 對 Raydium 的影響:- 同一池上的兩個交換無法平行執行——兩者都寫入池狀態。
- 池 A 上的交換和池 B 上的交換如果帳戶列表不重疊則平行執行。
- 唯讀交易永遠不會阻止同一帳戶上的寫入者(唯讀與自身並行,但不與寫入並行)。
交易確認級別
提交交易時,你選擇一個確認級別:
對於交換 UX,
confirmed 是標準的。對於處理大價值的操作(池建立、獎勵補充),finalized 更安全。
模擬
Solana 支援在提交前模擬交易:getBestSwapInfo 時在內部使用模擬來驗證選定的路由確實成功。模擬不是免費的——它消耗 RPC 容量——但它在支付前捕捉錯誤。
指標
solana-fundamentals/account-model— 交易中的帳戶。solana-fundamentals/pdas-and-cpis— 程式如何相互調用。integration-guides/priority-fee-tuning— 調整 CU 限制和優先費用。ray/protocol-fees— Raydium 協議費用結構。

