本頁面使用機器翻譯自英語,可能包含錯誤或不清楚的語言。如需最準確的信息,請參閱英文原文。由於更新頻繁,部分內容可能與英文原文有出入。請加入我們在 Crowdin 上的努力,幫助我們改進本頁面的翻譯。 (Crowdin translation page, Contributing guide)
6. 進階主題與常見問題
本節涵蓋進階的整合技術、最佳實務、疑難排解技巧,以及有關 Kaia 的 Gas Abstraction (GA) 功能的常見問題。 它專為想要優化實作並確保順暢使用者體驗的開發人員所設計。
6.1 最佳實務
主題 | 建議 | 注意事項 |
---|---|---|
滑動 | 對於 getAmountIn() 開始使用 0.5 % (50 bps),除非令牌非常不穩定。 | SDK 並未***硬體編碼值;0.5 % 是 Kaia 參考程式碼中顯示的事實預設值。 |
允許 | 快取 ERC-20 限額,並在「限額 > 0」時跳過「ApproveTx」,避免額外的簽章與瓦斯。 | KIP-247 允許 2-tx bundle (Lend + Swap) 當批准已經存在時,所以重複使用津貼是完全安全的。 |
批量提交 | 使用 kaia_sendRawTransactions (array payload) 將 ApproveTx + SwapTx 推到一起,防止池競賽情況。 | 單次 tx 呼叫 (eth_sendRawTransaction )可以運作,但如果第二次 tx 先到達節點,就會無法通過 nonce/static-rule 檢查。 |
安全 | a) 硬體編碼來自 Kaia 文件的標準 GaslessSwapRouter (GSR) 位址。 b) 在建立交換之前,驗證支援,例如在 try/catch 裡面的 await router.dexAddress(token) 或檢查從 getSupportedTokens() 傳回的清單。 | 防止網路釣魚合約或不支援的代幣劫持 GA 流量。 |
** 不含 KAIA 的瓦斯估算** | 使用eth_estimateGas 與state override在呼叫中給寄件者一個臨時餘額,例如eth_estimateGas(txObj, 'latest', { [from]:{ balance: '0x…' }}) . | 當帳戶的 KAIA 確實為 0 時,繞過 「餘額不足 」 錯誤。 |
6.2 疑難排解
症狀 | 可能原因 | 建議修復 |
---|---|---|
** 從未開採過** | a) token 未列入白名單。 b) minAmountOut 太緊,整個捆綁會被還原。 | - 先檢查支援**:在簽署前**: await router.dexAddress(token) (若不支援則會還原) 或 getSupportedTokens().includes(token) **。- 增加 slippageBps 或及時重新引用 amountIn 。 |
INSUFFICIENT_OUTPUT_AMOUNT 回復 | 價格在報價與執行之間改變,因此 GSR 檢查 amountReceived >= minAmountOut 失敗。 | 使用目前的池儲備重新執行 getAmountIn() ,然後以較高的 minAmountOut 或較寬的滑動區重建 SwapTx 。 |
節點拒絕傳送 (「資金不足」) | 只傳送了 GaslessApproveTx。 由於跳過了餘額檢查,而且遺失了配對的 SwapTx,提案者從未注入 LendTx,因此交易花費了它沒有的 KAIA。 | 永遠透過 kaia_sendRawTransactions 在同一批次**中提交 **ApproveTx & SwapTx,或確保 approveRequired == false 以便您可以傳送 2-tx 包。 |
** 綑綁內的錯誤配對** | 外部 dApp 在 GA bundle 開採之前,會傳送一個消耗下一個 nonce 的普通 tx。 | 在簽署前查詢 getTransactionCount() ;如果 nonce 已經移動,則重建兩個 tx 物件。 |
klay_sendRawTransactions → "undefined tx type" | 您嘗試透過 kaia_… 端點批次傳送 Kaia 特定的 tx 類型 (例如 0x30),而該端點只支援 Ethereum 類型。 | 使用 kaia_sendRawTransactions 傳送 GA 包,然後用 klay_sendRawTransaction 廣播 0x30 AppTx。 |
6.3 常見問題
GA 在主網路上可用嗎?
是的,GA 目前已在 Kairos testnet 和 mainnet 上啟用。