fixed address normalizatoin

This commit is contained in:
Stephan D
2025-12-26 17:24:43 +01:00
parent 6daf567baf
commit 1ec6cd8386
3 changed files with 59 additions and 6 deletions

View File

@@ -59,6 +59,7 @@ func resolveDestination(ctx context.Context, deps Deps, dest *chainv1.TransferDe
} }
return model.TransferDestination{ return model.TransferDestination{
ExternalAddress: normalized, ExternalAddress: normalized,
ExternalAddressOriginal: external,
Memo: strings.TrimSpace(dest.GetMemo()), Memo: strings.TrimSpace(dest.GetMemo()),
}, nil }, nil
} }

View File

@@ -30,6 +30,7 @@ type ServiceFee struct {
type TransferDestination struct { type TransferDestination struct {
ManagedWalletRef string `bson:"managedWalletRef,omitempty" json:"managedWalletRef,omitempty"` ManagedWalletRef string `bson:"managedWalletRef,omitempty" json:"managedWalletRef,omitempty"`
ExternalAddress string `bson:"externalAddress,omitempty" json:"externalAddress,omitempty"` ExternalAddress string `bson:"externalAddress,omitempty" json:"externalAddress,omitempty"`
ExternalAddressOriginal string `bson:"externalAddressOriginal,omitempty" json:"externalAddressOriginal,omitempty"`
Memo string `bson:"memo,omitempty" json:"memo,omitempty"` Memo string `bson:"memo,omitempty" json:"memo,omitempty"`
} }
@@ -85,7 +86,8 @@ func (t *Transfer) Normalize() {
t.TokenSymbol = strings.TrimSpace(strings.ToUpper(t.TokenSymbol)) t.TokenSymbol = strings.TrimSpace(strings.ToUpper(t.TokenSymbol))
t.ContractAddress = strings.TrimSpace(strings.ToLower(t.ContractAddress)) t.ContractAddress = strings.TrimSpace(strings.ToLower(t.ContractAddress))
t.Destination.ManagedWalletRef = strings.TrimSpace(t.Destination.ManagedWalletRef) t.Destination.ManagedWalletRef = strings.TrimSpace(t.Destination.ManagedWalletRef)
t.Destination.ExternalAddress = strings.TrimSpace(strings.ToLower(t.Destination.ExternalAddress)) t.Destination.ExternalAddress = normalizeWalletAddress(t.Destination.ExternalAddress)
t.Destination.ExternalAddressOriginal = strings.TrimSpace(t.Destination.ExternalAddressOriginal)
t.Destination.Memo = strings.TrimSpace(t.Destination.Memo) t.Destination.Memo = strings.TrimSpace(t.Destination.Memo)
t.ClientReference = strings.TrimSpace(t.ClientReference) t.ClientReference = strings.TrimSpace(t.ClientReference)
} }

View File

@@ -0,0 +1,50 @@
package model
import (
"strings"
"testing"
)
func TestTransferNormalizePreservesBase58ExternalAddress(t *testing.T) {
address := "TGBDXEg9rxSqGFJDcb889zqTjDwx1bmLRF"
transfer := &Transfer{
IdempotencyKey: "idemp",
TransferRef: "ref",
OrganizationRef: "org",
SourceWalletRef: "wallet",
Network: "tron_mainnet",
TokenSymbol: "USDT",
Destination: TransferDestination{
ExternalAddress: address,
ExternalAddressOriginal: address,
},
}
transfer.Normalize()
if transfer.Destination.ExternalAddress != address {
t.Fatalf("expected external address to preserve case, got %q", transfer.Destination.ExternalAddress)
}
if transfer.Destination.ExternalAddressOriginal != address {
t.Fatalf("expected external address original to preserve case, got %q", transfer.Destination.ExternalAddressOriginal)
}
}
func TestTransferNormalizeLowercasesHexExternalAddress(t *testing.T) {
address := "0xAABBCCDDEEFF00112233445566778899AABBCCDD"
transfer := &Transfer{
Destination: TransferDestination{
ExternalAddress: address,
ExternalAddressOriginal: address,
},
}
transfer.Normalize()
if transfer.Destination.ExternalAddress != strings.ToLower(address) {
t.Fatalf("expected hex external address to be lowercased, got %q", transfer.Destination.ExternalAddress)
}
if transfer.Destination.ExternalAddressOriginal != address {
t.Fatalf("expected external address original to preserve case, got %q", transfer.Destination.ExternalAddressOriginal)
}
}