getTransactions.js 4.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import axios from "axios";
  2. import {getTransfers} from "./getTransfers.js";
  3. async function fetchTransactions(url, Json_data, headers) {
  4. const response = await axios.post(url, Json_data, {headers: headers});
  5. let transactions = [];
  6. response.data.data['transactions']['edges'].forEach((item) => {
  7. const {
  8. actual_fee_display,
  9. initiator_address,
  10. initiator_identifier,
  11. nonce,
  12. timestamp,
  13. transaction_hash,
  14. } = item['node'];
  15. transactions.push({
  16. actual_fee_display,
  17. initiator_address,
  18. initiator_identifier,
  19. nonce,
  20. timestamp,
  21. transaction_hash,
  22. transfers: []
  23. })
  24. });
  25. return {
  26. transactions: transactions,
  27. hasNextPage: response.data.data['transactions']['pageInfo']['hasNextPage'],
  28. endCursor: response.data.data['transactions']['pageInfo']['endCursor'],
  29. }
  30. }
  31. export default async function getTransactions(address) {
  32. const url = "https://starkscan.stellate.sh/";
  33. const headers = {
  34. 'authority': 'starkscan.stellate.sh',
  35. 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
  36. }
  37. const Json_data = {
  38. 'query': 'query TransactionsTableQuery(\n $first: Int!\n $after: String\n $input: TransactionsInput!\n) {\n ...TransactionsTablePaginationFragment_transactions_2DAjA4\n}\n\nfragment TransactionsTableExpandedItemFragment_transaction on Transaction {\n entry_point_selector_name\n calldata_decoded\n entry_point_selector\n calldata\n initiator_address\n initiator_identifier\n actual_fee\n actual_fee_display\n main_calls {\n selector\n selector_name\n calldata_decoded\n selector_identifier\n calldata\n contract_address\n contract_identifier\n id\n }\n}\n\nfragment TransactionsTablePaginationFragment_transactions_2DAjA4 on Query {\n transactions(first: $first, after: $after, input: $input) {\n edges {\n node {\n id\n ...TransactionsTableRowFragment_transaction\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n}\n\nfragment TransactionsTableRowFragment_transaction on Transaction {\n id\n transaction_hash\n block_number\n transaction_status\n transaction_type\n timestamp\n nonce\n contract_address\n contract_identifier\n sender_address\n sender_identifier\n initiator_address\n initiator_identifier\n initiator {\n is_social_verified\n id\n }\n main_calls {\n selector_identifier\n id\n }\n ...TransactionsTableExpandedItemFragment_transaction\n}\n',
  39. 'variables': {
  40. 'first': 100,
  41. 'after': null,
  42. 'input': {
  43. 'initiator_address': address,
  44. 'sort_by': 'timestamp',
  45. 'order_by': 'desc',
  46. 'min_block_number': null,
  47. 'max_block_number': null,
  48. 'min_timestamp': null,
  49. 'max_timestamp': null
  50. }
  51. }
  52. };
  53. let allTransactions = [];
  54. let results = await fetchTransactions(url, Json_data, headers);
  55. allTransactions.push(...results.transactions);
  56. while (results.hasNextPage) {
  57. Json_data['variables']['after'] = results.endCursor;
  58. results = await fetchTransactions(url, Json_data, headers);
  59. allTransactions.push(...results.transactions);
  60. }
  61. const transfers = await getTransfers(address)
  62. transfers.forEach((transfer) => {
  63. allTransactions.forEach((transaction) => {
  64. if (transfer['transaction_hash'] === transaction['transaction_hash']) {
  65. transaction['transfers'].push(transfer)
  66. }
  67. })
  68. })
  69. // const localTransactions = JSON.parse(localStorage.getItem('stark_transactions'));
  70. // if (localTransactions === null) {
  71. // localStorage.setItem('stark_transactions', JSON.stringify([{
  72. // address: address,
  73. // transactions: allTransactions
  74. // }]))
  75. // return allTransactions;
  76. // } else {
  77. // const index = localTransactions.findIndex((item) => item.address === address);
  78. // if (index === -1) {
  79. // localTransactions.push({
  80. // address: address,
  81. // transactions: allTransactions
  82. // })
  83. // } else {
  84. // localTransactions[index].transactions = allTransactions;
  85. // }
  86. // localStorage.setItem('stark_transactions', JSON.stringify(localTransactions));
  87. // }
  88. return {transfers, transactions: allTransactions}
  89. }