#dusk $DUSK @Dusk

我得把這段內容讀了兩遍,因爲 HTTP 202 Accepted 通常會讓我大腦放鬆。

但在 Dusk 上,這可能不應該。

當 /transactions/propagate 返回 202 Accepted 時,該節點已經接受了該交易用於路由。

僅憑這點,並不能證明該交易:

已進入真實的內存池(memPool),
已到達各個節點(peers),
已成功執行,
或已最終確認(finalized)。

起初我覺得這只是過於技術化的區別。

後來我發現了更詭異的邊緣情況。

一個具有未來 nonce(隨機數/序號)的有效交易,可能會在預隊列(prequeue)中等待,直到缺失的 nonce 缺口被補齊。

所以你可能會收到一個“乾淨”的 API 返回,但此時交易仍然還沒到你大概率在意的那個階段。

這一點讓我不舒服。

很多基礎設施都建立在一種非常人類的捷徑之上:

API 說是(yes)→ 工作就完成了。

Dusk 的交易所集成指南卻做了相反的假設。

不能僅因爲傳播端點(propagation endpoint)返回了 202 Accepted,就把一次提幣(withdrawal)視爲已完成。執行與最終確認(finality)仍然需要被覈查。

而且如果傳輸層超時,更安全的恢復路徑是重新廣播同一個已簽名的交易(same signed transaction),而不是盲目再創建一個新的。

這就是爲什麼這裏不再只是對 HTTP 狀態碼的好奇。

如果交易所或錢包把傳輸層的接受(transport acceptance)誤認爲賬本已完成(ledger completion),那麼一個小小的集成捷徑就可能演變成記賬問題。

也許我是在夜裏把一個無聊的 API 響應想得太複雜了。

但我認爲有用的區別很簡單:

傳輸成功 ≠ 賬本成功。

在鏈上確認之前,API 也許就會先說“可以”。