iT邦幫忙

鐵人檔案

2026 iThome 鐵人賽
回列表
Software Development

Web3 支付工程筆記:企業級穩定幣結算系統與多鏈架構實戰 系列

一筆穩定幣付款請求從 API 進來,要通過重試、queue、relayer、鏈上確認才算數,每一層都可能重複、卡住或失敗。

我想從零蓋一套企業級穩定幣結算系統,把所有設計想法和取捨寫下來:Payment Intent 狀態機與雙鍵冪等、複式記帳 ledger 與稽核日誌、Go relayer 的交易序列化與失敗任務處理、鏈上鏈下對帳、結算合約與 Permit2、批次付款,最後延伸到 EVM 之外,Solana、TON、SUI 各自需要處理什麼問題等等。

寫給在 Web3 打滾的後端工程師,重心在為什麼這樣設計,不程式碼逐行導讀。完整程式碼會放在公開 repo。

參賽天數 22 天 | 共 22 篇文章 | 1 人訂閱 訂閱系列文 RSS系列文
DAY 11

Day 11 | Transaction Replacement:卡鏈救援與手續費加速機制

本日程式碼:repo tag day-11 昨天最後留下的問題是:一筆交易送出去、沒想到 RPC 呼叫逾時,我們不知道節點有沒有接收到它,所以那個 nonc...

2026-09-02 ‧ 由 菲力 分享
DAY 12

Day 12 | 失敗任務的分類:Retryable vs Poison

本日程式碼:repo tag day-12 昨天 relayer 已經有辦法救一筆卡住的交易,但它對失敗的補救依然是不斷重複「Nack 回 queue、五秒...

2026-09-03 ‧ 由 菲力 分享
DAY 13

Day 13 | DLQ Redrive 設計:不重複打款的保證,與人工介入的邊界

本日程式碼:repo tag day-13 如果我們現在有一些付款請求,它們的 job 已經被移除了,我們會發現那些請求依然存在,但「實際上是哪些 job...

2026-09-04 ‧ 由 菲力 分享
DAY 14

Day 14 | Chain Listener 與 Finality Policy:四條鏈的「不可逆」分別是什麼意思

本日程式碼:repo tag day-14 Payment Intent 的轉移表從 Day 4 定案到現在,confirming 的三個出口(settle...

2026-09-05 ‧ 由 菲力 分享
DAY 15

Day 15 | 鏈上鏈下對齊:Reconciliation Engine 實作

本日程式碼:repo tag day-15 relayer 的流程裡有一個我們一直接受下來的問題:交易送出去了、把 tx hash 寫回 intent 之前...

2026-09-06 ‧ 由 菲力 分享
DAY 16

Day 16 | 結算合約概觀:Pull vs Push 支付流

本日程式碼:repo tag day-16 一筆 100 USDC 的付款,最直接的走法是 payer 對 USDC 合約發一筆 transfer 給 me...

2026-09-07 ‧ 由 菲力 分享
DAY 17

Day 17 | 封裝 SafeTransfer:為何你永遠需要 SafeERC20?

本日程式碼:repo tag day-17 昨天的 Settlement 收工時帶著一個明講過的問題:搬錢那一行用標準 IERC20 介面呼叫 transf...

2026-09-08 ‧ 由 菲力 分享
DAY 18

Day 18 | Permit2 深度解析:Signature-based Approval 如何改變支付體驗

本日程式碼:repo tag day-18 目前為止,一筆付款要兩筆鏈上交易:payer 先發一筆 approve 把額度授權給結算合約,relayer 才...

2026-09-09 ‧ 由 菲力 分享
DAY 19

Day 19 | 託管 (Escrow) 與手續費 (Fee/Refund) 流程實作

本日程式碼:repo tag day-19 我們的結算合約目前只會當場結清:交易上鏈的那一刻,錢已經從 payer 直達 merchant,事後發現問題想把...

2026-09-10 ‧ 由 菲力 分享
DAY 20

Day 20 | Bulk Transfer 設計:逐筆 Batch vs Merkle Airdrop

本日程式碼:repo tag day-20 一個平台月底要同時撥款給 300 個 merchant,照現在的做法就是排 300 份 job、送 300 筆...

2026-09-11 ‧ 由 菲力 分享