feat: support TON and USDT Jetton payments

- add TON chain, token, RPC, address normalization, and order matching support
- add liteclient scanner with masterchain/shard catch-up and Jetton validation
- add TON manual payment verification and focused tests
This commit is contained in:
line-6000
2026-06-11 14:47:46 +08:00
parent 225cae2c24
commit 9b397bd45e
34 changed files with 3131 additions and 57 deletions
+18 -4
View File
@@ -12,8 +12,24 @@ import (
"github.com/GMWalletApp/epusdt/model/mdb"
"github.com/GMWalletApp/epusdt/notify"
"github.com/ethereum/go-ethereum/common"
"gorm.io/gorm/clause"
)
func upsertTaskServiceTestChainToken(t *testing.T, token mdb.ChainToken) {
t.Helper()
if err := dao.Mdb.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "network"}, {Name: "symbol"}},
DoUpdates: clause.AssignmentColumns([]string{
"contract_address",
"decimals",
"enabled",
"min_amount",
}),
}).Create(&token).Error; err != nil {
t.Fatalf("seed chain token: %v", err)
}
}
func TestSendPaymentNotificationUsesLatestOrderUpdatedAt(t *testing.T) {
cleanup := testutil.SetupTestDatabases(t)
defer cleanup()
@@ -158,15 +174,13 @@ func TestTryProcessEvmERC20TransferSkipsTransfersBeforeOrderCreation(t *testing.
contract := common.HexToAddress("0x3333333333333333333333333333333333333333")
receiveAddress := common.HexToAddress("0x4444444444444444444444444444444444444444")
if err := dao.Mdb.Create(&mdb.ChainToken{
upsertTaskServiceTestChainToken(t, mdb.ChainToken{
Network: mdb.NetworkEthereum,
Symbol: tokenSym,
ContractAddress: contract.Hex(),
Decimals: 6,
Enabled: true,
}).Error; err != nil {
t.Fatalf("seed chain token: %v", err)
}
})
order := &mdb.Orders{
TradeId: tradeID,