本页面使用机器翻译自英语,可能包含错误或不清楚的语言。如需最准确的信息,请参阅英文原文。由于更新频繁,部分内容可能与英文原文有出入。请加入我们在 Crowdin 上的努力,帮助我们改进本页面的翻译。 (Crowdin translation page, Contributing guide)
6. 高级主题和常见问题
本节介绍有关 Kaia 气体抽象 (GA) 功能的高级集成技术、最佳实践、故障排除技巧和常见问题。 它专为希望优化实施并确保流畅用户体验的开发人员而设计。
6.1 最佳做法
主题 | 建议 | 说明 |
---|---|---|
滑动 | 除非令牌非常不稳定,否则从 0.5 % (50 bps) 开始使用 getAmountIn() 。 | SDK 没有****硬编码值;0.5 % 是 Kaia 参考代码中显示的事实默认值。 |
津贴 | 缓存 ERC-20 津贴,并在 "津贴 > 0 "时跳过 "ApproveTx ",避免额外的签名和气体。 | KIP-247 允许在已获得批准的情况下进行 2-tx 捆绑(借出 + 交换),因此重复使用津贴是完全安全的。 |
批量提交 | 使用 "kaia_sendRawTransactions"(数组有效载荷)将 ApproveTx + SwapTx 推送到一起,防止池竞赛条件。 | 单 tx 调用(eth_sendRawTransaction )可以工作,但如果第二个 tx 先到达节点,就会导致 nonce/静态规则检查失败。 |
安全 | a) 从 Kaia 文档中硬编码GaslessSwapRouter(GSR)的规范地址。 b) 在构建交换之前验证支持,例如,在 try/catch 中使用 await router.dexAddress(token) ,或检查 getSupportedTokens() 返回的列表。 | 防止钓鱼合约或不支持的令牌劫持 GA 流量。 |
不带 KAIA 的气体估算 | 使用带有 state override 的 eth_estimateGas 在调用中为发送方提供临时余额,例如 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 发送了一个常规 tx,在开采 GA 包之前消耗了下一个 nonce。 | 在签署前查询 getTransactionCount() ;如果 nonce 已移动,则重建两个 tx 对象。 |
klay_sendRawTransactions → "未定义的 tx 类型" 。 | 您试图通过 kaia_… 端点批量发送 Kaia 特有的 tx 类型(例如 0x30),而该端点仅支持以太坊类型。 | 使用 kaia_sendRawTransactions 发送 GA 包,然后使用 klay_sendRawTransaction 广播 0x30 AppTx。 |
6.3 常见问题
主网上有 GA 吗?
是的,目前 GA 已在 Kairos testnet 和 mainnet 上运行。
如果用户没有足够的代币进行交换,会发生什么情况?
SwapTx 将在链上失败,但由于KIP-245 的原子捆绑,整个捆绑将被还原并从块中排除。 用户不会损失任何资金,其在链上的状态也保持不变,他们不会为失败的尝试支付任何气体费用。
如何检查哪些代用券和多少钱被换成了汽油?
每次成功的 "swapForGas "调用都会从 "GaslessSwapRouter "发出SwappedForGas事件。
你可以
- 在 KaiaScan 上查找路由器地址(参见合同地址文档),然后打开 "事件"选项卡。
- 解码事件日志中显示的 "token"、"amountIn"、"amountOut "和 "amountRepay "字段。
如果需要链上数据,请在索引器或 dApp 后端监听 "SwappedForGas"。