Merge pull request 'fixed contract address handling' (#572) from tron-570 into main
Some checks failed
ci/woodpecker/push/gateway_tron Pipeline failed
ci/woodpecker/push/gateway_chain Pipeline was successful

Reviewed-on: #572
This commit was merged in pull request #572.
This commit is contained in:
2026-02-27 13:29:28 +00:00
7 changed files with 57 additions and 4 deletions

View File

@@ -7,7 +7,7 @@ import (
)
func TestNewRailGateway_NormalizesRail(t *testing.T) {
gw := NewRailGateway(nil, RailGatewayConfig{Rail: "card_payout", Network: "tron"})
gw := NewRailGateway(nil, RailGatewayConfig{Rail: "card", Network: "tron"})
if got, want := gw.Rail(), discovery.RailCardPayout; got != want {
t.Fatalf("unexpected rail: got=%q want=%q", got, want)
}

View File

@@ -223,6 +223,7 @@ func (s *Service) startDiscoveryAnnouncers() {
}
announce := discovery.Announcement{
ID: discovery.StableCryptoRailGatewayID(string(network.Name)),
InstanceID: discovery.InstanceID(),
Service: "CRYPTO_RAIL_GATEWAY",
Rail: discovery.RailCrypto,
Operations: discovery.CryptoRailGatewayOperations(),

View File

@@ -7,7 +7,7 @@ import (
)
func TestNewRailGateway_NormalizesRail(t *testing.T) {
gw := NewRailGateway(nil, RailGatewayConfig{Rail: "card_payout", Network: "tron"})
gw := NewRailGateway(nil, RailGatewayConfig{Rail: "card", Network: "tron"})
if got, want := gw.Rail(), discovery.RailCardPayout; got != want {
t.Fatalf("unexpected rail: got=%q want=%q", got, want)
}

View File

@@ -55,7 +55,7 @@ func WithNetworks(networks []shared.Network) Option {
}
for i := range clone.TokenConfigs {
clone.TokenConfigs[i].Symbol = strings.ToUpper(strings.TrimSpace(clone.TokenConfigs[i].Symbol))
clone.TokenConfigs[i].ContractAddress = strings.ToLower(strings.TrimSpace(clone.TokenConfigs[i].ContractAddress))
clone.TokenConfigs[i].ContractAddress = strings.TrimSpace(clone.TokenConfigs[i].ContractAddress)
}
clone.Name = network.Name
s.networks[clone.Name.String()] = clone

View File

@@ -228,6 +228,7 @@ func (s *Service) startDiscoveryAnnouncers() {
}
announce := discovery.Announcement{
ID: discovery.StableCryptoRailGatewayID(network.Name.String()),
InstanceID: discovery.InstanceID(),
Service: "CRYPTO_RAIL_GATEWAY",
Rail: discovery.RailCrypto,
Operations: discovery.CryptoRailGatewayOperations(),

View File

@@ -18,6 +18,7 @@ import (
"go.uber.org/zap"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/structpb"
"github.com/tech/sendico/gateway/tron/internal/keymanager"
"github.com/tech/sendico/gateway/tron/internal/service/gateway/drivers"
@@ -88,6 +89,56 @@ func TestCreateManagedWallet_NativeTokenWithoutContract(t *testing.T) {
require.Empty(t, resp.GetWallet().GetAsset().GetContractAddress())
}
func TestCreateManagedWallet_ResolvedContractPreservesCase(t *testing.T) {
svc, _ := newTestService(t)
ctx := context.Background()
resp, err := svc.CreateManagedWallet(ctx, &ichainv1.CreateManagedWalletRequest{
IdempotencyKey: "idem-contract-case",
OrganizationRef: "org-1",
OwnerRef: "owner-1",
Asset: &ichainv1.Asset{
Chain: ichainv1.ChainNetwork_CHAIN_NETWORK_TRON_MAINNET,
TokenSymbol: "USDT",
},
})
require.NoError(t, err)
require.NotNil(t, resp.GetWallet())
require.Equal(t, "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", resp.GetWallet().GetAsset().GetContractAddress())
}
func TestOpenAccount_PreservesContractAddressCase(t *testing.T) {
svc, _ := newTestService(t)
ctx := context.Background()
const contract = "TR7NhQjeKQxGTCi8q8ZY4pL8otSzgjLj6T"
params, err := structpb.NewStruct(map[string]interface{}{
"organization_ref": "org-1",
"network": "TRON_MAINNET",
"token_symbol": "USDT",
"contract_address": contract,
})
require.NoError(t, err)
resp, err := svc.OpenAccount(ctx, &connectorv1.OpenAccountRequest{
IdempotencyKey: "idem-open-account-contract-case",
Kind: connectorv1.AccountKind_CHAIN_MANAGED_WALLET,
Asset: "USDT-TRC20",
OwnerRef: "owner-1",
Params: params,
})
require.NoError(t, err)
require.NotNil(t, resp)
require.Nil(t, resp.GetError())
require.NotNil(t, resp.GetAccount())
details := resp.GetAccount().GetProviderDetails()
require.NotNil(t, details)
field, ok := details.GetFields()["contract_address"]
require.True(t, ok)
require.Equal(t, contract, field.GetStringValue())
}
func TestListAccounts_OrganizationRefFilters(t *testing.T) {
svc, _ := newTestService(t)
ctx := context.Background()

View File

@@ -38,7 +38,7 @@ func ResolveContractAddress(tokens []TokenContract, symbol string) string {
upper := strings.ToUpper(symbol)
for _, token := range tokens {
if strings.EqualFold(token.Symbol, upper) && token.ContractAddress != "" {
return strings.ToLower(token.ContractAddress)
return strings.TrimSpace(token.ContractAddress)
}
}
return ""