diff --git a/services/wallet/activity/activity_test.go b/services/wallet/activity/activity_test.go index 3284ca694..64c9a1bca 100644 --- a/services/wallet/activity/activity_test.go +++ b/services/wallet/activity/activity_test.go @@ -28,17 +28,21 @@ func setupTestActivityDB(t *testing.T) (db *sql.DB, close func()) { } type testData struct { - tr1 transfer.TestTransaction // index 1 - pendingTr transfer.TestTransaction // index 2 - singletonMTr transfer.TestTransaction // index 3 - mTr transfer.TestTransaction // index 4 - singleTr transfer.TestTransaction // index 5 - subTr transfer.TestTransaction // index 6 - subPendingTr transfer.TestTransaction // index 7 + tr1 transfer.TestTransfer // index 1 + pendingTr transfer.TestTransfer // index 2 + multiTx1Tr1 transfer.TestTransfer // index 3 + multiTx2Tr1 transfer.TestTransfer // index 4 + multiTx1Tr2 transfer.TestTransfer // index 5 + multiTx2Tr2 transfer.TestTransfer // index 6 + multiTx2PendingTr transfer.TestTransfer // index 7 - singletonMTID transfer.MultiTransactionIDType - mTrID transfer.MultiTransactionIDType - nextIndex int + multiTx1 transfer.TestMultiTransaction + multiTx1ID transfer.MultiTransactionIDType + + multiTx2 transfer.TestMultiTransaction + multiTx2ID transfer.MultiTransactionIDType + + nextIndex int } func mockTestAccountsWithAddresses(t *testing.T, db *sql.DB, addresses []eth_common.Address) { @@ -52,36 +56,53 @@ func mockTestAccountsWithAddresses(t *testing.T, db *sql.DB, addresses []eth_com accounts.MockTestAccounts(t, db, mockedAccounts) } -// Generates and adds to the DB 7 transactions. 3 transactions, 2 pending and 2 multi transactions (1: 1 x pending and 1: with 2 x complete) -// There are only 4 extractable transactions and multi-transaction with timestamps 1-4. The other 2 are associated with a multi-transaction +// Generates and adds to the DB 7 transfers and 2 multitransactions. +// There are only 4 extractable activity entries (transactions + multi-transactions) with timestamps 1-4. The others are associated with a multi-transaction func fillTestData(t *testing.T, db *sql.DB) (td testData, fromAddresses, toAddresses []eth_common.Address) { - trs, fromAddresses, toAddresses := transfer.GenerateTestTransactions(t, db, 1, 7) + trs, fromAddresses, toAddresses := transfer.GenerateTestTransfers(t, db, 1, 7) + + // Plain transfer td.tr1 = trs[0] transfer.InsertTestTransfer(t, db, &td.tr1) + // Pending transfer td.pendingTr = trs[1] transfer.InsertTestPendingTransaction(t, db, &td.pendingTr) - td.singletonMTr = trs[2] - td.singletonMTr.FromToken = testutils.SntSymbol - td.singletonMTr.ToToken = testutils.DaiSymbol - td.singletonMTID = transfer.InsertTestMultiTransaction(t, db, &td.singletonMTr) + // Send Multitransaction containing 2 x Plain transfers + td.multiTx1Tr1 = trs[2] + td.multiTx1Tr2 = trs[4] - td.mTr = trs[3] - td.mTr.ToToken = testutils.SntSymbol - td.mTrID = transfer.InsertTestMultiTransaction(t, db, &td.mTr) + td.multiTx1Tr1.Token = testutils.SntSymbol - td.singleTr = trs[4] - td.singleTr.MultiTransactionID = td.singletonMTID - transfer.InsertTestTransfer(t, db, &td.singleTr) + td.multiTx1 = transfer.GenerateTestSendMultiTransaction(td.multiTx1Tr1) + td.multiTx1.ToToken = testutils.DaiSymbol + td.multiTx1ID = transfer.InsertTestMultiTransaction(t, db, &td.multiTx1) - td.subTr = trs[5] - td.subTr.MultiTransactionID = td.mTrID - transfer.InsertTestTransfer(t, db, &td.subTr) + td.multiTx1Tr1.MultiTransactionID = td.multiTx1ID + transfer.InsertTestTransfer(t, db, &td.multiTx1Tr1) + + td.multiTx1Tr2.MultiTransactionID = td.multiTx1ID + transfer.InsertTestTransfer(t, db, &td.multiTx1Tr2) + + // Send Multitransaction containing 2 x Plain transfers + 1 x Pending transfer + td.multiTx2Tr1 = trs[3] + td.multiTx2Tr2 = trs[5] + td.multiTx2PendingTr = trs[6] + + td.multiTx2 = transfer.GenerateTestSendMultiTransaction(td.multiTx2Tr1) + td.multiTx1.ToToken = testutils.SntSymbol + td.multiTx2ID = transfer.InsertTestMultiTransaction(t, db, &td.multiTx2) + + td.multiTx2Tr1.MultiTransactionID = td.multiTx2ID + transfer.InsertTestTransfer(t, db, &td.multiTx2Tr1) + + td.multiTx2Tr2.MultiTransactionID = td.multiTx2ID + transfer.InsertTestTransfer(t, db, &td.multiTx2Tr2) + + td.multiTx2PendingTr.MultiTransactionID = td.multiTx2ID + transfer.InsertTestPendingTransaction(t, db, &td.multiTx2PendingTr) - td.subPendingTr = trs[6] - td.subPendingTr.MultiTransactionID = td.mTrID - transfer.InsertTestPendingTransaction(t, db, &td.subPendingTr) td.nextIndex = 8 return td, fromAddresses, toAddresses } @@ -125,8 +146,8 @@ func TestGetActivityEntriesAll(t *testing.T) { require.True(t, testutils.StructExistsInSlice(Entry{ payloadType: MultiTransactionPT, transaction: nil, - id: td.singletonMTID, - timestamp: td.singletonMTr.Timestamp, + id: td.multiTx1ID, + timestamp: td.multiTx1.Timestamp, activityType: SendAT, activityStatus: CompleteAS, tokenType: AssetTT, @@ -134,8 +155,8 @@ func TestGetActivityEntriesAll(t *testing.T) { require.True(t, testutils.StructExistsInSlice(Entry{ payloadType: MultiTransactionPT, transaction: nil, - id: td.mTrID, - timestamp: td.mTr.Timestamp, + id: td.multiTx2ID, + timestamp: td.multiTx2.Timestamp, activityType: SendAT, activityStatus: PendingAS, tokenType: AssetTT, @@ -144,18 +165,45 @@ func TestGetActivityEntriesAll(t *testing.T) { // Ensure the sub-transactions of the multi-transactions are not returned require.False(t, testutils.StructExistsInSlice(Entry{ payloadType: SimpleTransactionPT, - transaction: &transfer.TransactionIdentity{ChainID: td.subTr.ChainID, Hash: td.subTr.Hash, Address: td.subTr.To}, - id: td.subTr.MultiTransactionID, - timestamp: td.subTr.Timestamp, + transaction: &transfer.TransactionIdentity{ChainID: td.multiTx1Tr1.ChainID, Hash: td.multiTx1Tr1.Hash, Address: td.multiTx1Tr1.To}, + id: td.multiTx1Tr1.MultiTransactionID, + timestamp: td.multiTx1Tr1.Timestamp, + activityType: SendAT, + activityStatus: CompleteAS, + tokenType: AssetTT, + }, entries)) + require.False(t, testutils.StructExistsInSlice(Entry{ + payloadType: SimpleTransactionPT, + transaction: &transfer.TransactionIdentity{ChainID: td.multiTx1Tr2.ChainID, Hash: td.multiTx1Tr2.Hash, Address: td.multiTx1Tr2.To}, + id: td.multiTx1Tr2.MultiTransactionID, + timestamp: td.multiTx1Tr2.Timestamp, + activityType: SendAT, + activityStatus: CompleteAS, + tokenType: AssetTT, + }, entries)) + require.False(t, testutils.StructExistsInSlice(Entry{ + payloadType: SimpleTransactionPT, + transaction: &transfer.TransactionIdentity{ChainID: td.multiTx2Tr1.ChainID, Hash: td.multiTx2Tr1.Hash, Address: td.multiTx2Tr1.To}, + id: td.multiTx2Tr1.MultiTransactionID, + timestamp: td.multiTx2Tr1.Timestamp, + activityType: SendAT, + activityStatus: CompleteAS, + tokenType: AssetTT, + }, entries)) + require.False(t, testutils.StructExistsInSlice(Entry{ + payloadType: SimpleTransactionPT, + transaction: &transfer.TransactionIdentity{ChainID: td.multiTx2Tr2.ChainID, Hash: td.multiTx2Tr2.Hash, Address: td.multiTx2Tr2.To}, + id: td.multiTx2Tr2.MultiTransactionID, + timestamp: td.multiTx2Tr2.Timestamp, activityType: SendAT, activityStatus: CompleteAS, tokenType: AssetTT, }, entries)) require.False(t, testutils.StructExistsInSlice(Entry{ payloadType: PendingTransactionPT, - transaction: &transfer.TransactionIdentity{ChainID: td.subPendingTr.ChainID, Hash: td.subPendingTr.Hash}, - id: td.subPendingTr.MultiTransactionID, - timestamp: td.subPendingTr.Timestamp, + transaction: &transfer.TransactionIdentity{ChainID: td.multiTx2PendingTr.ChainID, Hash: td.multiTx2PendingTr.Hash}, + id: td.multiTx2PendingTr.MultiTransactionID, + timestamp: td.multiTx2PendingTr.Timestamp, activityType: SendAT, activityStatus: PendingAS, tokenType: AssetTT, @@ -215,7 +263,7 @@ func TestGetActivityEntriesFilterByTime(t *testing.T) { td, fromTds, toTds := fillTestData(t, db) // Add 6 extractable transactions with timestamps 6-12 - trs, fromTrs, toTrs := transfer.GenerateTestTransactions(t, db, td.nextIndex, 6) + trs, fromTrs, toTrs := transfer.GenerateTestTransfers(t, db, td.nextIndex, 6) for i := range trs { transfer.InsertTestTransfer(t, db, &trs[i]) } @@ -224,7 +272,7 @@ func TestGetActivityEntriesFilterByTime(t *testing.T) { // Test start only var filter Filter - filter.Period.StartTimestamp = td.singletonMTr.Timestamp + filter.Period.StartTimestamp = td.multiTx1.Timestamp filter.Period.EndTimestamp = NoLimitTimestampForPeriod entries, err := getActivityEntries(context.Background(), db, []eth_common.Address{}, []common.ChainID{}, filter, 0, 15) require.NoError(t, err) @@ -242,8 +290,8 @@ func TestGetActivityEntriesFilterByTime(t *testing.T) { require.Equal(t, Entry{ payloadType: MultiTransactionPT, transaction: nil, - id: td.singletonMTID, - timestamp: td.singletonMTr.Timestamp, + id: td.multiTx1ID, + timestamp: td.multiTx1.Timestamp, activityType: SendAT, activityStatus: CompleteAS, tokenType: AssetTT, @@ -267,8 +315,8 @@ func TestGetActivityEntriesFilterByTime(t *testing.T) { require.Equal(t, Entry{ payloadType: MultiTransactionPT, transaction: nil, - id: td.singletonMTID, - timestamp: td.singletonMTr.Timestamp, + id: td.multiTx1ID, + timestamp: td.multiTx1.Timestamp, activityType: SendAT, activityStatus: CompleteAS, tokenType: AssetTT, @@ -305,7 +353,7 @@ func TestGetActivityEntriesCheckOffsetAndLimit(t *testing.T) { defer close() // Add 10 extractable transactions with timestamps 1-10 - trs, fromTrs, toTrs := transfer.GenerateTestTransactions(t, db, 1, 10) + trs, fromTrs, toTrs := transfer.GenerateTestTransfers(t, db, 1, 10) for i := range trs { transfer.InsertTestTransfer(t, db, &trs[i]) } @@ -409,21 +457,21 @@ func TestGetActivityEntriesFilterByType(t *testing.T) { // Adds 4 extractable transactions td, _, _ := fillTestData(t, db) // Add 5 extractable transactions: one MultiTransactionSwap, two MultiTransactionBridge and two MultiTransactionSend - trs, _, _ := transfer.GenerateTestTransactions(t, db, td.nextIndex, 10) - trs[0].MultiTransactionType = transfer.MultiTransactionBridge - trs[2].MultiTransactionType = transfer.MultiTransactionSwap - trs[4].MultiTransactionType = transfer.MultiTransactionSend - trs[6].MultiTransactionType = transfer.MultiTransactionBridge - trs[8].MultiTransactionType = transfer.MultiTransactionSend + multiTxs := make([]transfer.TestMultiTransaction, 5) + trs, _, _ := transfer.GenerateTestTransfers(t, db, td.nextIndex, len(multiTxs)*2) + multiTxs[0] = transfer.GenerateTestBridgeMultiTransaction(trs[0], trs[1]) + multiTxs[1] = transfer.GenerateTestSwapMultiTransaction(trs[2], testutils.SntSymbol, 100) // trs[3] + multiTxs[2] = transfer.GenerateTestSendMultiTransaction(trs[4]) // trs[5] + multiTxs[3] = transfer.GenerateTestBridgeMultiTransaction(trs[6], trs[7]) + multiTxs[4] = transfer.GenerateTestSendMultiTransaction(trs[8]) // trs[9] var lastMT transfer.MultiTransactionIDType for i := range trs { if i%2 == 0 { - lastMT = transfer.InsertTestMultiTransaction(t, db, &trs[i]) - } else { - trs[i].MultiTransactionID = lastMT - transfer.InsertTestTransfer(t, db, &trs[i]) + lastMT = transfer.InsertTestMultiTransaction(t, db, &multiTxs[i/2]) } + trs[i].MultiTransactionID = lastMT + transfer.InsertTestTransfer(t, db, &trs[i]) } // Test filtering out without address involved @@ -431,7 +479,7 @@ func TestGetActivityEntriesFilterByType(t *testing.T) { filter.Types = allActivityTypesFilter() // Set tr1 to Receive and pendingTr to Send; rest of two MT remain default Send - addresses := []eth_common.Address{td.tr1.To, td.pendingTr.From, td.singletonMTr.From, td.mTr.From, trs[0].From, trs[2].From, trs[4].From, trs[6].From, trs[8].From} + addresses := []eth_common.Address{td.tr1.To, td.pendingTr.From, td.multiTx1.FromAddress, td.multiTx2.FromAddress, trs[0].From, trs[2].From, trs[4].From, trs[6].From, trs[8].From} entries, err := getActivityEntries(context.Background(), db, addresses, []common.ChainID{}, filter, 0, 15) require.NoError(t, err) require.Equal(t, 9, len(entries)) @@ -467,7 +515,7 @@ func TestGetActivityEntriesFilterByAddresses(t *testing.T) { // Adds 4 extractable transactions td, fromTds, toTds := fillTestData(t, db) - trs, fromTrs, toTrs := transfer.GenerateTestTransactions(t, db, td.nextIndex, 6) + trs, fromTrs, toTrs := transfer.GenerateTestTransfers(t, db, td.nextIndex, 6) for i := range trs { transfer.InsertTestTransfer(t, db, &trs[i]) } @@ -481,7 +529,7 @@ func TestGetActivityEntriesFilterByAddresses(t *testing.T) { require.NoError(t, err) require.Equal(t, 10, len(entries)) - addressesFilter = []eth_common.Address{td.mTr.To, trs[1].From, trs[4].To} + addressesFilter = []eth_common.Address{td.multiTx2.ToAddress, trs[1].From, trs[4].To} entries, err = getActivityEntries(context.Background(), db, addressesFilter, []common.ChainID{}, filter, 0, 15) require.NoError(t, err) require.Equal(t, 3, len(entries)) @@ -506,8 +554,8 @@ func TestGetActivityEntriesFilterByAddresses(t *testing.T) { require.Equal(t, Entry{ payloadType: MultiTransactionPT, transaction: nil, - id: td.mTrID, - timestamp: td.mTr.Timestamp, + id: td.multiTx2ID, + timestamp: td.multiTx2.Timestamp, activityType: SendAT, activityStatus: PendingAS, tokenType: AssetTT, @@ -521,8 +569,9 @@ func TestGetActivityEntriesFilterByStatus(t *testing.T) { // Adds 4 extractable transactions: 1 T, 1 T pending, 1 MT pending, 1 MT with 2xT success td, fromTds, toTds := fillTestData(t, db) // Add 7 extractable transactions: 1 pending, 1 Tr failed, 1 MT failed, 4 success - trs, fromTrs, toTrs := transfer.GenerateTestTransactions(t, db, td.nextIndex, 7) - failedMTID := transfer.InsertTestMultiTransaction(t, db, &trs[6]) + trs, fromTrs, toTrs := transfer.GenerateTestTransfers(t, db, td.nextIndex, 7) + multiTx := transfer.GenerateTestSendMultiTransaction(trs[6]) + failedMTID := transfer.InsertTestMultiTransaction(t, db, &multiTx) trs[6].MultiTransactionID = failedMTID for i := range trs { if i == 1 { @@ -546,7 +595,7 @@ func TestGetActivityEntriesFilterByStatus(t *testing.T) { require.NoError(t, err) require.Equal(t, 3, len(entries)) require.Equal(t, td.pendingTr.Hash, entries[2].transaction.Hash) - require.Equal(t, td.mTrID, entries[1].id) + require.Equal(t, td.multiTx2ID, entries[1].id) require.Equal(t, trs[1].Hash, entries[0].transaction.Hash) filter.Statuses = []Status{FailedAS} @@ -579,9 +628,9 @@ func TestGetActivityEntriesFilterByTokenType(t *testing.T) { // Adds 4 extractable transactions 2 transactions ETH, one MT SNT to DAI and another MT ETH to SNT td, fromTds, toTds := fillTestData(t, db) // Add 6 extractable transactions with USDC (only erc20 as type in DB) - trs, fromTrs, toTrs := transfer.GenerateTestTransactions(t, db, td.nextIndex, 6) + trs, fromTrs, toTrs := transfer.GenerateTestTransfers(t, db, td.nextIndex, 6) for i := range trs { - trs[i].FromToken = "USDC" + trs[i].Token = "USDC" transfer.InsertTestTransfer(t, db, &trs[i]) } @@ -629,7 +678,7 @@ func TestGetActivityEntriesFilterByToAddresses(t *testing.T) { // Adds 4 extractable transactions td, fromTds, toTds := fillTestData(t, db) // Add 6 extractable transactions - trs, fromTrs, toTrs := transfer.GenerateTestTransactions(t, db, td.nextIndex, 6) + trs, fromTrs, toTrs := transfer.GenerateTestTransfers(t, db, td.nextIndex, 6) for i := range trs { transfer.InsertTestTransfer(t, db, &trs[i]) } @@ -647,7 +696,7 @@ func TestGetActivityEntriesFilterByToAddresses(t *testing.T) { require.NoError(t, err) require.Equal(t, 0, len(entries)) - filter.CounterpartyAddresses = []eth_common.Address{td.pendingTr.To, td.mTr.To, trs[3].To} + filter.CounterpartyAddresses = []eth_common.Address{td.pendingTr.To, td.multiTx2.ToAddress, trs[3].To} entries, err = getActivityEntries(context.Background(), db, []eth_common.Address{}, []common.ChainID{}, filter, 0, 15) require.NoError(t, err) require.Equal(t, 3, len(entries)) @@ -664,7 +713,7 @@ func TestGetActivityEntriesFilterByNetworks(t *testing.T) { // Adds 4 extractable transactions td, fromTds, toTds := fillTestData(t, db) // Add 6 extractable transactions - trs, fromTrs, toTrs := transfer.GenerateTestTransactions(t, db, td.nextIndex, 6) + trs, fromTrs, toTrs := transfer.GenerateTestTransfers(t, db, td.nextIndex, 6) for i := range trs { transfer.InsertTestTransfer(t, db, &trs[i]) } @@ -682,7 +731,7 @@ func TestGetActivityEntriesFilterByNetworks(t *testing.T) { // TODO: update after multi-transactions are filterable by ChainID require.Equal(t, 2 /*0*/, len(entries)) - chainIDs = []common.ChainID{td.pendingTr.ChainID, td.mTr.ChainID, trs[3].ChainID} + chainIDs = []common.ChainID{td.pendingTr.ChainID, td.multiTx2Tr1.ChainID, trs[3].ChainID} entries, err = getActivityEntries(context.Background(), db, []eth_common.Address{}, chainIDs, filter, 0, 15) require.NoError(t, err) // TODO: update after multi-transactions are filterable by ChainID @@ -697,12 +746,12 @@ func TestGetActivityEntriesCheckToAndFrom(t *testing.T) { td, _, _ := fillTestData(t, db) // Add extra transactions to test To address - trs, _, _ := transfer.GenerateTestTransactions(t, db, td.nextIndex, 2) + trs, _, _ := transfer.GenerateTestTransfers(t, db, td.nextIndex, 2) transfer.InsertTestTransfer(t, db, &trs[0]) transfer.InsertTestPendingTransaction(t, db, &trs[1]) addresses := []eth_common.Address{td.tr1.From, td.pendingTr.From, - td.singletonMTr.From, td.mTr.To, trs[0].To, trs[1].To} + td.multiTx1.FromAddress, td.multiTx2.ToAddress, trs[0].To, trs[1].To} var filter Filter entries, err := getActivityEntries(context.Background(), db, addresses, []common.ChainID{}, filter, 0, 15) @@ -716,8 +765,8 @@ func TestGetActivityEntriesCheckToAndFrom(t *testing.T) { require.Equal(t, SendAT, entries[4].activityType) // td.pendingTr // Multi-transactions are always considered as SendAT - require.Equal(t, SendAT, entries[3].activityType) // td.singletonMTr - require.Equal(t, SendAT, entries[2].activityType) // td.mTr + require.Equal(t, SendAT, entries[3].activityType) // td.multiTx1 + require.Equal(t, SendAT, entries[2].activityType) // td.multiTx2 require.Equal(t, ReceiveAT, entries[1].activityType) // trs[0] require.NotEqual(t, eth.Address{}, entries[1].transaction.Address) // trs[0] diff --git a/services/wallet/activity/filter_test.go b/services/wallet/activity/filter_test.go index 54da45907..21a635a98 100644 --- a/services/wallet/activity/filter_test.go +++ b/services/wallet/activity/filter_test.go @@ -36,7 +36,7 @@ func TestGetRecipients(t *testing.T) { defer close() // Add 6 extractable transactions - trs, _, toTrs := transfer.GenerateTestTransactions(t, db, 0, 6) + trs, _, toTrs := transfer.GenerateTestTransfers(t, db, 0, 6) for i := range trs { transfer.InsertTestTransfer(t, db, &trs[i]) } diff --git a/services/wallet/transfer/database_test.go b/services/wallet/transfer/database_test.go index ae14cdd57..1f454bf7e 100644 --- a/services/wallet/transfer/database_test.go +++ b/services/wallet/transfer/database_test.go @@ -182,7 +182,7 @@ func TestGetTransfersForIdentities(t *testing.T) { db, _, stop := setupTestDB(t) defer stop() - trs, _, _ := GenerateTestTransactions(t, db.client, 1, 4) + trs, _, _ := GenerateTestTransfers(t, db.client, 1, 4) for i := range trs { InsertTestTransfer(t, db.client, &trs[i]) } diff --git a/services/wallet/transfer/testutils.go b/services/wallet/transfer/testutils.go index 90486fa4e..3fa79fb50 100644 --- a/services/wallet/transfer/testutils.go +++ b/services/wallet/transfer/testutils.go @@ -14,34 +14,96 @@ import ( ) type TestTransaction struct { - Hash eth_common.Hash - ChainID common.ChainID - From eth_common.Address // [sender] - To eth_common.Address // [address] - FromToken string // used to detect type in transfers table - ToToken string // only used in multi_transactions table - Timestamp int64 - Value int64 - BlkNumber int64 - Success bool - MultiTransactionID MultiTransactionIDType - MultiTransactionType MultiTransactionType + Hash eth_common.Hash + ChainID common.ChainID + From eth_common.Address // [sender] + Timestamp int64 + BlkNumber int64 + Success bool + MultiTransactionID MultiTransactionIDType } -func GenerateTestTransactions(t *testing.T, db *sql.DB, firstStartIndex int, count int) (result []TestTransaction, fromAddresses, toAddresses []eth_common.Address) { +type TestTransfer struct { + TestTransaction + To eth_common.Address // [address] + Token string // used to detect type in transfers table + Value int64 +} + +type TestMultiTransaction struct { + MultiTransactionID MultiTransactionIDType + MultiTransactionType MultiTransactionType + FromAddress eth_common.Address + ToAddress eth_common.Address + FromToken string + ToToken string + FromAmount int64 + ToAmount int64 + Timestamp int64 +} + +func generateTestTransaction(seed int) TestTransaction { + return TestTransaction{ + Hash: eth_common.HexToHash(fmt.Sprintf("0x1%d", seed)), + ChainID: common.ChainID(seed), + From: eth_common.HexToAddress(fmt.Sprintf("0x2%d", seed)), + Timestamp: int64(seed), + BlkNumber: int64(seed), + Success: true, + MultiTransactionID: NoMultiTransactionID, + } +} + +func generateTestTransfer(seed int) TestTransfer { + return TestTransfer{ + TestTransaction: generateTestTransaction(seed), + Token: "", + To: eth_common.HexToAddress(fmt.Sprintf("0x3%d", seed)), + Value: int64(seed), + } +} + +func GenerateTestSendMultiTransaction(tr TestTransfer) TestMultiTransaction { + return TestMultiTransaction{ + MultiTransactionType: MultiTransactionSend, + FromAddress: tr.From, + ToAddress: tr.To, + FromToken: tr.Token, + ToToken: tr.Token, + FromAmount: tr.Value, + Timestamp: tr.Timestamp, + } +} + +func GenerateTestSwapMultiTransaction(tr TestTransfer, toToken string, toAmount int64) TestMultiTransaction { + return TestMultiTransaction{ + MultiTransactionType: MultiTransactionSwap, + FromAddress: tr.From, + ToAddress: tr.To, + FromToken: tr.Token, + ToToken: toToken, + FromAmount: tr.Value, + ToAmount: toAmount, + Timestamp: tr.Timestamp, + } +} + +func GenerateTestBridgeMultiTransaction(fromTr, toTr TestTransfer) TestMultiTransaction { + return TestMultiTransaction{ + MultiTransactionType: MultiTransactionBridge, + FromAddress: fromTr.From, + ToAddress: toTr.To, + FromToken: fromTr.Token, + ToToken: toTr.Token, + FromAmount: fromTr.Value, + ToAmount: toTr.Value, + Timestamp: fromTr.Timestamp, + } +} + +func GenerateTestTransfers(t *testing.T, db *sql.DB, firstStartIndex int, count int) (result []TestTransfer, fromAddresses, toAddresses []eth_common.Address) { for i := firstStartIndex; i < (firstStartIndex + count); i++ { - tr := TestTransaction{ - Hash: eth_common.HexToHash(fmt.Sprintf("0x1%d", i)), - ChainID: common.ChainID(i), - From: eth_common.HexToAddress(fmt.Sprintf("0x2%d", i)), - To: eth_common.HexToAddress(fmt.Sprintf("0x3%d", i)), - Timestamp: int64(i), - Value: int64(i), - BlkNumber: int64(i), - Success: true, - MultiTransactionID: NoMultiTransactionID, - MultiTransactionType: MultiTransactionSend, - } + tr := generateTestTransfer(i) fromAddresses = append(fromAddresses, tr.From) toAddresses = append(toAddresses, tr.To) result = append(result, tr) @@ -49,10 +111,10 @@ func GenerateTestTransactions(t *testing.T, db *sql.DB, firstStartIndex int, cou return } -func InsertTestTransfer(t *testing.T, db *sql.DB, tr *TestTransaction) { +func InsertTestTransfer(t *testing.T, db *sql.DB, tr *TestTransfer) { // Respect `FOREIGN KEY(network_id,address,blk_hash)` of `transfers` table tokenType := "eth" - if tr.FromToken != "" && strings.ToUpper(tr.FromToken) != testutils.EthSymbol { + if tr.Token != "" && strings.ToUpper(tr.Token) != testutils.EthSymbol { tokenType = "erc20" } blkHash := eth_common.HexToHash("4") @@ -69,7 +131,7 @@ func InsertTestTransfer(t *testing.T, db *sql.DB, tr *TestTransaction) { require.NoError(t, err) } -func InsertTestPendingTransaction(t *testing.T, db *sql.DB, tr *TestTransaction) { +func InsertTestPendingTransaction(t *testing.T, db *sql.DB, tr *TestTransfer) { _, err := db.Exec(` INSERT INTO pending_transactions (network_id, hash, timestamp, from_address, to_address, symbol, gas_price, gas_limit, value, data, type, additional_data, multi_transaction_id @@ -78,7 +140,7 @@ func InsertTestPendingTransaction(t *testing.T, db *sql.DB, tr *TestTransaction) require.NoError(t, err) } -func InsertTestMultiTransaction(t *testing.T, db *sql.DB, tr *TestTransaction) MultiTransactionIDType { +func InsertTestMultiTransaction(t *testing.T, db *sql.DB, tr *TestMultiTransaction) MultiTransactionIDType { fromTokenType := tr.FromToken if tr.FromToken == "" { fromTokenType = testutils.EthSymbol @@ -88,11 +150,12 @@ func InsertTestMultiTransaction(t *testing.T, db *sql.DB, tr *TestTransaction) M toTokenType = testutils.EthSymbol } result, err := db.Exec(` - INSERT INTO multi_transactions (from_address, from_asset, from_amount, to_address, to_asset, type, timestamp - ) VALUES (?, ?, 0, ?, ?, ?, ?)`, - tr.From, fromTokenType, tr.To, toTokenType, tr.MultiTransactionType, tr.Timestamp) + INSERT INTO multi_transactions (from_address, from_asset, from_amount, to_address, to_asset, to_amount, type, timestamp + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, + tr.FromAddress, fromTokenType, tr.FromAmount, tr.ToAddress, toTokenType, tr.ToAmount, tr.MultiTransactionType, tr.Timestamp) require.NoError(t, err) rowID, err := result.LastInsertId() require.NoError(t, err) - return MultiTransactionIDType(rowID) + tr.MultiTransactionID = MultiTransactionIDType(rowID) + return tr.MultiTransactionID }