Prechádzať zdrojové kódy

(running):根据dune获取token swap记录 分析hold类型

windowdog 1 mesiac pred
rodič
commit
8e51009d75
100 zmenil súbory, kde vykonal 1104 pridanie a 475 odobranie
  1. 31 0
      src/code/for_dune_handle_trade_source.py
  2. 0 131
      src/code/new_8002_add_get_getdalao_activites_number.py
  3. 0 171
      src/code/new_8002_get_transfer_info_bysolscan_playwright.py
  4. 0 99
      src/code/new_8004_merge_depth.py
  5. 25 16
      src/code/tamper_Dune_get_history_token_holders.js
  6. 179 0
      src/code/tamper_Dune_get_tokenswap_count.js
  7. 177 0
      src/code/tamper_Dune_get_tokenswap_row_special_add.js
  8. 177 0
      src/code/tamper_Dune_get_tokenswap_row_special_time.js
  9. 12 9
      src/code/test_my_find_zhuangjia/new_8002_add_get_getdalao_activites_number.py
  10. 41 10
      src/code/test_my_find_zhuangjia/new_8002_get_transfer_info_bysolscan_playwright.py
  11. 14 8
      src/code/test_my_find_zhuangjia/new_8003_handle_sol_transfer_depth.py
  12. 174 0
      src/code/test_my_find_zhuangjia/new_8003_handle_special_token_transfer_depth.py
  13. 33 19
      src/code/test_my_find_zhuangjia/new_8004_merge_depth.py
  14. 0 8
      src/library/aaa.py
  15. 8 0
      src/library/analysis_token/笔记.md
  16. 30 0
      src/library/dune_分析.md
  17. 0 4
      src/library/graph.csv
  18. 130 0
      src/library/sql.sql
  19. 0 0
      src/library/分析.md
  20. 73 0
      src/library/学习记录_杂.md
  21. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/.~sec_sol_transfer_depth_01.xlsx
  22. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/counts_sol_transfer_depth_01.xlsx
  23. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/endaddress_sol_transfer_depth_01.xlsx
  24. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_128StzFht2ALnHGTZN2CKdSwT7qav1T1mwLN1hUSwhFu.xlsx
  25. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_1NB7g5Ysgn91aHKiWqhKJzSqygqEkyKiu1eWVKVeP9Z.xlsx
  26. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2Gj1xmqgxyFHuFxA6FHLcwYPHkqsdGf2H9bdtpYFxgzn.xlsx
  27. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2GjViMLQBVX2F7F1xGwuxYUkYtPnJ4qusjxhX95DG7xQ.xlsx
  28. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2TvYDht6fQ9WencbkdHo5zisdWU6z4EDvvTjdVekmqSJ.xlsx
  29. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2cMTx28rcNVTmSJvzvZLEWaNg1SKsKyL3Yz6tpkJc9mn.xlsx
  30. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2dVcvshsWeRXAMoy7h2Ae1V5sNS6qcdLF5APMo9UZ6CR.xlsx
  31. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2oLAt5nHoM8jrfFqqDvYcehXgn9oPkySCJsA1TALRWAN.xlsx
  32. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2yt4c1KDiWDzz62aj6jSjHVpzd1WzAYvuAjqDPqKLLFR.xlsx
  33. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_367CqCGUSBhrpfhBoXxCKjbXBNP5aMFoyVHd1vQ5eHc8.xlsx
  34. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3GH5GyVqRRdJZggekBrPLssHbW3Qg9Y1Dgsz8KG1hs1S.xlsx
  35. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3PDgR3Ti6DJ4FRUxt9BGHvdxKjFdNMfkPm1duPaH6wH3.xlsx
  36. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3RQzC86faRYAgHjWx3jnfbt8PfwM6cLLD81d73LinwBi.xlsx
  37. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3ZfGsZtPW4z1VD9iD4tDrkocTGC2LjXMtZYHn3szTaf6.xlsx
  38. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3gAJAMY5fRD4QymyHPik9db5FpRADBV1cJ7uzfpiVyDk.xlsx
  39. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3tApYF7oDnXuu5oDrjXrYQHF2jo4ED4MRx4RjNxdEnKD.xlsx
  40. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3vjvHYUVdaTDwaDxJJPM5d2ki3tLwKobMdPAMWmfDrE5.xlsx
  41. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_41Dkni5dyHranPKq8p9fTwQ7hy8dPPnR9iwMBmyM5sDj.xlsx
  42. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_41x6KhvrSbmf1285YUqHvQpc9BtYNek5A4xJ3sdbg4yL.xlsx
  43. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_49wTvcmWH1rZmMxMDRT5DgXTs7YATZ7WnnuyhxGEpRyT.xlsx
  44. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4LQuLeQYrAsqHtsJ3s15dT8A4Jpbr6iEKnK2DJAL7ZNo.xlsx
  45. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4XUt1qCfA11eSakcibiiiqSUK1NjH4gRNca3btYt1k3g.xlsx
  46. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4ZStjfNTvTDHGsBGqQLTfXvtALMHwnfpUEdbnRmgbPVm.xlsx
  47. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4bCghpnzid8MSw3KV4A449zqeFuKxL59f4rvKMAT3pLB.xlsx
  48. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4g6MzgJ31eHwTgUWUrVAEkmcVZ5HYnKDurHq8Qa4ximt.xlsx
  49. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4jK8T5BnkNWEZWHukJ4e3NSDVDa7MmAMr9Vw6xp6PJer.xlsx
  50. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4kBAKyY6wYgqHsWTUnanQCtqu8qCc5Ln2b4f4ubQqtbq.xlsx
  51. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_58YHxodnzZKxVBE5EsATs38ywEFV7M8ijjBoBkYAJY8J.xlsx
  52. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5E7G5aiJcsNa6euqxEXgZdwGM3fu9sAVpqY8S5Hz2ETY.xlsx
  53. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5FZ6h28UnFkZ43PRFvMcwSE9kcdT4YNmcxvqdpHe6MuW.xlsx
  54. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5HKmPLjiFy7RqfWKCrrSGPvoXQnXfnBahRya8c13FgHd.xlsx
  55. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5KepH8US17rotNGJfZFpPRZShERGJnKwDieVxgeEH6vr.xlsx
  56. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5N3mvHw9ZiZ78vQFcMrZ4dT9tQ98SSsE5dJQeqciV7Km.xlsx
  57. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5ci8DDNfyBhcrV7aqbNRRwQRNSGeZMrtt5xvj79TQMqw.xlsx
  58. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5d2PUxoqCcRSThzgtHx8gEH3zeqZsWbAEpzaM5zmGFF5.xlsx
  59. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5d9b1VxTz34nKuWaLAQ4oTzo9rrNLVxWycjds4pGBmfr.xlsx
  60. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5eftcUwY3GHQ8gtJ7h4sfodfj1Lwo94bDGVmavKGyNMy.xlsx
  61. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_62GvRgevD9g93xoyV8SjFL5VKF2h7YhCvJWiLzfNm8uC.xlsx
  62. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_6F46dF6X3rAaXVVGJf9nc3Paikkx9X8WXKwuPGAjSpRN.xlsx
  63. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_6Rfe9s46Y7VByLjsGg2h8SXvSsAh6ScM3PBm4joxLuGD.xlsx
  64. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_6iXMRCCBuXDNP2sEKERdqYwJn8BzLjH55NCu2RcsYg2Z.xlsx
  65. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_6u7AwDsnuvrpmkZGvTdcvnYBuCKM8meMXpkQfbfj1fbK.xlsx
  66. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_71miLUAUhRmLtahde3e79XzG3yLQGDkw3vkJhRrr1WBq.xlsx
  67. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_7EkECtKSZFTyWNa77xPPQ52Jm6or5612SUhBtFiQto3v.xlsx
  68. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_7jVioPMErQMbCmbM1Hx8cXzecoc1jH9ZyvAJLKPTs9M6.xlsx
  69. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_7vQ49m5dsgfKPBSwUzE3epRYjD3DLXEXXLEnrn1bD3ac.xlsx
  70. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_836one7goxia2TnreSzvoNArsq5juCjDtY3eqtfyLNsJ.xlsx
  71. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_88ux1j5Dmv9QrtBLxCVie5marpNv6iuocHjeUQs297ki.xlsx
  72. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_8D4bknJuKUH1LgxAXLAJ9ZcQz2Grfd2uyF37QpmQgyWc.xlsx
  73. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_8cy6GzSnnY967otEFMPhkpUKKqaqHb1LMGSNnQvwvBUr.xlsx
  74. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_8uHN6nXjEVR6rNvBRHH465QpLmAyqA3RSwsHCzK46uBn.xlsx
  75. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_8yBgWwLK6JBKVVpqtAxnjcf75qRPNBiHH85wruwp6rin.xlsx
  76. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_93V5ykGu4KChd47d365AT2dQvAM8vTnH9o4ruWZZuqLQ.xlsx
  77. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_95GgGqZx9EjHrpcARw8k51KPKjJ9HsdQPq2j7HmPNoSn.xlsx
  78. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_95Prc5fdD2nxo35nNdxLxiEENwEfegHRAi6aGjWNaUvb.xlsx
  79. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9LB364wgGh3Mc57Mvg9Vi2gzLFjc7sJBUkRgQ5sBfaej.xlsx
  80. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9R4gSQNZPbEiJMKm12fVAh7pVKPBXjbiojHxHeUSe14b.xlsx
  81. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9U2nDnZEHADzrJHzzBVU3eJQKmf1tQ3pWh7zCKKyj18s.xlsx
  82. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9Yjr9BhdFthLzQMW4kY7j6rcDKXC3Wvj74p7bCsFVyyJ.xlsx
  83. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9gpss8bMuEA5jfunfL3eCDJNZ5fpc3vY2phWFKpr1YwR.xlsx
  84. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9kTx1no1d1C81N8zFT6ck4S5zvKsgpbbLEUf5KZJeC32.xlsx
  85. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9p4LXuXDsY6Ec168bdLM8vL5PwYrfpNcoHYg3cifz97F.xlsx
  86. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9qM7zMGMWAUEb1NpT2moEhCJpSENs6gJpudoQ1zhXvVT.xlsx
  87. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9zcddzV4MZR41c4CHMcyy7t8z8o8kTbGst3xi3rrbnkZ.xlsx
  88. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9zckZP4aqjo8kqLJu2uaig8pZ7yDNmfTBKmjc86F4wfq.xlsx
  89. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_AFcXNrFiQehbJxFePzabUBKeyvF2kVhKjkYXiS5EtcoK.xlsx
  90. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_AasoHP85u95AygsQcUb4xF4eHzbwL8dCWMi2b6yoUSFu.xlsx
  91. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_AgPsPtpAiQqMtcmSsGEGvje1dXTco3NGi1gAF7gvYC7L.xlsx
  92. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_Ak2TDudVcE9hGQC6hzKnEqDAQzQ2ypGXU5FMyFPf8YAu.xlsx
  93. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_Au3Q9LTYRQuEDL93vksznXuc6KqxxSTd7Zb48Fz4X8XR.xlsx
  94. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BAgn8NWpFqkXHkGeztqJU69rq3f5ngzX97f793K1BKmG.xlsx
  95. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BBjXNAHiim3QMALgBhHjDkXNVhNwE9FAsC8SN1ePayeq.xlsx
  96. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BHzdUWA2yZ3nDFhwbdXPtho4n1gZJLSFpbTd78B9inRe.xlsx
  97. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BJmzvYR3N1TtJPmuGMA9Hc1JCcEXBiGbVVRZJKPjT8WK.xlsx
  98. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BN1N6fmvPx79At26CMhuS9PPNKGnArQjShHQzyzvkaSh.xlsx
  99. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BNBx8JBvxrmM699C92bZQ7VKngdfcdudFcQrH7oLnFvw.xlsx
  100. BIN
      src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BXvEmdFHrSCDE1DYg47U1SgW6juGtSHfx32ijpM5oq23.xlsx

+ 31 - 0
src/code/for_dune_handle_trade_source.py

@@ -0,0 +1,31 @@
+import sys
+import  pandas as pd
+
+obj_program ={
+
+    "routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS":"ray_amm",
+    "6m2CDdhRgxpH4WjvdzxAYbGxwdGUz5MziiL5jek2kBma":"OKX_v2",
+    "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4":"Jupiter_v6",
+   "BANANAjs7FJiPQqJTGFzkZJndT9o7UmKiYYGaJz6frGu": "Banana_Gun",
+
+
+}
+def main():
+    # Check if a file name is provided as an argument
+    if len(sys.argv)!= 2:
+        print("Usage: python script.py <filename>")
+        sys.exit(1)
+
+    # Get the file name from the command line argument
+    filename = sys.argv[1]
+    df = pd.read_csv(filename , dtype=object)
+    df["trade_source"] = df["trade_source"].map(obj_program).fillna(df["trade_source"])
+    df.to_csv(f"new_{filename}" , index=False )
+
+
+    # Process the file here
+    print(f"Processing file: {filename}")
+    # Add your file processing logic here
+
+if __name__ == "__main__":
+    main()

+ 0 - 131
src/code/new_8002_add_get_getdalao_activites_number.py

@@ -1,131 +0,0 @@
-
-# from datetime import datetime, timezone
-# from playwright.async_api import async_playwright, Playwright
-# from playwright.sync_api import expect
-from playwright.async_api import Playwright, async_playwright, expect
-import random
-
-from base_class import BaseVariableFunction
-from base_class import *
-baseclass = BaseVariableFunction(__file__)
-
-baseclass.makedirpath(baseclass.browsercookie_path)
-baseclass.makedirpath(baseclass.dalao_solscan_info_path)
-old_print = print
-
-
-def timestamped_print(*args, **kwargs):
-    old_print(datetime.datetime.utcnow().replace(
-        microsecond=0), *args, **kwargs)
-
-
-print = timestamped_print
-print('\n'*5)
-print(f"{'{:<6}'.format('ENTER')} {baseclass.scriptfilename} ----------------NOTE-----------NOTE---------------")
- 
-
-async def do_some_thing(playwright,   arr_url_dalao , url_type):
-
-    # browser =  playwright.chromium.launch(headless=True)
-    context = await playwright.firefox.launch_persistent_context(user_data_dir=USER_DIR_PATH, accept_downloads=True, headless=False)
-    # context = browser.new_context()
-    context.set_default_timeout(19000)
-    # context = await browser.new_context()
-    arr_page = [None]*2
-    arr_page[0] = await context .new_page()
-    await arr_page[0].goto(
-        "https://solscan.io/")
-    await asyncio.sleep(30)
-
-    # print(context.pages)
-
-    for idx_url in range(0, len(arr_url_dalao)):
-
-        str_dalaoTransferUrl = arr_url_dalao[idx_url]
-        str_dalaoaddress =obj_url_2_dalao[str_dalaoTransferUrl]
-        
-        print(f"enter str_dalaoaddress= {str_dalaoaddress}")
-        print(f"enter str_dalaoTransferUrl= {str_dalaoTransferUrl}")
-        print(f"cur_arr_str_dalaoaddress remainder = {len(arr_url_dalao)-idx_url}")
-        arr_page[1] = await context.new_page()
-        page = arr_page[1]
-        await asyncio.sleep(3)
-
-        # tbody_ = page.locator(
-        #     'table.w-full tbody')
-        await page.wait_for_selector('#account-tabs',timeout=15000)
-        await page.wait_for_selector('#account-tabs iv.flex.flex-col.gap-4.items-stretch.justify-start',timeout=15000)
-        arr_div =await page.locator("#account-tabs div.flex.flex-col.gap-4.items-stretch.justify-start div.flex.gap-1.flex-row.items-center.justify-start.flex-wrap").all()
-        # await asyncio.sleep(3)
-        str_tx_info =(await arr_div[0].text_content().strip())
-        #arr_tds = await last_tr.locator('td').all()
-        # p_token_last_active =  arr_tds[0].locator("p")
-        # str_token_last_active =( await p_token_last_active.text_content()).strip()
-
-        print(str_tx_info)
- 
- 
-
-
-        time.sleep(1)
-        await page.close()
-
-    await context.close()
-
-
-async def get_onedriver_swapactivities( arr_url_dalao , url_type):
-    async with async_playwright() as playwright:
-
-        await do_some_thing(playwright, arr_url_dalao, url_type)
-
-
-async def main():
-    print("enter main()")
-    if len(arr_dalao_url)>0:
-        await get_onedriver_swapactivities(
-            arr_url_dalao = arr_dalao_url , url_type = "transfer_counts")
-        await asyncio.sleep(3)
-        
-    # if len(arr_dalao_token_inflow_transfer_url)>0:
-    #     await get_onedriver_swapactivities(
-    #         arr_url_dalao = arr_dalao_token_inflow_transfer_url , url_type = "swap_counts")
-    #     await asyncio.sleep(3)
- 
-
-
-df = pd.read_excel(baseclass.dalao_tran_gmgnOrdex_path /
-                 "input_dalao.xlsx", dtype=object)
-
-arr_str_dalaoaddress = df['dalaoaddress'].tolist()
-arr_str_dalaoaddress=arr_str_dalaoaddress[0:4]
-# arr_dalao_sol_transfer_url =[]
-arr_dalao_url = []
-arr_dalao_swap = []
-obj_url_2_dalao={
-    
-}
-def init():
-    now_time = time.time()
-    global obj_url_2_dalao
-    global arr_dalao_sol_transfer_url ,arr_dalao_token_inflow_transfer_url ,arr_dalao_token_outflow_transfer_url , arr_dalao_usdc_transfer_url
-    for str_dalaoaddress in arr_str_dalaoaddress:
-        # file = baseclass.dalao_solscan_info_path / f"ori_txhash_{str_dalaoaddress}.csv"
-        dalao_transfer_counts_file = baseclass.dalao_solscan_info_path / f"dalao_transfer_counts.json"
-        # token_inflow_transfer_file = baseclass.dalao_solscan_info_path / f"token_inflow_{str_dalaoaddress}.csv"
-   
-        url_transfer = f"https://solscan.io/account/{str_dalaoaddress}"  
-        # url_transfer = f"https://solscan.io/account/{str_dalaoaddress}#transfers"  
-        url_swap = f"https://solscan.io/account/{str_dalaoaddress}#defiactivities"     
-        arr_dalao_url.append(url_transfer)
-        obj_url_2_dalao[url_transfer] = str_dalaoaddress
-        
- 
-            
-
-
-init()
- 
-downloads_path = baseclass.dalao_solscan_info_path
-USER_DIR_PATH = baseclass.browsercookie_path
-asyncio.run(main())
-print(f"{'{:<6}'.format('END')} {baseclass.scriptfilename} ----------------NOTE-----------NOTE---------------")

+ 0 - 171
src/code/new_8002_get_transfer_info_bysolscan_playwright.py

@@ -1,171 +0,0 @@
-
-# from datetime import datetime, timezone
-# from playwright.async_api import async_playwright, Playwright
-# from playwright.sync_api import expect
-from playwright.async_api import Playwright, async_playwright, expect
-import random
-
-from base_class import BaseVariableFunction
-from base_class import *
-baseclass = BaseVariableFunction(__file__)
-
-baseclass.makedirpath(baseclass.browsercookie_path)
-baseclass.makedirpath(baseclass.dalao_solscan_info_path)
-old_print = print
-
-
-def timestamped_print(*args, **kwargs):
-    old_print(datetime.datetime.utcnow().replace(
-        microsecond=0), *args, **kwargs)
-
-
-print = timestamped_print
-print('\n'*5)
-print(f"{'{:<6}'.format('ENTER')} {baseclass.scriptfilename} ----------------NOTE-----------NOTE---------------")
- 
-
-async def do_some_thing(playwright,   arr_url_dalao , url_type):
-
-    # browser =  playwright.chromium.launch(headless=True)
-    context = await playwright.firefox.launch_persistent_context(user_data_dir=USER_DIR_PATH, accept_downloads=True, headless=False)
-    # context = browser.new_context()
-    context.set_default_timeout(19000)
-    # context = await browser.new_context()
-    arr_page = [None]*2
-    arr_page[0] = await context .new_page()
-    await arr_page[0].goto(
-        "https://solscan.io/")
-
-    # print(context.pages)
-
-    for idx_url in range(0, len(arr_url_dalao)):
-
-        str_dalaoTransferUrl = arr_url_dalao[idx_url]
-        str_dalaoaddress =obj_url_2_dalao[str_dalaoTransferUrl]
-        
-        print(f"enter str_dalaoaddress= {str_dalaoaddress}")
-        print(f"enter str_dalaoTransferUrl= {str_dalaoTransferUrl}")
-        print(f"cur_arr_str_dalaoaddress remainder = {len(arr_url_dalao)-idx_url}")
-        arr_page[1] = await context.new_page()
-        page = arr_page[1]
-
-        async with page.expect_download() as download_info:
-            try:
-                await page.goto(str_dalaoTransferUrl, timeout=0)
-            except:
-                # Wait for the download to start
-                download = await download_info.value
-                # Wait for the download process to complete
-                print(await download.path())
-                # Save downloaded file somewhere
-                await download.save_as(baseclass.dalao_solscan_info_path / f"{url_type}_{str_dalaoaddress}.csv")
-            await page.wait_for_timeout(2200)
-        time.sleep(1)
-        await page.close()
-
-    await context.close()
-
-
-async def get_onedriver_swapactivities( arr_url_dalao , url_type):
-    async with async_playwright() as playwright:
-
-        await do_some_thing(playwright, arr_url_dalao, url_type)
-
-
-async def main():
-    print("enter main()")
-    if len(arr_dalao_sol_transfer_url)>0:
-        await get_onedriver_swapactivities(
-            arr_url_dalao = arr_dalao_sol_transfer_url , url_type = "sol_transfer")
-        await asyncio.sleep(3)
-        
-    if len(arr_dalao_token_transfer_url)>0:
-        await get_onedriver_swapactivities(
-            arr_url_dalao = arr_dalao_token_transfer_url , url_type = "token_transfer")
-        await asyncio.sleep(3)
- 
- 
-    if len(arr_dalao_usdc_transfer_url)>0:
-        await get_onedriver_swapactivities(
-            arr_url_dalao = arr_dalao_usdc_transfer_url , url_type = "usdc_transfer")
-
-find_depth = "depth_01"
-df = pd.read_excel(baseclass.dalao_tran_gmgnOrdex_path /
-                 "input_dalao.xlsx", dtype=object)
-
-
-arr_str_dalaoaddress = df[f'dalao_{find_depth}'].drop_duplicates().dropna().tolist()
-arr_dalao_sol_transfer_url =[]
-arr_dalao_token_transfer_url =[]
- 
-arr_dalao_usdc_transfer_url =[]
-obj_url_2_dalao={
-    
-}
-def init():
-    now_time = time.time()
-    global obj_url_2_dalao
-    global arr_dalao_sol_transfer_url ,arr_dalao_token_transfer_url ,    arr_dalao_usdc_transfer_url
-    for str_dalaoaddress in arr_str_dalaoaddress: 
- 
-        sol_transfer_file = baseclass.dalao_solscan_info_path / f"sol_transfer_{str_dalaoaddress}.csv"
-        token_transfer_file = baseclass.dalao_solscan_info_path / f"token_transfer_{str_dalaoaddress}.csv"
-        usdc_transfer_file = baseclass.dalao_solscan_info_path / f"usdc_transfer_{str_dalaoaddress}.csv"
-        
- 
-        url_sol_transfer = f"https://api-v2.solscan.io/v2/account/transfer/export?address={str_dalaoaddress}&activity_type[]=ACTIVITY_SPL_TRANSFER&activity_type[]=ACTIVITY_SPL_MINT&amount[]=0.3&amount[]=undefined&token=So11111111111111111111111111111111111111111&exclude_amount_zero=true&remove_spam=true"    
-        # url_token_inflow_transfer = f"https://api-v2.solscan.io/v2/account/transfer/export?address={str_dalaoaddress}&activity_type[]=ACTIVITY_SPL_TRANSFER&activity_type[]=ACTIVITY_SPL_MINT&exclude_token=So11111111111111111111111111111111111111111&exclude_amount_zero=true&remove_spam=true&flow=in"
-        # url_token_outflow_transfer = f"https://api-v2.solscan.io/v2/account/transfer/export?address={str_dalaoaddress}&activity_type[]=ACTIVITY_SPL_TRANSFER&activity_type[]=ACTIVITY_SPL_MINT&exclude_token=So11111111111111111111111111111111111111111&exclude_amount_zero=true&remove_spam=true&flow=out"
-        url_token_transfer = f"https://api-v2.solscan.io/v2/account/transfer/export?address={str_dalaoaddress}&activity_type[]=ACTIVITY_SPL_TRANSFER&activity_type[]=ACTIVITY_SPL_MINT&exclude_token=So11111111111111111111111111111111111111111&exclude_amount_zero=true&remove_spam=true"
- 
-        
-        url_usdc_transfer = f"https://api-v2.solscan.io/v2/account/transfer/export?address={str_dalaoaddress}&activity_type[]=ACTIVITY_SPL_TRANSFER&activity_type[]=ACTIVITY_SPL_MINT&amount[]=100&amount[]=undefined&token=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&exclude_amount_zero=true&remove_spam=true"
-        obj_url_2_dalao[url_sol_transfer] =str_dalaoaddress
- 
-        obj_url_2_dalao[url_token_transfer] =str_dalaoaddress
-        obj_url_2_dalao[url_usdc_transfer] =str_dalaoaddress
-        
-    
-        if sol_transfer_file.exists():
-            modified_time  =  sol_transfer_file.stat().st_mtime
-            # 3 * 60 分钟内不会在获取
-            if(now_time -modified_time >12*60*60):
-                arr_dalao_sol_transfer_url.append(url_sol_transfer)
-            else:
-                pass
-        else:
-            arr_dalao_sol_transfer_url.append(url_sol_transfer)
-            
-        if token_transfer_file.exists():
-            modified_time  =  token_transfer_file.stat().st_mtime
-            # 3 * 60 分钟内不会在获取
-            if(now_time -modified_time >12*60*60):
-                arr_dalao_token_transfer_url.append(url_token_transfer)
-            else:
-                pass
-        else:
-            arr_dalao_token_transfer_url.append(url_token_transfer)
-            
- 
-        if usdc_transfer_file.exists():
-            modified_time  =  usdc_transfer_file.stat().st_mtime
-            # 3 * 60 分钟内不会在获取
-            if(now_time -modified_time >12*60*60):
-                arr_dalao_usdc_transfer_url.append(url_usdc_transfer)
-            else:
-                pass
-        else:
-            arr_dalao_usdc_transfer_url.append(url_usdc_transfer)
-            
-            
-
-
-init()
-if len(arr_dalao_sol_transfer_url) ==0 and len(arr_dalao_token_transfer_url) ==0 and  len(arr_dalao_usdc_transfer_url)==0:
-    print("dont has dalao need get")
-    exit()
-
-downloads_path = baseclass.dalao_solscan_info_path
-USER_DIR_PATH = baseclass.browsercookie_path
-asyncio.run(main())
-print(f"{'{:<6}'.format('END')} {baseclass.scriptfilename} ----------------NOTE-----------NOTE---------------")

+ 0 - 99
src/code/new_8004_merge_depth.py

@@ -1,99 +0,0 @@
-
-# from datetime import datetime, timezone
-# from playwright.async_api import async_playwright, Playwright
-# from playwright.sync_api import expect
- 
-from base_class import BaseVariableFunction
-from base_class import *
-baseclass = BaseVariableFunction(__file__)
-
-baseclass.makedirpath(baseclass.ana_dalao_relation_by_solscan_path )
-
- 
-old_print = print
-
-
-def timestamped_print(*args, **kwargs):
-    old_print(datetime.datetime.utcnow().replace(
-        microsecond=0), *args, **kwargs)
-
-
-print = timestamped_print
-print('\n'*5)
-print(f"{'{:<6}'.format('ENTER')} {baseclass.scriptfilename} ----------------NOTE-----------NOTE---------------")
-
-
-df = pd.read_excel(baseclass.dalao_tran_gmgnOrdex_path /
-                "input_dalao.xlsx", dtype=object)
-arr_str_dalaoaddress = df['dalaoaddress'].tolist()
-
-find_depth = "depth_01"
- 
-arr_str_dalaoaddress = df[f'dalao_{find_depth}'].drop_duplicates().dropna().tolist()
-
-# arr_str_dalaoaddress=arr_str_dalaoaddress[0:5]
-str_tokenaddress_dalao_source = "4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump"
- 
-
-
-def get_reladd_count(gdf):
-    gdf["reladd_count"] = len(gdf)
-    return gdf
-
-
-def main():
-    df_sol_transfer = None
-    for str_dalaoaddress in arr_str_dalaoaddress:
-        if not (baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source/find_depth/  "final"/f"final_sol_transfer_{str_dalaoaddress}.xlsx" ).exists():
-            continue
-        print(f"enter {str_dalaoaddress}")
-        cur_df_sol_transfer = pd.read_excel(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source/find_depth/"final"/ f"final_sol_transfer_{str_dalaoaddress}.xlsx",dtype=object )
-        df_sol_transfer = pd.concat([df_sol_transfer,cur_df_sol_transfer])
-    df_sol_transfer = df_sol_transfer.astype({
-
-        "timestamp":int,
-        "amount":float,
-        "is_exend":int,
-        "is_relationend":int,
-        "dalao_count":int,
-        
-    })
- 
- 
-    df_sol_transfer.to_excel(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source/find_depth/  f"fir_sol_transfer_{find_depth}.xlsx" ,index=False)
-    mask_end = ( (df_sol_transfer["is_exend"]==1 ) | (df_sol_transfer["is_relationend"]==1))  
-    end_df = df_sol_transfer[ mask_end]
-    end_df.to_excel(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source/find_depth/  f"endaddress_sol_transfer_{find_depth}.xlsx" ,index=False)
- 
-    df_sol_transfer = df_sol_transfer[ ~mask_end].reset_index(drop=True)
-
-    df_sol_transfer["reladd_count"]  = 0
-    
-
-    df_sol_transfer = df_sol_transfer.groupby(by = [ "rel_address" ],  group_keys=False).apply(lambda gdf : get_reladd_count(gdf))
-
-    df_sol_transfer = df_sol_transfer.sort_values(by=[ "dalao_count"  , "dalaoaddress" ,"timestamp"],ascending=False)
-
-    df_dalao_count = df_sol_transfer[[  "dalaoaddress", "dalao_count"  ]].drop_duplicates()
-
-    # str_tokenaddress_dalao_source
-
-    df_dalao_count=df_dalao_count.sort_values(by=["dalao_count"],ascending=False)
-    
-    df_dalao_count["scan_activites"] = df_dalao_count.apply(lambda ser : baseclass.makeurl(f"https://solscan.io/account/{ser['dalaoaddress']}#defiactivities" , f"{ser['dalaoaddress'][0:6]}") , axis=1)
- 
-    df_dalao_count["scan_token_source"] = df_dalao_count.apply(lambda ser : baseclass.makeurl(f"https://solscan.io/account/{ser['dalaoaddress']}?token_address={str_tokenaddress_dalao_source}#transfers" , f"{ser['dalaoaddress'][0:6]}") , axis=1)
- 
-
-    #  https://gmgn.ai/sol/token/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump?tab=activity&maker=58YHxodnzZKxVBE5EsATs38ywEFV7M8ijjBoBkYAJY8J
-
-
-    
-    df_dalao_count.to_excel(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source/find_depth/  f"counts_sol_transfer_{find_depth}.xlsx" ,index=False)
-    df_sol_transfer.to_excel(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source/find_depth/  f"sec_sol_transfer_{find_depth}.xlsx" ,index=False)
-     
-
-
-    return
-
-main()

+ 25 - 16
src/code/tamper_test_dune.js → src/code/tamper_Dune_get_history_token_holders.js

@@ -1,5 +1,5 @@
 // ==UserScript==
-// @name         Dune-Get_history_token_holders
+// @name         Dune_get_history_token_holders
 // @namespace    http://tampermonkey.net/
 // @version      2024-11-09
 // @description  try to take over the world!
@@ -36,11 +36,11 @@ function sleep(sleepdelay) {
 }
 function getCurrentTime() {
   const zeroFill = (i) => {
-      if (i >= 0 && i <= 9) {
-          return "0" + i;
-      } else {
-          return '' + i;
-      }
+    if (i >= 0 && i <= 9) {
+      return "0" + i;
+    } else {
+      return '' + i;
+    }
 
   }
   let date = new Date();//当前时间
@@ -101,7 +101,9 @@ async function get_tbody_data() {
 }
 
 
+
 async function clickButton_get_data() {
+  res_data_get_dune_data = [];
 
   await get_thead_data();
   let ul_table_footer__Ky_k2 = document.querySelector('div.visual_vizFooter__vCe59').querySelector("ul.table_footer__Ky_k2");
@@ -114,31 +116,38 @@ async function clickButton_get_data() {
   // console.log("first= ", res_data_get_dune_data);
 
   for (let cur_page = 1; cur_page <= page_count; cur_page++) {
-    console.log('cur_page=',cur_page)
+    console.log('cur_page=', cur_page);
+    while (true) {
+
+      try {
+        await get_tbody_data();
+        break;
+      } catch (e) {
+
+        await sleep(3000);
+      }
 
-    await get_tbody_data();
+    }
     let button_next = arr_ul_children[5].querySelector("button");
     button_next.click();
-    await sleep(3000);
-
+    await sleep(1500);
 
   }
   res_data_get_dune_data.forEach((val, index, arr) => { arr[index] = val.join() + "\n" });
-  res_data_get_dune_data= res_data_get_dune_data.join('')
+  res_data_get_dune_data = res_data_get_dune_data.join('')
   let curTime = getCurrentTime();
- 
-  let query_id = window.location.pathname.slice(1).split('/').pop();
 
-  funcDownload(   res_data_get_dune_data, `dune_get_history_token_holders_${query_id}.csv`  );
+  let query_id = window.location.pathname.slice(1).split('/').pop();
 
-  // funcDownload((res_data_get_dune_data), "dune_data.csv");
+  funcDownload(res_data_get_dune_data, `${page_name}_${query_id}.csv`);
 
 
 }
 
 
-var res_data_get_dune_data = [];
 
+var res_data_get_dune_data = [];
+var page_name = 'dune_get_history_token_holders';
 
 (async function () {
   console.log("enter load");

+ 179 - 0
src/code/tamper_Dune_get_tokenswap_count.js

@@ -0,0 +1,179 @@
+// ==UserScript==
+// @name         Dune_get_tokenswap_count
+// @namespace    http://tampermonkey.net/
+// @version      2024-11-09
+// @description  try to take over the world!
+// @author       You
+// @match        https://dune.com/queries/4293099
+// @icon         https://www.google.com/s2/favicons?sz=64&domain=dune.com
+// @grant        none
+// ==/UserScript==
+
+
+function funcDownload(content, filename) {
+  console.log('begin download');
+  // 创建隐藏的可下载链接
+  var eleLink = document.createElement('a');
+  eleLink.download = filename;
+  eleLink.style.display = 'none';
+  // 字符内容转变成blob地址
+  var blob = new Blob([content]);
+  eleLink.href = URL.createObjectURL(blob);
+  // 触发点击
+  document.body.appendChild(eleLink);
+  eleLink.click();
+  // 然后移除
+  document.body.removeChild(eleLink);
+}
+
+
+function sleep(sleepdelay) {
+  return new Promise((resolve, reject) => {
+    setTimeout(() => {
+      resolve(sleepdelay);
+    }, sleepdelay);
+  })
+}
+function getCurrentTime() {
+  const zeroFill = (i) => {
+    if (i >= 0 && i <= 9) {
+      return "0" + i;
+    } else {
+      return '' + i;
+    }
+
+  }
+  let date = new Date();//当前时间
+  let year = date.getFullYear();
+  let month = zeroFill(date.getMonth() + 1);//月
+  let day = zeroFill(date.getDate());//日
+  let hour = zeroFill(date.getHours());//时
+  let minute = zeroFill(date.getMinutes());//分
+  let second = zeroFill(date.getSeconds());//秒
+
+  //当前时间
+  var curTime = year + month + day + '_' + hour + minute + second;
+  return curTime;
+}
+
+async function get_thead_data() {
+  let table = document.querySelectorAll('table.table_table__FDV2P')[0];
+  // Get the <thead> element
+  let thead = table.querySelector('thead');
+  let tr_of_thead = thead.querySelectorAll('tr')[0];
+
+  let row_th = []
+  let arr_td = tr_of_thead.querySelectorAll('th');
+  for (let idx_th = 0; idx_th < arr_td.length; idx_th++) {
+    let td = arr_td[idx_th];
+    // console.log(td.innerText);
+    row_th.push(td.innerText);
+  }
+  res_data_get_dune_data.push(row_th);
+
+
+}
+
+async function get_tbody_data() {
+
+  // Get the table element
+  let table = document.querySelector('table.table_table__FDV2P');
+
+  // Get the <tbody> element
+  let tbody = table.querySelector('tbody');
+  // Get all <tr> elements in <tbody>
+  let tbodyTrs = tbody.querySelectorAll('tr');
+
+  // Traverse the <tr> elements in <tbody> and get the data
+  for (let i = 0; i < tbodyTrs.length; i++) {
+    let tr = tbodyTrs[i];
+    let row_tr = []
+    let arr_td = tr.querySelectorAll('td');
+    for (let idx_td = 0; idx_td < arr_td.length; idx_td++) {
+      let td = arr_td[idx_td];
+      // console.log(td.innerText);
+
+      row_tr.push(td.innerText.split(",")[0])
+    }
+    res_data_get_dune_data.push(row_tr);
+  }
+
+}
+
+
+
+async function clickButton_get_data() {
+  res_data_get_dune_data = [];
+
+  await get_thead_data();
+  let ul_table_footer__Ky_k2 = document.querySelector('div.visual_vizFooter__vCe59').querySelector("ul.table_footer__Ky_k2");
+
+  let arr_ul_children = ul_table_footer__Ky_k2.children;
+  let page_count = arr_ul_children[4].querySelectorAll("option").length;
+
+  // 获取 页数 并且不断next 页
+
+  // console.log("first= ", res_data_get_dune_data);
+
+  for (let cur_page = 1; cur_page <= page_count; cur_page++) {
+    console.log('cur_page=', cur_page);
+    while (true) {
+
+      try {
+        await get_tbody_data();
+        break;
+      } catch (e) {
+
+        await sleep(3000);
+      }
+
+    }
+    let button_next = arr_ul_children[5].querySelector("button");
+    button_next.click();
+    await sleep(1500);
+
+  }
+  res_data_get_dune_data.forEach((val, index, arr) => { arr[index] = val.join() + "\n" });
+  res_data_get_dune_data = res_data_get_dune_data.join('')
+  let curTime = getCurrentTime();
+
+  let query_id = window.location.pathname.slice(1).split('/').pop();
+
+  funcDownload(res_data_get_dune_data, `${page_name}_${query_id}.csv`);
+
+
+}
+
+
+var res_data_get_dune_data = [];
+
+var page_name = 'dune_get_tokenswap_count';
+(async function () {
+  console.log("enter load");
+  await sleep(6000);
+  console.log("create button");
+
+  var mydivbox = document.createElement("div");
+
+  var button_ = document.createElement("button");//创建 获取 holders 一个按钮
+  button_.className = "tam-mybutton-getdata"
+  button_.textContent = "getdata"; //按钮内容
+  button_.style.width = "90px"; //按钮宽度
+  button_.style.height = "30px"; //按钮高度
+  button_.style.align = "center"; //文本居中
+  button_.style.color = "blue"; //按钮文字颜色
+  button_.style.background = "#045710"; //按钮底色
+  button_.style.border = "1px solid #045710"; //边框属性
+
+  mydivbox.appendChild(button_);
+
+  mydivbox.style.position = "fixed";
+  mydivbox.style.top = "180px";
+  mydivbox.style.right = "40px";
+  document.body.appendChild(mydivbox);
+
+  button_.addEventListener("click", clickButton_get_data); //监听按钮点击事件
+
+
+
+})();

+ 177 - 0
src/code/tamper_Dune_get_tokenswap_row_special_add.js

@@ -0,0 +1,177 @@
+// ==UserScript==
+// @name         Dune_get_tokenswap_row_special_add
+// @namespace    http://tampermonkey.net/
+// @version      2024-11-09
+// @description  try to take over the world!
+// @author       You
+// @match        https://dune.com/queries/4255630
+// @icon         https://www.google.com/s2/favicons?sz=64&domain=dune.com
+// @grant        none
+// ==/UserScript==
+
+
+function funcDownload(content, filename) {
+  console.log('begin download');
+  // 创建隐藏的可下载链接
+  var eleLink = document.createElement('a');
+  eleLink.download = filename;
+  eleLink.style.display = 'none';
+  // 字符内容转变成blob地址
+  var blob = new Blob([content]);
+  eleLink.href = URL.createObjectURL(blob);
+  // 触发点击
+  document.body.appendChild(eleLink);
+  eleLink.click();
+  // 然后移除
+  document.body.removeChild(eleLink);
+}
+
+
+function sleep(sleepdelay) {
+  return new Promise((resolve, reject) => {
+    setTimeout(() => {
+      resolve(sleepdelay);
+    }, sleepdelay);
+  })
+}
+function getCurrentTime() {
+  const zeroFill = (i) => {
+    if (i >= 0 && i <= 9) {
+      return "0" + i;
+    } else {
+      return '' + i;
+    }
+
+  }
+  let date = new Date();//当前时间
+  let year = date.getFullYear();
+  let month = zeroFill(date.getMonth() + 1);//月
+  let day = zeroFill(date.getDate());//日
+  let hour = zeroFill(date.getHours());//时
+  let minute = zeroFill(date.getMinutes());//分
+  let second = zeroFill(date.getSeconds());//秒
+
+  //当前时间
+  var curTime = year + month + day + '_' + hour + minute + second;
+  return curTime;
+}
+
+async function get_thead_data() {
+  let table = document.querySelectorAll('table.table_table__FDV2P')[0];
+  // Get the <thead> element
+  let thead = table.querySelector('thead');
+  let tr_of_thead = thead.querySelectorAll('tr')[0];
+
+  let row_th = []
+  let arr_td = tr_of_thead.querySelectorAll('th');
+  for (let idx_th = 0; idx_th < arr_td.length; idx_th++) {
+    let td = arr_td[idx_th];
+    // console.log(td.innerText);
+    row_th.push(td.innerText);
+  }
+  res_data_get_dune_data.push(row_th);
+
+
+}
+
+async function get_tbody_data() {
+
+  // Get the table element
+  let table = document.querySelector('table.table_table__FDV2P');
+
+  // Get the <tbody> element
+  let tbody = table.querySelector('tbody');
+  // Get all <tr> elements in <tbody>
+  let tbodyTrs = tbody.querySelectorAll('tr');
+
+  // Traverse the <tr> elements in <tbody> and get the data
+  for (let i = 0; i < tbodyTrs.length; i++) {
+    let tr = tbodyTrs[i];
+    let row_tr = []
+    let arr_td = tr.querySelectorAll('td');
+    for (let idx_td = 0; idx_td < arr_td.length; idx_td++) {
+      let td = arr_td[idx_td];
+      // console.log(td.innerText);
+
+      row_tr.push(td.innerText.split(",")[0])
+    }
+    res_data_get_dune_data.push(row_tr);
+  }
+
+}
+
+
+async function clickButton_get_data() {
+  res_data_get_dune_data = [];
+
+  await get_thead_data();
+  let ul_table_footer__Ky_k2 = document.querySelector('div.visual_vizFooter__vCe59').querySelector("ul.table_footer__Ky_k2");
+
+  let arr_ul_children = ul_table_footer__Ky_k2.children;
+  let page_count = arr_ul_children[4].querySelectorAll("option").length;
+
+  // 获取 页数 并且不断next 页
+
+  // console.log("first= ", res_data_get_dune_data);
+
+  for (let cur_page = 1; cur_page <= page_count; cur_page++) {
+    console.log('cur_page=', cur_page);
+    while (true) {
+
+      try {
+        await get_tbody_data();
+        break;
+      } catch (e) {
+
+        await sleep(3000);
+      }
+
+    }
+    let button_next = arr_ul_children[5].querySelector("button");
+    button_next.click();
+    await sleep(1500);
+
+  }
+  res_data_get_dune_data.forEach((val, index, arr) => { arr[index] = val.join() + "\n" });
+  res_data_get_dune_data = res_data_get_dune_data.join('')
+  let curTime = getCurrentTime();
+
+  let query_id = window.location.pathname.slice(1).split('/').pop();
+  funcDownload(res_data_get_dune_data, `${page_name}_${query_id}.csv`);
+
+
+
+}
+
+var res_data_get_dune_data = [];
+var page_name = 'dune_get_tokenswap_row_special_add';
+
+(async function () {
+  console.log("enter load");
+  await sleep(6000);
+  console.log("create button");
+
+  var mydivbox = document.createElement("div");
+
+  var button_ = document.createElement("button");//创建 获取 holders 一个按钮
+  button_.className = "tam-mybutton-getdata"
+  button_.textContent = "getdata"; //按钮内容
+  button_.style.width = "90px"; //按钮宽度
+  button_.style.height = "30px"; //按钮高度
+  button_.style.align = "center"; //文本居中
+  button_.style.color = "blue"; //按钮文字颜色
+  button_.style.background = "#045710"; //按钮底色
+  button_.style.border = "1px solid #045710"; //边框属性
+
+  mydivbox.appendChild(button_);
+
+  mydivbox.style.position = "fixed";
+  mydivbox.style.top = "180px";
+  mydivbox.style.right = "40px";
+  document.body.appendChild(mydivbox);
+
+  button_.addEventListener("click", clickButton_get_data); //监听按钮点击事件
+
+
+
+})();

+ 177 - 0
src/code/tamper_Dune_get_tokenswap_row_special_time.js

@@ -0,0 +1,177 @@
+// ==UserScript==
+// @name         Dune_get_tokenswap_row_special_time
+// @namespace    http://tampermonkey.net/
+// @version      2024-11-09
+// @description  try to take over the world!
+// @author       You
+// @match        https://dune.com/queries/4305529
+// @icon         https://www.google.com/s2/favicons?sz=64&domain=dune.com
+// @grant        none
+// ==/UserScript==
+
+
+function funcDownload(content, filename) {
+  console.log('begin download');
+  // 创建隐藏的可下载链接
+  var eleLink = document.createElement('a');
+  eleLink.download = filename;
+  eleLink.style.display = 'none';
+  // 字符内容转变成blob地址
+  var blob = new Blob([content]);
+  eleLink.href = URL.createObjectURL(blob);
+  // 触发点击
+  document.body.appendChild(eleLink);
+  eleLink.click();
+  // 然后移除
+  document.body.removeChild(eleLink);
+}
+
+
+function sleep(sleepdelay) {
+  return new Promise((resolve, reject) => {
+    setTimeout(() => {
+      resolve(sleepdelay);
+    }, sleepdelay);
+  })
+}
+function getCurrentTime() {
+  const zeroFill = (i) => {
+    if (i >= 0 && i <= 9) {
+      return "0" + i;
+    } else {
+      return '' + i;
+    }
+
+  }
+  let date = new Date();//当前时间
+  let year = date.getFullYear();
+  let month = zeroFill(date.getMonth() + 1);//月
+  let day = zeroFill(date.getDate());//日
+  let hour = zeroFill(date.getHours());//时
+  let minute = zeroFill(date.getMinutes());//分
+  let second = zeroFill(date.getSeconds());//秒
+
+  //当前时间
+  var curTime = year + month + day + '_' + hour + minute + second;
+  return curTime;
+}
+
+async function get_thead_data() {
+  let table = document.querySelectorAll('table.table_table__FDV2P')[0];
+  // Get the <thead> element
+  let thead = table.querySelector('thead');
+  let tr_of_thead = thead.querySelectorAll('tr')[0];
+
+  let row_th = []
+  let arr_td = tr_of_thead.querySelectorAll('th');
+  for (let idx_th = 0; idx_th < arr_td.length; idx_th++) {
+    let td = arr_td[idx_th];
+    // console.log(td.innerText);
+    row_th.push(td.innerText);
+  }
+  res_data_get_dune_data.push(row_th);
+
+
+}
+
+async function get_tbody_data() {
+
+  // Get the table element
+  let table = document.querySelector('table.table_table__FDV2P');
+
+  // Get the <tbody> element
+  let tbody = table.querySelector('tbody');
+  // Get all <tr> elements in <tbody>
+  let tbodyTrs = tbody.querySelectorAll('tr');
+
+  // Traverse the <tr> elements in <tbody> and get the data
+  for (let i = 0; i < tbodyTrs.length; i++) {
+    let tr = tbodyTrs[i];
+    let row_tr = []
+    let arr_td = tr.querySelectorAll('td');
+    for (let idx_td = 0; idx_td < arr_td.length; idx_td++) {
+      let td = arr_td[idx_td];
+      // console.log(td.innerText);
+
+      row_tr.push(td.innerText.split(",")[0])
+    }
+    res_data_get_dune_data.push(row_tr);
+  }
+
+}
+
+
+async function clickButton_get_data() {
+  res_data_get_dune_data = [];
+
+  await get_thead_data();
+  let ul_table_footer__Ky_k2 = document.querySelector('div.visual_vizFooter__vCe59').querySelector("ul.table_footer__Ky_k2");
+
+  let arr_ul_children = ul_table_footer__Ky_k2.children;
+  let page_count = arr_ul_children[4].querySelectorAll("option").length;
+
+  // 获取 页数 并且不断next 页
+
+  // console.log("first= ", res_data_get_dune_data);
+
+  for (let cur_page = 1; cur_page <= page_count; cur_page++) {
+    console.log('cur_page=', cur_page);
+    while (true) {
+
+      try {
+        await get_tbody_data();
+        break;
+      } catch (e) {
+
+        await sleep(3000);
+      }
+
+    }
+    let button_next = arr_ul_children[5].querySelector("button");
+    button_next.click();
+    await sleep(1500);
+
+  }
+  res_data_get_dune_data.forEach((val, index, arr) => { arr[index] = val.join() + "\n" });
+  res_data_get_dune_data = res_data_get_dune_data.join('')
+  let curTime = getCurrentTime();
+
+  let query_id = window.location.pathname.slice(1).split('/').pop();
+  funcDownload(res_data_get_dune_data, `${page_name}_${query_id}.csv`);
+
+
+
+}
+
+var res_data_get_dune_data = [];
+var page_name = 'dune_get_tokenswap_row_special_time';
+
+(async function () {
+  console.log("enter load");
+  await sleep(6000);
+  console.log("create button");
+
+  var mydivbox = document.createElement("div");
+
+  var button_ = document.createElement("button");//创建 获取 holders 一个按钮
+  button_.className = "tam-mybutton-getdata"
+  button_.textContent = "getdata"; //按钮内容
+  button_.style.width = "90px"; //按钮宽度
+  button_.style.height = "30px"; //按钮高度
+  button_.style.align = "center"; //文本居中
+  button_.style.color = "blue"; //按钮文字颜色
+  button_.style.background = "#045710"; //按钮底色
+  button_.style.border = "1px solid #045710"; //边框属性
+
+  mydivbox.appendChild(button_);
+
+  mydivbox.style.position = "fixed";
+  mydivbox.style.top = "180px";
+  mydivbox.style.right = "40px";
+  document.body.appendChild(mydivbox);
+
+  button_.addEventListener("click", clickButton_get_data); //监听按钮点击事件
+
+
+
+})();

+ 12 - 9
src/code/test_my_find_zhuangjia/new_8002_add_get_getdalao_activites_number.py

@@ -35,6 +35,7 @@ async def do_some_thing(playwright,   arr_url_dalao , url_type):
     arr_page[0] = await context .new_page()
     await arr_page[0].goto(
         "https://solscan.io/")
+    await asyncio.sleep(30)
 
     # print(context.pages)
 
@@ -48,19 +49,21 @@ async def do_some_thing(playwright,   arr_url_dalao , url_type):
         print(f"cur_arr_str_dalaoaddress remainder = {len(arr_url_dalao)-idx_url}")
         arr_page[1] = await context.new_page()
         page = arr_page[1]
+        await asyncio.sleep(3)
 
-        tbody_ = page.locator(
-            'table.w-full tbody')
+        # tbody_ = page.locator(
+        #     'table.w-full tbody')
+        await page.wait_for_selector('#account-tabs',timeout=15000)
+        await page.wait_for_selector('#account-tabs iv.flex.flex-col.gap-4.items-stretch.justify-start',timeout=15000)
         arr_div =await page.locator("#account-tabs div.flex.flex-col.gap-4.items-stretch.justify-start div.flex.gap-1.flex-row.items-center.justify-start.flex-wrap").all()
+        # await asyncio.sleep(3)
         str_tx_info =(await arr_div[0].text_content().strip())
         #arr_tds = await last_tr.locator('td').all()
         # p_token_last_active =  arr_tds[0].locator("p")
         # str_token_last_active =( await p_token_last_active.text_content()).strip()
 
         print(str_tx_info)
-        # "div.lg\:flex:nth-child(1) > div:nth-child(1)"
-        # "html.light body.min-h-screen.font-sans div#__next div.flex.flex-col.gap-0.items-stretch.justify-start.h-full.min-h-screen div.w-full.flex-1 div.my-0.mx-auto.max-w-full.px-4.md:px-6.2xl:px-0.2xl:max-w-[1400px] div.flex.flex-col.gap-6.items-stretch.justify-start.w-full div.flex.flex-col.gap-6.items-stretch.justify-start.w-full div#account-tabs div.mr-[-16px].ml-[-16px].sm:mr-0.sm:ml-0 div#radix-:rk:-content-defiactivities.ring-offset-background.focus-visible:outline-none.focus-visible:ring-2.bg-neutral0.p-6.rounded-2xl.[&:nth-child(2)]:rounded-tl-none.ring-transparent.ring-offset-0.focus-visible:ring-offset-0.focus-visible:ring-transparent.mt-0 div.flex.flex-col.gap-4.items-stretch.justify-start div.gap-1.flex-row.items-center.justify-between.flex-wrap.w-full.lg:flex.hidden div.flex.gap-1.flex-row.items-center.justify-start.flex-wrap"
-
+ 
  
 
 
@@ -78,9 +81,9 @@ async def get_onedriver_swapactivities( arr_url_dalao , url_type):
 
 async def main():
     print("enter main()")
-    if len(arr_dalao_sol_transfer_url)>0:
+    if len(arr_dalao_url)>0:
         await get_onedriver_swapactivities(
-            arr_url_dalao = arr_dalao_sol_transfer_url , url_type = "transfer_counts")
+            arr_url_dalao = arr_dalao_url , url_type = "transfer_counts")
         await asyncio.sleep(3)
         
     # if len(arr_dalao_token_inflow_transfer_url)>0:
@@ -110,8 +113,8 @@ def init():
         dalao_transfer_counts_file = baseclass.dalao_solscan_info_path / f"dalao_transfer_counts.json"
         # token_inflow_transfer_file = baseclass.dalao_solscan_info_path / f"token_inflow_{str_dalaoaddress}.csv"
    
- 
-        url_transfer = f"https://solscan.io/account/{str_dalaoaddress}#transfers"  
+        url_transfer = f"https://solscan.io/account/{str_dalaoaddress}"  
+        # url_transfer = f"https://solscan.io/account/{str_dalaoaddress}#transfers"  
         url_swap = f"https://solscan.io/account/{str_dalaoaddress}#defiactivities"     
         arr_dalao_url.append(url_transfer)
         obj_url_2_dalao[url_transfer] = str_dalaoaddress

+ 41 - 10
src/code/test_my_find_zhuangjia/new_8002_get_transfer_info_bysolscan_playwright.py

@@ -43,8 +43,8 @@ async def do_some_thing(playwright,   arr_url_dalao , url_type):
         str_dalaoTransferUrl = arr_url_dalao[idx_url]
         str_dalaoaddress =obj_url_2_dalao[str_dalaoTransferUrl]
         
-        print(f"enter str_dalaoaddress= {str_dalaoaddress}")
-        print(f"enter str_dalaoTransferUrl= {str_dalaoTransferUrl}")
+        print(f"enter str_dalaoaddress= {str_dalaoaddress} url_type={url_type}")
+        # print(f"enter str_dalaoTransferUrl= {str_dalaoTransferUrl}")
         print(f"cur_arr_str_dalaoaddress remainder = {len(arr_url_dalao)-idx_url}")
         arr_page[1] = await context.new_page()
         page = arr_page[1]
@@ -89,15 +89,31 @@ async def main():
         await get_onedriver_swapactivities(
             arr_url_dalao = arr_dalao_usdc_transfer_url , url_type = "usdc_transfer")
 
+    if len(arr_dalao_special_token_transfer_url)>0:
+        await get_onedriver_swapactivities(
+            arr_url_dalao = arr_dalao_special_token_transfer_url , url_type = "special_token")
+
+
+
+
 
+find_depth = "depth_01"
 df = pd.read_excel(baseclass.dalao_tran_gmgnOrdex_path /
                  "input_dalao.xlsx", dtype=object)
 
-
-arr_str_dalaoaddress = df['dalaoaddress'].tolist()
+str_tokenaddress_dalao_source = "4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump"
+arr_str_dalaoaddress = df[f'dalao_{find_depth}'].drop_duplicates().dropna().tolist()
+obj_ex_address ={
+    
+    "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1":"buy-achipompomhat.sol",
+"CoXccZ3RqJGHQspgei4NdMCW2No1EtTCgevy9CYwaNey":"cryptoxiao.sol",
+"6dEm5Z5NGqNuavGV2fmiRnE55V9jpygsy8RngLxszBGA":"coinbaseventures.sol"
+}
+arr_exclude_address= list(obj_ex_address.keys())
+arr_str_dalaoaddress=[add for add in arr_str_dalaoaddress if add not in  arr_exclude_address]
 arr_dalao_sol_transfer_url =[]
 arr_dalao_token_transfer_url =[]
- 
+arr_dalao_special_token_transfer_url =[]
 arr_dalao_usdc_transfer_url =[]
 obj_url_2_dalao={
     
@@ -110,26 +126,29 @@ def init():
  
         sol_transfer_file = baseclass.dalao_solscan_info_path / f"sol_transfer_{str_dalaoaddress}.csv"
         token_transfer_file = baseclass.dalao_solscan_info_path / f"token_transfer_{str_dalaoaddress}.csv"
+        special_token_transfer_file = baseclass.dalao_solscan_info_path / f"special_token_transfer_{str_dalaoaddress}.csv"
         usdc_transfer_file = baseclass.dalao_solscan_info_path / f"usdc_transfer_{str_dalaoaddress}.csv"
         
+        
  
         url_sol_transfer = f"https://api-v2.solscan.io/v2/account/transfer/export?address={str_dalaoaddress}&activity_type[]=ACTIVITY_SPL_TRANSFER&activity_type[]=ACTIVITY_SPL_MINT&amount[]=0.3&amount[]=undefined&token=So11111111111111111111111111111111111111111&exclude_amount_zero=true&remove_spam=true"    
         # url_token_inflow_transfer = f"https://api-v2.solscan.io/v2/account/transfer/export?address={str_dalaoaddress}&activity_type[]=ACTIVITY_SPL_TRANSFER&activity_type[]=ACTIVITY_SPL_MINT&exclude_token=So11111111111111111111111111111111111111111&exclude_amount_zero=true&remove_spam=true&flow=in"
         # url_token_outflow_transfer = f"https://api-v2.solscan.io/v2/account/transfer/export?address={str_dalaoaddress}&activity_type[]=ACTIVITY_SPL_TRANSFER&activity_type[]=ACTIVITY_SPL_MINT&exclude_token=So11111111111111111111111111111111111111111&exclude_amount_zero=true&remove_spam=true&flow=out"
         url_token_transfer = f"https://api-v2.solscan.io/v2/account/transfer/export?address={str_dalaoaddress}&activity_type[]=ACTIVITY_SPL_TRANSFER&activity_type[]=ACTIVITY_SPL_MINT&exclude_token=So11111111111111111111111111111111111111111&exclude_amount_zero=true&remove_spam=true"
  
-        
+        url_special_token_transfer =f"https://api-v2.solscan.io/v2/account/transfer/export?address={str_dalaoaddress}&token={str_tokenaddress_dalao_source}"
         url_usdc_transfer = f"https://api-v2.solscan.io/v2/account/transfer/export?address={str_dalaoaddress}&activity_type[]=ACTIVITY_SPL_TRANSFER&activity_type[]=ACTIVITY_SPL_MINT&amount[]=100&amount[]=undefined&token=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&exclude_amount_zero=true&remove_spam=true"
         obj_url_2_dalao[url_sol_transfer] =str_dalaoaddress
  
         obj_url_2_dalao[url_token_transfer] =str_dalaoaddress
         obj_url_2_dalao[url_usdc_transfer] =str_dalaoaddress
+        obj_url_2_dalao[url_special_token_transfer] = str_dalaoaddress
         
     
         if sol_transfer_file.exists():
             modified_time  =  sol_transfer_file.stat().st_mtime
             # 3 * 60 分钟内不会在获取
-            if(now_time -modified_time >3*60*60):
+            if(now_time -modified_time >12 * 60 * 60):
                 arr_dalao_sol_transfer_url.append(url_sol_transfer)
             else:
                 pass
@@ -139,7 +158,7 @@ def init():
         if token_transfer_file.exists():
             modified_time  =  token_transfer_file.stat().st_mtime
             # 3 * 60 分钟内不会在获取
-            if(now_time -modified_time >3*60*60):
+            if(now_time -modified_time >12 * 60 * 60):
                 arr_dalao_token_transfer_url.append(url_token_transfer)
             else:
                 pass
@@ -150,18 +169,30 @@ def init():
         if usdc_transfer_file.exists():
             modified_time  =  usdc_transfer_file.stat().st_mtime
             # 3 * 60 分钟内不会在获取
-            if(now_time -modified_time >3*60*60):
+            if(now_time -modified_time >12 * 60 * 60):
                 arr_dalao_usdc_transfer_url.append(url_usdc_transfer)
             else:
                 pass
         else:
             arr_dalao_usdc_transfer_url.append(url_usdc_transfer)
             
+        if special_token_transfer_file.exists():
+            modified_time  =  special_token_transfer_file.stat().st_mtime
+            # 3 * 60 分钟内不会在获取
+            if(now_time -modified_time >12 * 60 * 60):
+                arr_dalao_special_token_transfer_url.append(url_special_token_transfer)
+            else:
+                pass
+        else:
+            arr_dalao_special_token_transfer_url.append(url_special_token_transfer)
+            
+          
+            
             
 
 
 init()
-if len(arr_dalao_sol_transfer_url) ==0 and len(arr_dalao_token_transfer_url) ==0 and  len(arr_dalao_usdc_transfer_url)==0:
+if len(arr_dalao_sol_transfer_url) ==0 and len(arr_dalao_token_transfer_url) ==0 and  len(arr_dalao_usdc_transfer_url)==0 and len(arr_dalao_special_token_transfer_url)==0:
     print("dont has dalao need get")
     exit()
 

+ 14 - 8
src/code/new_8003_handle_depth.py → src/code/test_my_find_zhuangjia/new_8003_handle_sol_transfer_depth.py

@@ -21,10 +21,9 @@ def timestamped_print(*args, **kwargs):
 print = timestamped_print
 print('\n'*5)
 print(f"{'{:<6}'.format('ENTER')} {baseclass.scriptfilename} ----------------NOTE-----------NOTE---------------")
+
+ 
  
-arr_exclude_address=[
-    
-]
 arr_realtion_address =[]
 
 now_time = time.time()
@@ -32,9 +31,16 @@ find_depth = "depth_01"
 
 df = pd.read_excel(baseclass.dalao_tran_gmgnOrdex_path /
                 "input_dalao.xlsx", dtype=object)
-# arr_str_dalaoaddress = df['dalaoaddress'].tolist()
-arr_str_dalaoaddress = df[f'dalao_{find_depth}'].drop_duplicates().dropna().tolist()
+obj_ex_address ={
+    
+    "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1":"buy-achipompomhat.sol",
+"CoXccZ3RqJGHQspgei4NdMCW2No1EtTCgevy9CYwaNey":"cryptoxiao.sol",
+"6dEm5Z5NGqNuavGV2fmiRnE55V9jpygsy8RngLxszBGA":"coinbaseventures.sol"
+}
+arr_exclude_address= list(obj_ex_address.keys())
 
+arr_str_dalaoaddress = df[f'dalao_{find_depth}'].drop_duplicates().dropna().tolist()
+arr_str_dalaoaddress=[add for add in arr_str_dalaoaddress if add not in  arr_exclude_address]
 # arr_str_dalaoaddress=arr_str_dalaoaddress[0:2]
 arr_realtion_address  = arr_realtion_address + arr_str_dalaoaddress
 str_tokenaddress_dalao_source = "4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump"
@@ -84,7 +90,7 @@ def handle_same_rel_address(gdf):
     return gdf
 
 def get_dalao_len(gdf):
-    gdf["dalao_count"] = len(gdf)
+    gdf["sol_dalao_count"] = len(gdf)
     
     return  gdf
 
@@ -169,9 +175,9 @@ def main():
         
 
 
-        df_sol_transfer["dalao_count"] = 0
+        df_sol_transfer["sol_dalao_count"] = 0
         df_sol_transfer=df_sol_transfer.groupby(by = [ "rel_address" ],  group_keys=False).apply(lambda gdf: handle_same_rel_address(gdf))
-        df_sol_transfer=df_sol_transfer[ ['timestamp', 'datetime',   'amount', 'is_exend', 'is_relationend', 'dalaoaddress' , 'rel_address','dalao_count'  ]]
+        df_sol_transfer=df_sol_transfer[ ['timestamp', 'datetime',   'amount', 'is_exend', 'is_relationend', 'dalaoaddress' , 'rel_address','sol_dalao_count'  ]]
         df_sol_transfer=df_sol_transfer.drop_duplicates()
 
         

+ 174 - 0
src/code/test_my_find_zhuangjia/new_8003_handle_special_token_transfer_depth.py

@@ -0,0 +1,174 @@
+
+# from datetime import datetime, timezone
+# from playwright.async_api import async_playwright, Playwright
+# from playwright.sync_api import expect
+ 
+from base_class import BaseVariableFunction
+from base_class import *
+baseclass = BaseVariableFunction(__file__)
+
+baseclass.makedirpath(baseclass.ana_dalao_relation_by_solscan_path )
+
+ 
+old_print = print
+
+
+def timestamped_print(*args, **kwargs):
+    old_print(datetime.datetime.utcnow().replace(
+        microsecond=0), *args, **kwargs)
+
+
+print = timestamped_print
+print('\n'*5)
+print(f"{'{:<6}'.format('ENTER')} {baseclass.scriptfilename} ----------------NOTE-----------NOTE---------------")
+
+ 
+ 
+arr_realtion_address =[]
+
+now_time = time.time()
+find_depth = "depth_01"
+
+df = pd.read_excel(baseclass.dalao_tran_gmgnOrdex_path /
+                "input_dalao.xlsx", dtype=object)
+obj_ex_address ={
+    
+    "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1":"buy-achipompomhat.sol",
+"CoXccZ3RqJGHQspgei4NdMCW2No1EtTCgevy9CYwaNey":"cryptoxiao.sol",
+"6dEm5Z5NGqNuavGV2fmiRnE55V9jpygsy8RngLxszBGA":"coinbaseventures.sol"
+}
+arr_exclude_address= list(obj_ex_address.keys())
+
+arr_str_dalaoaddress = df[f'dalao_{find_depth}'].drop_duplicates().dropna().tolist()
+arr_str_dalaoaddress=[add for add in arr_str_dalaoaddress if add not in  arr_exclude_address]
+# arr_str_dalaoaddress=arr_str_dalaoaddress[0:2]
+arr_realtion_address  = arr_realtion_address + arr_str_dalaoaddress
+str_tokenaddress_dalao_source = "4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump"
+
+
+baseclass.makedirpath(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source    )
+baseclass.makedirpath(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source /find_depth )
+baseclass.makedirpath(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source /find_depth/"mid" )
+baseclass.makedirpath(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source /find_depth/"final" )
+
+
+def drop_ex_txhash(gdf):
+    is_ex = False
+    if( ( gdf["action"] != "TRANSFER" )
+        | (gdf["timestamp"]<now_time - 2*30* 24* 3600 )
+        |( gdf["from"].isin(arr_exclude_address))
+        |( gdf["to"].isin(arr_exclude_address))
+        ).any( ):
+        is_ex = True
+    
+    if is_ex:
+        return None
+    if (  set( gdf["from"].tolist() ).intersection(gdf["to"].tolist())   ):
+        is_ex = True
+    if is_ex:
+        return None
+    return gdf
+
+
+def sum_same_tx_from_to(gdf ):
+    gdf["amount"] = sum(gdf["amount"])
+    gdf=gdf.drop_duplicates()
+    return gdf
+
+def sum_same_from_to(gdf ):
+    gdf["timestamp"] = max(gdf["timestamp"] )
+    gdf["datetime"] = max(gdf["datetime"] )
+    gdf["amount"] = sum(gdf["amount"])
+    gdf=gdf.drop_duplicates()
+    return gdf
+
+def handle_same_rel_address(gdf):
+    gdf["amount"] = max(gdf["amount"])
+    gdf["datetime"] = max(gdf["datetime"])
+    gdf["timestamp"] = max(gdf["timestamp"] )
+    gdf=gdf.drop_duplicates()
+    return gdf
+
+def get_dalao_len(gdf):
+    gdf["sol_dalao_count"] = len(gdf)
+    
+    return  gdf
+
+
+def main():
+    global arr_exclude_address
+    for str_dalaoaddress in arr_str_dalaoaddress:
+        print(f"enter {str_dalaoaddress}")
+        cur_arr_realtion_address =arr_realtion_address.copy()
+        cur_arr_realtion_address.remove(str_dalaoaddress)
+        
+
+        df_special_token_transfer =pd.read_csv(baseclass.dalao_solscan_info_path / f"special_token_transfer_{str_dalaoaddress}.csv" ,dtype=object)
+        df_special_token_transfer = df_special_token_transfer.astype({
+            "Time":int,
+        })
+        
+ 
+
+ 
+    
+        df_special_token_transfer.columns=["txhash","timestamp","action","from","to","amount","decimals","tokenaddress"]
+        df_special_token_transfer=df_special_token_transfer.astype({
+            "timestamp":int,
+            "amount":float,
+            "decimals":int,
+        })
+        
+    
+
+        df_special_token_transfer = df_special_token_transfer.groupby(by=["txhash"],  group_keys=False).apply(lambda gdf: drop_ex_txhash(gdf))
+ 
+ 
+        if(len(df_special_token_transfer)==0):
+            continue
+        token_decimal  =  (df_special_token_transfer["decimals"].tolist()[0])
+        df_special_token_transfer["amount"] = df_special_token_transfer["amount"] / 10**token_decimal
+        df_special_token_transfer["amount"] = df_special_token_transfer["amount"].round(2) 
+        df_special_token_transfer["datetime"] = pd.to_datetime(df_special_token_transfer['timestamp'], unit='s')  
+        df_special_token_transfer = df_special_token_transfer[["timestamp", "txhash", "datetime" ,"from","to","amount"]]     
+        
+        df_special_token_transfer = df_special_token_transfer.groupby(by = ["txhash","from","to" ],  group_keys=False).apply(lambda gdf: sum_same_tx_from_to(gdf))
+        
+        df_special_token_transfer=df_special_token_transfer.sort_values(by="timestamp",ascending=False)
+        df_special_token_transfer.to_csv(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source/find_depth/  "mid" /f"mid01_sol_transfer_{str_dalaoaddress}.csv",index=False)
+ 
+        df_special_token_transfer = df_special_token_transfer[[ "timestamp", "datetime", "from","to","amount"]]       
+        df_special_token_transfer = df_special_token_transfer.groupby(by = [ "from","to" ],  group_keys=False).apply(lambda gdf: sum_same_from_to(gdf))
+        
+        df_special_token_transfer["is_exend"] = 0
+        df_special_token_transfer["is_relationend"] = 0
+
+
+        df_special_token_transfer['dalaoaddress'] = str_dalaoaddress
+        
+
+        df_special_token_transfer.loc[( df_special_token_transfer["from"].isin(cur_arr_realtion_address) | df_special_token_transfer["to"].isin(cur_arr_realtion_address)),"is_relationend"] = 1
+ 
+        df_special_token_transfer.loc[( df_special_token_transfer["from"].isin(arr_exclude_address) | df_special_token_transfer["to"].isin(arr_exclude_address)),"is_exend"] = 1
+        df_special_token_transfer=df_special_token_transfer.sort_values(by="timestamp",ascending=False)
+        df_special_token_transfer.to_csv(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source/find_depth/  "mid" /f"mid02_sol_transfer_{str_dalaoaddress}.csv",index=False)
+ 
+        df_special_token_transfer['rel_address'] = df_special_token_transfer.apply(lambda row: row['from'] if row['from']!= str_dalaoaddress else row['to'], axis=1)
+        
+
+
+        df_special_token_transfer["sol_dalao_count"] = 0
+        df_special_token_transfer=df_special_token_transfer.groupby(by = [ "rel_address" ],  group_keys=False).apply(lambda gdf: handle_same_rel_address(gdf))
+        df_special_token_transfer=df_special_token_transfer[ ['timestamp', 'datetime',   'amount', 'is_exend', 'is_relationend', 'dalaoaddress' , 'rel_address','sol_dalao_count'  ]]
+        df_special_token_transfer=df_special_token_transfer.drop_duplicates()
+
+        
+
+        df_special_token_transfer =   df_special_token_transfer.groupby(by=["dalaoaddress"] ,group_keys=False  ).apply(lambda gdf:  get_dalao_len(gdf))
+        
+
+        df_special_token_transfer=df_special_token_transfer.sort_values(by="timestamp",ascending=False)
+        df_special_token_transfer.to_excel(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source/find_depth/  "final"/f"final_sol_transfer_{str_dalaoaddress}.xlsx",index=False)
+ 
+ 
+main()

+ 33 - 19
src/code/test_my_find_zhuangjia/new_8004_merge_depth.py

@@ -22,16 +22,32 @@ print = timestamped_print
 print('\n'*5)
 print(f"{'{:<6}'.format('ENTER')} {baseclass.scriptfilename} ----------------NOTE-----------NOTE---------------")
 
-
 df = pd.read_excel(baseclass.dalao_tran_gmgnOrdex_path /
                 "input_dalao.xlsx", dtype=object)
-arr_str_dalaoaddress = df['dalaoaddress'].tolist()
+ 
+find_depth = "depth_01"
+obj_ex_address ={
+    
+    "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1":"buy-achipompomhat.sol",
+"CoXccZ3RqJGHQspgei4NdMCW2No1EtTCgevy9CYwaNey":"cryptoxiao.sol",
+"6dEm5Z5NGqNuavGV2fmiRnE55V9jpygsy8RngLxszBGA":"coinbaseventures.sol"
+}
+arr_exclude_address= list(obj_ex_address.keys())
+
+arr_str_dalaoaddress = df[f'dalao_{find_depth}'].drop_duplicates().dropna().tolist()
+arr_str_dalaoaddress=[add for add in arr_str_dalaoaddress if add not in  arr_exclude_address]
+find_depth = "depth_01"
+ 
+arr_str_dalaoaddress = df[f'dalao_{find_depth}'].drop_duplicates().dropna().tolist()
 
 # arr_str_dalaoaddress=arr_str_dalaoaddress[0:5]
 str_tokenaddress_dalao_source = "4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump"
-find_depth = "depth_01"
+ 
 
 
+def get_reladd_count(gdf):
+    gdf["reladd_count"] = len(gdf)
+    return gdf
 
 
 def main():
@@ -41,7 +57,6 @@ def main():
             continue
         print(f"enter {str_dalaoaddress}")
         cur_df_sol_transfer = pd.read_excel(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source/find_depth/"final"/ f"final_sol_transfer_{str_dalaoaddress}.xlsx",dtype=object )
-        cur_df_sol_transfer["dalaoaddress"] = str_dalaoaddress
         df_sol_transfer = pd.concat([df_sol_transfer,cur_df_sol_transfer])
     df_sol_transfer = df_sol_transfer.astype({
 
@@ -49,6 +64,7 @@ def main():
         "amount":float,
         "is_exend":int,
         "is_relationend":int,
+        "sol_dalao_count":int,
         
     })
  
@@ -60,31 +76,29 @@ def main():
  
     df_sol_transfer = df_sol_transfer[ ~mask_end].reset_index(drop=True)
 
-    def get_dalao_len(gdf):
-        gdf["dalao_count"] = len(gdf)
-        
-        return  gdf
-
-    df_sol_transfer["dalao_count"] = 0
+    df_sol_transfer["reladd_count"]  = 0
     
 
-    df_sol_transfer =   df_sol_transfer.groupby(by=["dalaoaddress"] ,group_keys=False  ).apply(lambda gdf:  get_dalao_len(gdf))
-    df_sol_transfer = df_sol_transfer.sort_values(by=["dalao_count"],ascending=False)
-    df_dalao_count = df_sol_transfer[[  "dalaoaddress", "dalao_count"  ]].drop_duplicates()
+    df_sol_transfer = df_sol_transfer.groupby(by = [ "rel_address" ],  group_keys=False).apply(lambda gdf : get_reladd_count(gdf))
+
+    df_sol_transfer = df_sol_transfer.sort_values(by=[ "sol_dalao_count"  , "dalaoaddress" ,"timestamp"],ascending=False)
+
+    df_sol_dalao_count = df_sol_transfer[[  "dalaoaddress", "sol_dalao_count"  ]].drop_duplicates()
 
     # str_tokenaddress_dalao_source
 
+    df_sol_dalao_count=df_sol_dalao_count.sort_values(by=["sol_dalao_count"],ascending=False)
+    
+    df_sol_dalao_count["scan_activites"] = df_sol_dalao_count.apply(lambda ser : baseclass.makeurl(f"https://solscan.io/account/{ser['dalaoaddress']}#defiactivities" , f"{ser['dalaoaddress'][0:6]}") , axis=1)
  
-    df_dalao_count["scan_activites"] = df_dalao_count.apply(lambda ser : baseclass.makeurl(f"https://solscan.io/account/{ser['dalaoaddress']}#defiactivities" , f"{ser['dalaoaddress'][0:6]}") , axis=1)
- 
-    df_dalao_count["scan_token_source"] = df_dalao_count.apply(lambda ser : baseclass.makeurl(f"https://solscan.io/account/{ser['dalaoaddress']}?token_address={str_tokenaddress_dalao_source}#transfers" , f"{ser['dalaoaddress'][0:6]}") , axis=1)
+    df_sol_dalao_count["scan_token_source"] = df_sol_dalao_count.apply(lambda ser : baseclass.makeurl(f"https://solscan.io/account/{ser['dalaoaddress']}?token_address={str_tokenaddress_dalao_source}#transfers" , f"{ser['dalaoaddress'][0:6]}") , axis=1)
  
 
-#  https://gmgn.ai/sol/token/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump?tab=activity&maker=58YHxodnzZKxVBE5EsATs38ywEFV7M8ijjBoBkYAJY8J
+    #  https://gmgn.ai/sol/token/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump?tab=activity&maker=58YHxodnzZKxVBE5EsATs38ywEFV7M8ijjBoBkYAJY8J
+
 
-    df_dalao_count=df_dalao_count.sort_values(by=["dalao_count"],ascending=False)
     
-    df_dalao_count.to_excel(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source/find_depth/  f"counts_sol_transfer_{find_depth}.xlsx" ,index=False)
+    df_sol_dalao_count.to_excel(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source/find_depth/  f"counts_sol_transfer_{find_depth}.xlsx" ,index=False)
     df_sol_transfer.to_excel(baseclass.ana_dalao_relation_by_solscan_path /str_tokenaddress_dalao_source/find_depth/  f"sec_sol_transfer_{find_depth}.xlsx" ,index=False)
      
 

+ 0 - 8
src/library/aaa.py

@@ -1,8 +0,0 @@
-import pandas as pd
-
-df = pd.read_excel("./aaa.xlsx",dtype=object)
-df=df.drop_duplicates(subset=['from_ip','receive_ip'])
-
-df =df[df['from_ip']!=df['receive_ip']].reset_index(drop=True)
-
-df = df.to_excel("./aaa.xlsx",index=False )

+ 8 - 0
src/library/analysis_token/笔记.md

@@ -0,0 +1,8 @@
+
+excel 添加列,链接
+
+=HYPERLINK("https://www.defined.fi/sol/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump?maker="&A2,"defined")
+
+
+
+="(’"&A1&"‘),"

+ 30 - 0
src/library/dune_分析.md

@@ -0,0 +1,30 @@
+
+探究 dune   dex_solana.trades 的更新时间
+
+
+ 
+当前 时间  UTC+8  2024-11-17 14:55
+最新 2024-11-17 06:15
+ 
+
+当前 时间  UTC+8  2024-11-17 15:23
+最新 2024-11-17 06:15
+ 
+
+
+当前 时间  UTC+8  2024-11-17  15:56
+最新 2024-11-17  07:18
+
+当前 时间  UTC+8  2024-11-17  16:43
+最新 2024-11-17  07:18
+
+
+当前 时间  UTC+8  2024-11-17  17:11
+最新 2024-11-17  08:24
+
+
+
+当前 时间  UTC+8  2024-11-17  18:12
+最新 2024-11-17  09:28
+
+当前结论:更新不固定 但是一个多小时还是有的

+ 0 - 4
src/library/graph.csv

@@ -1,4 +0,0 @@
-from,to,data
-a0,b0,1111
-b0,c0,2222
-c0,d0,1111

+ 130 - 0
src/library/sql.sql

@@ -0,0 +1,130 @@
+with 
+    liquidity as (
+        WITH
+            pools as (
+                SELECT 
+                    distinct 
+                    project_program_id as pool_id
+                    , project
+                    , case when tr.token_bought_mint_address > tr.token_sold_mint_address 
+                        then tr.token_bought_mint_address || '-' || tr.token_sold_mint_address
+                        else tr.token_sold_mint_address || '-' || tr.token_bought_mint_address
+                        end as token_pair_mint
+                    , case when token_bought_mint_address > token_sold_mint_address then token_bought_mint_address else token_sold_mint_address end as tokenA
+                    , case when token_bought_mint_address > token_sold_mint_address then token_sold_mint_address else token_bought_mint_address end as tokenB
+                    , case when token_bought_mint_address > token_sold_mint_address then token_bought_vault else token_sold_vault end as tokenVaultA
+                    , case when token_bought_mint_address > token_sold_mint_address then token_sold_vault else token_bought_vault end as tokenVaultB
+                FROM dex_solana.trades tr
+            )
+            
+            , pool_liq as (
+                SELECT 
+                    ip.pool_id
+                    , ip.token_pair_mint
+                    , ip.tokenA 
+                    , ip.tokenB
+                    --add custom logic to only include the SOL balance of pumpdotfun
+                    , COALESCE(case when project = 'pumpdotfun' and ip.tokenA = 'So11111111111111111111111111111111111111112' 
+                        then bal_a.sol_balance
+                        else bal_a.token_balance
+                        end,0) as tokenA_balance
+                    , COALESCE(case when project = 'pumpdotfun' and ip.tokenB = 'So11111111111111111111111111111111111111112'
+                        then bal_b.sol_balance
+                        else bal_b.token_balance
+                        end,0) as tokenB_balance                
+                FROM pools ip
+                LEFT JOIN solana_utils.latest_balances bal_a ON bal_a.address = ip.tokenVaultA
+                LEFT JOIN solana_utils.latest_balances bal_b ON bal_b.address = ip.tokenVaultB
+            )
+            
+        SELECT 
+        token_pair_mint
+        , tokenA
+        , tokenB
+        , sum(
+            COALESCE(tokenA_balance*COALESCE(p_a.price, dp_a.median_price), 0) 
+            + COALESCE(tokenB_balance*COALESCE(p_b.price, dp_b.median_price),0)
+            )
+            as tvl
+        FROM pool_liq liq
+        LEFT JOIN prices.usd_latest p_a ON p_a.blockchain = 'solana' and toBase58(p_a.contract_address) = liq.tokenA
+        LEFT JOIN prices.usd_latest p_b ON p_b.blockchain = 'solana' and toBase58(p_b.contract_address) = liq.tokenB
+        LEFT JOIN dune.dune.result_dex_prices_latest_solana dp_a ON dp_a.token_mint_address = liq.tokenA
+        LEFT JOIN dune.dune.result_dex_prices_latest_solana dp_b ON dp_b.token_mint_address = liq.tokenB
+        --spam filter
+        WHERE dp_a.rolling_two_months_trades > 5000
+            and dp_a.total_holders_ever > 10000
+            and dp_b.rolling_two_months_trades > 5000
+            and dp_b.total_holders_ever > 10000
+            -- and (tokenA = '3ytUM5uGuChDdrMtgcBbENiRQgSoh4YXX9vAS2L6jX5e' OR tokenB = '3ytUM5uGuChDdrMtgcBbENiRQgSoh4YXX9vAS2L6jX5e')
+            -- and token_pair_mint like '%3ytUM5uGuChDdrMtgcBbENiRQgSoh4YXX9vAS2L6jX5e%'
+        group by 1,2,3
+    )
+
+    , pair_summaries as (
+        SELECT  
+            case when dx.token_bought_mint_address > dx.token_sold_mint_address 
+                then get_href(get_chain_explorer('solana') || '/account/' || dx.token_bought_mint_address, upper(substring(COALESCE(dx.token_bought_symbol, dx.token_bought_mint_address),1,5)))
+                || '-' 
+                || get_href(get_chain_explorer('solana') || '/account/' || dx.token_sold_mint_address, upper(substring(COALESCE(dx.token_sold_symbol, dx.token_sold_mint_address),1,5)))
+                else get_href(get_chain_explorer('solana') || '/account/' || dx.token_sold_mint_address, upper(substring(COALESCE(dx.token_sold_symbol, dx.token_sold_mint_address),1,5)))
+                || '-' 
+                || get_href(get_chain_explorer('solana') || '/account/' || dx.token_bought_mint_address, upper(substring(COALESCE(dx.token_bought_symbol, dx.token_bought_mint_address),1,5)))
+                end as token_pair
+            , case when dx.token_bought_mint_address > dx.token_sold_mint_address 
+                then dx.token_bought_mint_address || '-' || dx.token_sold_mint_address
+                else dx.token_sold_mint_address || '-' || dx.token_bought_mint_address
+                end as token_pair_mint
+            , case when dx.token_bought_mint_address > dx.token_sold_mint_address 
+                then dx.token_bought_mint_address else token_sold_mint_address 
+                end as token_a_mint
+            , case when dx.token_bought_mint_address > dx.token_sold_mint_address 
+                then dx.token_sold_mint_address else token_bought_mint_address 
+                end as token_b_mint
+            , COALESCE(sum(case when block_time > now() - interval '1' day then amount_filled else 0 end),0) as one_day_volume
+            , COALESCE(sum(case when block_time > now() - interval '7' day then amount_filled else 0 end),0) as seven_day_volume
+            , COALESCE(sum(case when block_time > now() - interval '30' day then amount_filled else 0 end),0) as thirty_day_volume
+            , COALESCE(sum(case when block_time > now() - interval '90' day then amount_filled else 0 end),0) as ninety_day_volume
+            -- , COALESCE(sum(amount_filled),0) as all_time_volume
+            , array_agg(distinct case when project = 'whirlpool' then 'orca' else project end) as projects
+            , array_agg(distinct project_program_id) as pool_ids
+        FROM (
+            SELECT 
+            *
+            , amount_usd as amount_filled
+            -- , COALESCE(amount_usd, COALESCE(token_bought_amount*dp_a.median_price, token_sold_amount*dp_b.median_price)) as amount_filled
+            FROM dex_solana.trades dx
+            WHERE block_time >= now() - interval '91' day
+            -- LEFT JOIN dune.dune.result_dex_prices_latest_solana dp_a ON dp_a.token_mint_address = dx.token_bought_mint_address AND dp_a.day = date_trunc('day', dx.block_time)
+            -- LEFT JOIN dune.dune.result_dex_prices_latest_solana dp_b ON dp_b.token_mint_address = dx.token_sold_mint_address AND dp_b.day = date_trunc('day', dx.block_time)
+            -- WHERE project_program_id NOT IN ('H83aoZ1SeCFC8J6ZYv76r7Qj9FHtnLFZNq5WAHvWr5Zn'
+            --                                 ,'2fyku8DrpwQueCc5eyTsdF6frPyroGPWdHzjEGN94ipY'
+            --                                 ,'FaLw91mzBQGq2DEi76PzGkZSaZQ1Dn1MPg9VxmH7XR99')
+            -- WHERE (token_bought_mint_address = '3S8qX1MsMqRbiwKg2cQyx7nis1oHMgaCuc9c4VfvVdPN'
+            -- OR token_sold_mint_address = '3S8qX1MsMqRbiwKg2cQyx7nis1oHMgaCuc9c4VfvVdPN')
+            -- and project = 'pumpdotfun'
+        ) dx
+        group by 1,2,3,4
+    )
+    
+SELECT 
+    p.token_pair
+    , p.token_a_mint
+    , p.token_b_mint
+    , p.one_day_volume
+    , p.seven_day_volume
+    , p.thirty_day_volume
+    , p.ninety_day_volume
+    -- , p.all_time_volume
+    , l.tvl as usd_liquidity
+    , case when l.tvl = 0 then 0 
+        else round(cast(seven_day_volume as double)/cast(l.tvl as double),0)
+        end as seven_day_volume_liquidity_ratio
+    , '||' as split
+    , p.projects
+    , p.pool_ids
+FROM pair_summaries p
+LEFT JOIN liquidity l ON p.token_a_mint = l.tokenA
+    AND p.token_b_mint = l.tokenB
+order by one_day_volume desc
+LIMIT 10000

+ 0 - 0
src/library/分析.md


+ 73 - 0
src/library/学习记录_杂.md

@@ -0,0 +1,73 @@
+关于流动性
+
+https://learnblockchain.cn/article/274
+
+对于 K = x*y
+只有当交易合约中的流动性增加或减少时,不变量才会发生变化。
+例子 ETH ⇄ BAT
+假设初始为 10 ETH 和 500 BAT
+Invariant = 10 * 500 = 5,000
+
+Bob 通过发送 1 ETH 到交易合约的 ETH 池中来发起他交易,在此基础上扣除 0.3% 作为给流动性提供者的费用。
+剩下的 0.997 ETH 被添加到 ETH 池子中。然后,用不变量除以新的 ETH 总量以确定 BAT 池子的最新大小
+Bob 发送:1 ETH
+手续费:0.003 ETH
+ETH pool = 10 + (1 – 0.003) = 10.997
+BAT pool = 5000/10.997 = 454.67
+Bob 收到:500 – 454.67 = 45.33 BAT
+
+**支付给流动性提供者的手续费在先前 Bob 发起交易时被扣除,现在这笔手续费又被加入到流动性池子中 (这意味着不变量会增加)。这起到了向流动性提供者支付费用的作用,  当这些提供者从市场中移除他们的流动性贡献时,他们就可以获取这些费用。 
+由于这笔费用在价格计算后重新被加入, 随着在交易合约上的每笔交易被执行,不变量逐渐增大,**
+
+
+ETH pool = 10.997 + 0.003 = 11
+BAT pool = 454.67
+新的不变量 (invariant) = 5,001.37
+
+
+在这次交易中,Bob 获取 BAT 的兑换率为 45.33 BAT/ETH。
+
+输入:1 ETH
+输出:45.33 BAT
+兑换率 = 45.33 BAT/ETH
+
+
+**综上 随着在交易合约上的每笔交易被执行,不变量逐渐增大 **
+
+对于一个短期拉升 大约1000笔交易 K值变化不大 可以忽略不计
+
+eth * token = K
+price = eth / token
+
+price  = eth * eth / k
+market cap = price * supply
+
+price 与eth的平方成正比关系 
+市值 与 price 成正比关系
+所以 流动池 eth*2 ,price*4 ,eth*3 , price*9
+
+
+PUMP.FUN 的定价系统中设置了一个名为 virtualSolReserves 的前置虚拟池。该虚拟池初始包含 30 枚 SOL 和 1,073,000,191 枚代币,其定价公式遵循 x * y = k 的恒定乘积规则。
+经过数据拟合计算,初始的 k 值 为 32,190,005,730,每枚代币的初始价格约为 0.000000028 SOL。
+
+
+Pumpfun上的代币总发行量都是10亿,精度6,成功发射后 LP 的自动燃烧和合约权限的完全放弃。用户募资与代币分配用户通过 PUMP.FUN 平台的买卖操作,共募集到 85 SOL,兑换得到 8 亿枚 Memecoin 代币。初始流动性池的建立募集的 85 SOL 中,79 SOL 用于初始流动性池(6 SOL 作为上币费)。额外2 亿枚代币,和79 SOL 一起添加至 Raydium 的流动性池,使最终代币总量达到 10 亿枚。Raydium 上市后的价格与市值代币 在 Raydium 上线时的每枚代币价格为 0.00000041 SOL,是初始虚拟池价格的 14.64 倍,上线瞬间市值达到 410 SOL。
+
+
+pump发行到raydium 初始的池子是 
+token 206,900,000  206.9M 
+sol  79.005359202  79.01 sol
+
+ 
+
+
+token * sol = 206900000 * 79.01 = 16347169000 
+token * sol =16347169000
+sol /token = 2.293e-7
+so sol=? token=?
+please answer:
+token ≈ 873095.04 sol ≈ 1.999999
+
+sol = 61.2
+token = 267 110 604
+

BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/.~sec_sol_transfer_depth_01.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/counts_sol_transfer_depth_01.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/endaddress_sol_transfer_depth_01.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_128StzFht2ALnHGTZN2CKdSwT7qav1T1mwLN1hUSwhFu.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_1NB7g5Ysgn91aHKiWqhKJzSqygqEkyKiu1eWVKVeP9Z.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2Gj1xmqgxyFHuFxA6FHLcwYPHkqsdGf2H9bdtpYFxgzn.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2GjViMLQBVX2F7F1xGwuxYUkYtPnJ4qusjxhX95DG7xQ.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2TvYDht6fQ9WencbkdHo5zisdWU6z4EDvvTjdVekmqSJ.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2cMTx28rcNVTmSJvzvZLEWaNg1SKsKyL3Yz6tpkJc9mn.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2dVcvshsWeRXAMoy7h2Ae1V5sNS6qcdLF5APMo9UZ6CR.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2oLAt5nHoM8jrfFqqDvYcehXgn9oPkySCJsA1TALRWAN.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_2yt4c1KDiWDzz62aj6jSjHVpzd1WzAYvuAjqDPqKLLFR.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_367CqCGUSBhrpfhBoXxCKjbXBNP5aMFoyVHd1vQ5eHc8.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3GH5GyVqRRdJZggekBrPLssHbW3Qg9Y1Dgsz8KG1hs1S.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3PDgR3Ti6DJ4FRUxt9BGHvdxKjFdNMfkPm1duPaH6wH3.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3RQzC86faRYAgHjWx3jnfbt8PfwM6cLLD81d73LinwBi.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3ZfGsZtPW4z1VD9iD4tDrkocTGC2LjXMtZYHn3szTaf6.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3gAJAMY5fRD4QymyHPik9db5FpRADBV1cJ7uzfpiVyDk.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3tApYF7oDnXuu5oDrjXrYQHF2jo4ED4MRx4RjNxdEnKD.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_3vjvHYUVdaTDwaDxJJPM5d2ki3tLwKobMdPAMWmfDrE5.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_41Dkni5dyHranPKq8p9fTwQ7hy8dPPnR9iwMBmyM5sDj.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_41x6KhvrSbmf1285YUqHvQpc9BtYNek5A4xJ3sdbg4yL.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_49wTvcmWH1rZmMxMDRT5DgXTs7YATZ7WnnuyhxGEpRyT.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4LQuLeQYrAsqHtsJ3s15dT8A4Jpbr6iEKnK2DJAL7ZNo.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4XUt1qCfA11eSakcibiiiqSUK1NjH4gRNca3btYt1k3g.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4ZStjfNTvTDHGsBGqQLTfXvtALMHwnfpUEdbnRmgbPVm.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4bCghpnzid8MSw3KV4A449zqeFuKxL59f4rvKMAT3pLB.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4g6MzgJ31eHwTgUWUrVAEkmcVZ5HYnKDurHq8Qa4ximt.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4jK8T5BnkNWEZWHukJ4e3NSDVDa7MmAMr9Vw6xp6PJer.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_4kBAKyY6wYgqHsWTUnanQCtqu8qCc5Ln2b4f4ubQqtbq.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_58YHxodnzZKxVBE5EsATs38ywEFV7M8ijjBoBkYAJY8J.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5E7G5aiJcsNa6euqxEXgZdwGM3fu9sAVpqY8S5Hz2ETY.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5FZ6h28UnFkZ43PRFvMcwSE9kcdT4YNmcxvqdpHe6MuW.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5HKmPLjiFy7RqfWKCrrSGPvoXQnXfnBahRya8c13FgHd.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5KepH8US17rotNGJfZFpPRZShERGJnKwDieVxgeEH6vr.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5N3mvHw9ZiZ78vQFcMrZ4dT9tQ98SSsE5dJQeqciV7Km.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5ci8DDNfyBhcrV7aqbNRRwQRNSGeZMrtt5xvj79TQMqw.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5d2PUxoqCcRSThzgtHx8gEH3zeqZsWbAEpzaM5zmGFF5.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5d9b1VxTz34nKuWaLAQ4oTzo9rrNLVxWycjds4pGBmfr.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_5eftcUwY3GHQ8gtJ7h4sfodfj1Lwo94bDGVmavKGyNMy.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_62GvRgevD9g93xoyV8SjFL5VKF2h7YhCvJWiLzfNm8uC.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_6F46dF6X3rAaXVVGJf9nc3Paikkx9X8WXKwuPGAjSpRN.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_6Rfe9s46Y7VByLjsGg2h8SXvSsAh6ScM3PBm4joxLuGD.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_6iXMRCCBuXDNP2sEKERdqYwJn8BzLjH55NCu2RcsYg2Z.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_6u7AwDsnuvrpmkZGvTdcvnYBuCKM8meMXpkQfbfj1fbK.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_71miLUAUhRmLtahde3e79XzG3yLQGDkw3vkJhRrr1WBq.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_7EkECtKSZFTyWNa77xPPQ52Jm6or5612SUhBtFiQto3v.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_7jVioPMErQMbCmbM1Hx8cXzecoc1jH9ZyvAJLKPTs9M6.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_7vQ49m5dsgfKPBSwUzE3epRYjD3DLXEXXLEnrn1bD3ac.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_836one7goxia2TnreSzvoNArsq5juCjDtY3eqtfyLNsJ.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_88ux1j5Dmv9QrtBLxCVie5marpNv6iuocHjeUQs297ki.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_8D4bknJuKUH1LgxAXLAJ9ZcQz2Grfd2uyF37QpmQgyWc.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_8cy6GzSnnY967otEFMPhkpUKKqaqHb1LMGSNnQvwvBUr.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_8uHN6nXjEVR6rNvBRHH465QpLmAyqA3RSwsHCzK46uBn.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_8yBgWwLK6JBKVVpqtAxnjcf75qRPNBiHH85wruwp6rin.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_93V5ykGu4KChd47d365AT2dQvAM8vTnH9o4ruWZZuqLQ.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_95GgGqZx9EjHrpcARw8k51KPKjJ9HsdQPq2j7HmPNoSn.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_95Prc5fdD2nxo35nNdxLxiEENwEfegHRAi6aGjWNaUvb.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9LB364wgGh3Mc57Mvg9Vi2gzLFjc7sJBUkRgQ5sBfaej.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9R4gSQNZPbEiJMKm12fVAh7pVKPBXjbiojHxHeUSe14b.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9U2nDnZEHADzrJHzzBVU3eJQKmf1tQ3pWh7zCKKyj18s.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9Yjr9BhdFthLzQMW4kY7j6rcDKXC3Wvj74p7bCsFVyyJ.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9gpss8bMuEA5jfunfL3eCDJNZ5fpc3vY2phWFKpr1YwR.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9kTx1no1d1C81N8zFT6ck4S5zvKsgpbbLEUf5KZJeC32.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9p4LXuXDsY6Ec168bdLM8vL5PwYrfpNcoHYg3cifz97F.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9qM7zMGMWAUEb1NpT2moEhCJpSENs6gJpudoQ1zhXvVT.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9zcddzV4MZR41c4CHMcyy7t8z8o8kTbGst3xi3rrbnkZ.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_9zckZP4aqjo8kqLJu2uaig8pZ7yDNmfTBKmjc86F4wfq.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_AFcXNrFiQehbJxFePzabUBKeyvF2kVhKjkYXiS5EtcoK.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_AasoHP85u95AygsQcUb4xF4eHzbwL8dCWMi2b6yoUSFu.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_AgPsPtpAiQqMtcmSsGEGvje1dXTco3NGi1gAF7gvYC7L.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_Ak2TDudVcE9hGQC6hzKnEqDAQzQ2ypGXU5FMyFPf8YAu.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_Au3Q9LTYRQuEDL93vksznXuc6KqxxSTd7Zb48Fz4X8XR.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BAgn8NWpFqkXHkGeztqJU69rq3f5ngzX97f793K1BKmG.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BBjXNAHiim3QMALgBhHjDkXNVhNwE9FAsC8SN1ePayeq.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BHzdUWA2yZ3nDFhwbdXPtho4n1gZJLSFpbTd78B9inRe.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BJmzvYR3N1TtJPmuGMA9Hc1JCcEXBiGbVVRZJKPjT8WK.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BN1N6fmvPx79At26CMhuS9PPNKGnArQjShHQzyzvkaSh.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BNBx8JBvxrmM699C92bZQ7VKngdfcdudFcQrH7oLnFvw.xlsx


BIN
src/librarydata/ana_dalao_relation_by_solscan/4GULMPKBJLruChBZWksZzukAg1AjSCmCTMn9ny2Xpump/depth_01/final/final_sol_transfer_BXvEmdFHrSCDE1DYg47U1SgW6juGtSHfx32ijpM5oq23.xlsx


Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov