fix(activity)_: report other token types than ERC20
This fixes incremental updates for tokens and proper report of token type for mobile (in desktop we didn't use it) Closes: #15233
This commit is contained in:
parent
7e4322b45a
commit
89f1feade0
|
@ -587,11 +587,15 @@ func getActivityEntries(ctx context.Context, deps FilterDependencies, addresses
|
||||||
inAmount, outAmount := getTrInAndOutAmounts(activityType, dbTrAmount, dbPTrAmount)
|
inAmount, outAmount := getTrInAndOutAmounts(activityType, dbTrAmount, dbPTrAmount)
|
||||||
|
|
||||||
// Extract tokens and chains
|
// Extract tokens and chains
|
||||||
var involvedToken *Token
|
var tokenContractAddress eth.Address
|
||||||
if tokenAddress != nil && *tokenAddress != ZeroAddress {
|
if tokenAddress != nil && *tokenAddress != ZeroAddress {
|
||||||
involvedToken = &Token{TokenType: Erc20, ChainID: common.ChainID(chainID.Int64), TokenID: tokenID, Address: *tokenAddress}
|
tokenContractAddress = *tokenAddress
|
||||||
} else {
|
}
|
||||||
involvedToken = &Token{TokenType: Native, ChainID: common.ChainID(chainID.Int64), TokenID: tokenID}
|
involvedToken := &Token{
|
||||||
|
TokenType: transferTypeToTokenType(transferType),
|
||||||
|
ChainID: common.ChainID(chainID.Int64),
|
||||||
|
Address: tokenContractAddress,
|
||||||
|
TokenID: tokenID,
|
||||||
}
|
}
|
||||||
|
|
||||||
entry = newActivityEntryWithSimpleTransaction(
|
entry = newActivityEntryWithSimpleTransaction(
|
||||||
|
@ -784,6 +788,25 @@ func contractTypeFromDBType(dbType string) (transferType *TransferType) {
|
||||||
return transferType
|
return transferType
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func transferTypeToTokenType(transferType *TransferType) TokenType {
|
||||||
|
if transferType == nil {
|
||||||
|
return Native
|
||||||
|
}
|
||||||
|
switch *transferType {
|
||||||
|
case TransferTypeEth:
|
||||||
|
return Native
|
||||||
|
case TransferTypeErc20:
|
||||||
|
return Erc20
|
||||||
|
case TransferTypeErc721:
|
||||||
|
return Erc721
|
||||||
|
case TransferTypeErc1155:
|
||||||
|
return Erc1155
|
||||||
|
default:
|
||||||
|
log.Error(fmt.Sprintf("unexpected transfer type %d", transferType))
|
||||||
|
}
|
||||||
|
return Native
|
||||||
|
}
|
||||||
|
|
||||||
// lookupAndFillInTokens ignores NFTs
|
// lookupAndFillInTokens ignores NFTs
|
||||||
func lookupAndFillInTokens(deps FilterDependencies, tokenOut *Token, tokenIn *Token) (symbolOut *string, symbolIn *string) {
|
func lookupAndFillInTokens(deps FilterDependencies, tokenOut *Token, tokenIn *Token) (symbolOut *string, symbolIn *string) {
|
||||||
if tokenOut != nil && tokenOut.TokenID == nil {
|
if tokenOut != nil && tokenOut.TokenID == nil {
|
||||||
|
|
|
@ -218,13 +218,23 @@ func (s *Service) getActivityDetails(ctx context.Context, entries []Entry) ([]*E
|
||||||
var err error
|
var err error
|
||||||
ids := make([]thirdparty.CollectibleUniqueID, 0)
|
ids := make([]thirdparty.CollectibleUniqueID, 0)
|
||||||
entriesForIds := make([]*Entry, 0)
|
entriesForIds := make([]*Entry, 0)
|
||||||
|
|
||||||
|
idExists := func(ids []thirdparty.CollectibleUniqueID, id *thirdparty.CollectibleUniqueID) bool {
|
||||||
|
for _, existingID := range ids {
|
||||||
|
if existingID.Same(id) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
for i := range entries {
|
for i := range entries {
|
||||||
if !entries[i].isNFT() {
|
if !entries[i].isNFT() {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
id := entries[i].anyIdentity()
|
id := entries[i].anyIdentity()
|
||||||
if id == nil {
|
if id == nil || idExists(ids, id) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -138,6 +138,7 @@ func TestService_UpdateCollectibleInfo(t *testing.T) {
|
||||||
args := []arg{
|
args := []arg{
|
||||||
{5, "0xA2838FDA19EB6EED3F8B9EFF411D4CD7D2DE0313", "0x0D", nil, nil},
|
{5, "0xA2838FDA19EB6EED3F8B9EFF411D4CD7D2DE0313", "0x0D", nil, nil},
|
||||||
{5, "0xA2838FDA19EB6EED3F8B9EFF411D4CD7D2DE0313", "0x762AD3E4934E687F8701F24C7274E5209213FD6208FF952ACEB325D028866949", nil, nil},
|
{5, "0xA2838FDA19EB6EED3F8B9EFF411D4CD7D2DE0313", "0x762AD3E4934E687F8701F24C7274E5209213FD6208FF952ACEB325D028866949", nil, nil},
|
||||||
|
{5, "0xA2838FDA19EB6EED3F8B9EFF411D4CD7D2DE0313", "0x762AD3E4934E687F8701F24C7274E5209213FD6208FF952ACEB325D028866949", nil, nil},
|
||||||
{5, "0x3d6afaa395c31fcd391fe3d562e75fe9e8ec7e6a", "", nil, nil},
|
{5, "0x3d6afaa395c31fcd391fe3d562e75fe9e8ec7e6a", "", nil, nil},
|
||||||
{5, "0xA2838FDA19EB6EED3F8B9EFF411D4CD7D2DE0313", "0x0F", nil, nil},
|
{5, "0xA2838FDA19EB6EED3F8B9EFF411D4CD7D2DE0313", "0x0F", nil, nil},
|
||||||
}
|
}
|
||||||
|
@ -157,20 +158,25 @@ func TestService_UpdateCollectibleInfo(t *testing.T) {
|
||||||
state.collectiblesMock.On("FetchAssetsByCollectibleUniqueID", []thirdparty.CollectibleUniqueID{
|
state.collectiblesMock.On("FetchAssetsByCollectibleUniqueID", []thirdparty.CollectibleUniqueID{
|
||||||
{
|
{
|
||||||
ContractID: thirdparty.ContractID{
|
ContractID: thirdparty.ContractID{
|
||||||
ChainID: args[3].chainID,
|
ChainID: args[4].chainID,
|
||||||
Address: *args[3].tokenAddress},
|
Address: *args[4].tokenAddress},
|
||||||
TokenID: &bigint.BigInt{Int: args[3].tokenID},
|
TokenID: &bigint.BigInt{Int: args[4].tokenID},
|
||||||
}, {
|
}, {
|
||||||
ContractID: thirdparty.ContractID{
|
ContractID: thirdparty.ContractID{
|
||||||
ChainID: args[1].chainID,
|
ChainID: args[1].chainID,
|
||||||
Address: *args[1].tokenAddress},
|
Address: *args[1].tokenAddress},
|
||||||
TokenID: &bigint.BigInt{Int: args[1].tokenID},
|
TokenID: &bigint.BigInt{Int: args[1].tokenID},
|
||||||
|
}, {
|
||||||
|
ContractID: thirdparty.ContractID{
|
||||||
|
ChainID: args[0].chainID,
|
||||||
|
Address: *args[0].tokenAddress},
|
||||||
|
TokenID: &bigint.BigInt{Int: args[0].tokenID},
|
||||||
},
|
},
|
||||||
}).Return([]thirdparty.FullCollectibleData{
|
}).Return([]thirdparty.FullCollectibleData{
|
||||||
{
|
{
|
||||||
CollectibleData: thirdparty.CollectibleData{
|
CollectibleData: thirdparty.CollectibleData{
|
||||||
Name: "Test 2",
|
Name: "Test 4",
|
||||||
ImageURL: "test://url/2"},
|
ImageURL: "test://url/4"},
|
||||||
CollectionData: nil,
|
CollectionData: nil,
|
||||||
}, {
|
}, {
|
||||||
CollectibleData: thirdparty.CollectibleData{
|
CollectibleData: thirdparty.CollectibleData{
|
||||||
|
@ -178,9 +184,15 @@ func TestService_UpdateCollectibleInfo(t *testing.T) {
|
||||||
ImageURL: "test://url/1"},
|
ImageURL: "test://url/1"},
|
||||||
CollectionData: nil,
|
CollectionData: nil,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
CollectibleData: thirdparty.CollectibleData{
|
||||||
|
Name: "Test 0",
|
||||||
|
ImageURL: "test://url/0"},
|
||||||
|
CollectionData: nil,
|
||||||
|
},
|
||||||
}, nil).Once()
|
}, nil).Once()
|
||||||
|
|
||||||
state.service.FilterActivityAsync(0, append(fromAddresses, toAddresses...), allNetworksFilter(), Filter{}, 0, 3)
|
state.service.FilterActivityAsync(0, append(fromAddresses, toAddresses...), allNetworksFilter(), Filter{}, 0, 10)
|
||||||
|
|
||||||
filterResponseCount := 0
|
filterResponseCount := 0
|
||||||
var updates []EntryData
|
var updates []EntryData
|
||||||
|
@ -193,7 +205,7 @@ func TestService_UpdateCollectibleInfo(t *testing.T) {
|
||||||
payload, err := walletevent.GetPayload[FilterResponse](res)
|
payload, err := walletevent.GetPayload[FilterResponse](res)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ErrorCodeSuccess, payload.ErrorCode)
|
require.Equal(t, ErrorCodeSuccess, payload.ErrorCode)
|
||||||
require.Equal(t, 3, len(payload.Activities))
|
require.Equal(t, 5, len(payload.Activities))
|
||||||
filterResponseCount++
|
filterResponseCount++
|
||||||
case EventActivityFilteringUpdate:
|
case EventActivityFilteringUpdate:
|
||||||
err := walletevent.ExtractPayload(res, &updates)
|
err := walletevent.ExtractPayload(res, &updates)
|
||||||
|
@ -205,11 +217,13 @@ func TestService_UpdateCollectibleInfo(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
require.Equal(t, 1, filterResponseCount)
|
require.Equal(t, 1, filterResponseCount)
|
||||||
require.Equal(t, 2, len(updates))
|
require.Equal(t, 3, len(updates))
|
||||||
require.Equal(t, "Test 2", *updates[0].NftName)
|
require.Equal(t, "Test 4", *updates[0].NftName)
|
||||||
require.Equal(t, "test://url/2", *updates[0].NftURL)
|
require.Equal(t, "test://url/4", *updates[0].NftURL)
|
||||||
require.Equal(t, "Test 1", *updates[1].NftName)
|
require.Equal(t, "Test 1", *updates[1].NftName)
|
||||||
require.Equal(t, "test://url/1", *updates[1].NftURL)
|
require.Equal(t, "test://url/1", *updates[1].NftURL)
|
||||||
|
require.Equal(t, "Test 0", *updates[2].NftName)
|
||||||
|
require.Equal(t, "test://url/0", *updates[2].NftURL)
|
||||||
|
|
||||||
sub.Unsubscribe()
|
sub.Unsubscribe()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue