修正cec claim后, 状态没更新的问题

This commit is contained in:
CounterFire2023 2024-09-09 10:32:17 +08:00
parent 8595bc0e47
commit 1a9501717b
10 changed files with 613 additions and 11 deletions

248
initdatas/cec_tag_holer.txt Normal file
View File

@ -0,0 +1,248 @@
0xce3065566de9be9f7f66d40ea358ac7eaf755811 388983.0508
0xdc6f942ccb8d20d135871eb6fb345a34991e5d47 101694.9153
0xf14b02ce886553b754ae77abff882dc468f82b28 38135.59322
0xe0deacd9aa484e0cb3a370da4276570c29a7ba04 35593.22034
0x91af1d9a7d4041eba4e5cf6f4c792b1b6db6ec3b 33050.84746
0xcd64bb95ee1b3a95586836d636849b71b871732b 30508.47458
0x931bd858fd7bc2960f51a42489b84805881036cf 17796.61017
0xccc1da34fa80458c4585d205857c8ea9d5ef94ea 17796.61017
0x9fb23a9d484ee7ab3e5ec864da290e72b79716fe 15254.23729
0x8436641d7c21540562e57abad156963e5291e22b 15254.23729
0xeef775dec9fb448b68545ccc3a3c939fa36b1b4d 15254.23729
0x17075c6717579318d2fafea354a23c59f31aa5c6 15254.23729
0xe6be914865be32551793e378bccc9326d00d1a31 12711.86441
0xddd1007d7d2272a59a2626bd92ae24bb43068db3 7627.118644
0x05615398383d59599e30a8577bf8e23772d0d911 7627.118644
0x4442b1f594e6cf47fad51c5ecb3d977f6ec7a66d 10169.49153
0xc3a1717bde32c99202f56dbd0865e5f9ebb09482 10169.49153
0x1d7cc86c28a75bb8d4f7a994a9f7775faaab1740 7627.118644
0x061f1b164a0b5d64f553a8370842b2ece667b71a 5084.745763
0x3c4aa4530b1351bad6ca196f418fbfce628ec6b8 5084.745763
0x463217d8c4709d7000970126283d29fae984d307 5084.745763
0x08edc50e8ab47649c216f5d16088708f66411541 5084.745763
0xb67584d56580dfcb205749aee2160148dbf08741 5084.745763
0xbd3a8c711a3e7b73efa40a12a35fa8bb92fece58 5084.745763
0x07091fa2721bc19f5e31629af83b982777ea23d1 5084.745763
0x53c8b1b74d31f3dc908c591fe3e491c740d67c13 5084.745763
0x128dc7e97387477807464a1ced349de98d660020 5084.745763
0x4572a8fe85170976c7f6046cc16e317e94b9a338 5084.745763
0x1280b37a5fb199149e62868aa87ba7eb34f0e91d 5084.745763
0x381921bb1c940eaecf2bc40a6dab81f970343299 5084.745763
0x6c40630cb2bbc2982dda3768219f0a78b4bb67a6 5084.745763
0x054573071ec476408039fed5a16333d350dd8a70 12711.86441
0xeb3a320fcdb8efe552ee1fd2eaa2d22274a39499 12711.86441
0xaca7ca703beb966a7e2abf8c17262509da513e78 12711.86441
0xa741bafe0b2c28af674097fe9610ad8d816362a6 12711.86441
0x0ba881395ae4697c58a586b4b2955d2d5c130807 12711.86441
0xd78e9d7de29c15d982a4a0654583b59e52fd77e5 12711.86441
0x326e77b0fee5411f21bf5064d06b793182519720 5084.745763
0x344ad6781370af1d1a21a81b1016ce278bb24ea9 5084.745763
0x90d4a8e0254ff8665e2311578a7355d5e3c10458 5084.745763
0x83232fa96e47914b3367b8a9658100332251b4d7 5084.745763
0x111ab543956d3a7b4dcf4ac8a41b303fcb19bbd6 5084.745763
0x459cb09dc26923635623dd88aa6d101f585d8832 5084.745763
0x15929d5e816d23a3ff8b447fe57b28cc524c1dd1 5084.745763
0x647c96d571c1a157a02c498451c594635790c988 5084.745763
0x1fd0368c8dd316ba3e95c6799511197c2f13392d 5084.745763
0xe4fdc74545ce4dd153e940fa6e286f832a8d471d 5084.745763
0x6fb04a8d70a797d2ac9ce2b6eba0fcf3f00f9e51 5084.745763
0x709998b6cb56a467ed44f7c06082c2dd2a0ca697 5084.745763
0xab8471472b825880d6f2865879229f547efefe30 5084.745763
0xe123c76c7d1cf96fc05752580a4817ca1d9febde 5084.745763
0xfa53de399971e0a05b7ed03462e63ad2c6026fce 5084.745763
0x90cdba3a888e170a5b7fef40f525991205edfde9 5084.745763
0xbff1ef6e9185d4fcd646552c9a206bd3ad76d600 2542.372881
0x63e53c6226b8133db3f35865e5b44174ca674aaf 2542.372881
0xb4c0834512e136f9a0760fda009846f8d50d79af 2542.372881
0x1b24fe44d4b1c7fa0b5329c2a3c0ebc13967625a 2542.372881
0x0711ce8fc0a94093eb3ad4bb422fbc26837c6399 2542.372881
0x3045e9baa118555f1c5fd8c791ff82165aa3a7ae 2542.372881
0x4b2289a61a5fee9d8e7fd1962335ec6086fe58e1 2542.372881
0x422dfbb161b364b21a33cf04d1251168c49b0603 2542.372881
0x65e5df518d7ec395256df4df598b823d17c09225 2542.372881
0xd41797b1336e6cfa9632f347a628acf10f22e7bd 2542.372881
0x9ac6a254ffb55022e9563f5441ad434d59a6d8b8 2542.372881
0x60fd35191ffa774e40934efb8ed34b2ec42da320 2542.372881
0x5513ea4be72db2f85a19281085ffd0cfaa52e692 2542.372881
0x10c7a6e6e88441f85413e4c5290704604a04c0e1 2542.372881
0x66da213025fd3c313a10184c97cab4f44e4e75b6 2542.372881
0xc4a65629636ee4a1a31ce55cc32b6b1a429ca156 2542.372881
0x40ba92d5fa03634ecb5ee70d44a8a7f2860d7561 2542.372881
0x4133dfc1532e6e666d37099e73be00c4934e88c6 2542.372881
0x1fff60e63d365fb485be75a6f3f9eab9db724348 2542.372881
0xbb7c26186b783c528308b88cfd4b8c088a4a9de1 2542.372881
0xe77b50153d64d112f0ae705d8a743f95939cb00d 2542.372881
0x44655092bebabdf0d3e3b4f90f7f94afec904e72 2542.372881
0xc1f298bf8e8385320a0752cc9fe1009213688186 2542.372881
0x62f6bf824aa091266c92dce575bb2e6de6d23984 2542.372881
0x07060eace5e1425071a13557a77312acf15ccf93 2542.372881
0x1157261d71359053ba4373404375b5d7de0dcbac 2542.372881
0x514ee7b24fd24cdab59703e9132d5bbdc2349b75 2542.372881
0xcf001021fe6d8018139be807ee0542e26dcc7455 2542.372881
0x9181ba66a0f5fbae05c46c39ad9cbeba452e6454 2542.372881
0x8463f77cd9bd211ee7deb854d6f1c24a0b50fcce 2542.372881
0xffbfec64e1cf52a089a971da456eb904103206c9 2542.372881
0x110177710ad083ecfda2e73ae4ca6925dd6e9495 2542.372881
0x3ea06201f8f7dc29ba776e6ffcdf1ef77528e8b2 2542.372881
0x2102a9b98f899bc2ae30e00deb4efb38e1b79cde 2542.372881
0xbb673508a9a784fb316042f57502b3d442fa3ba6 2542.372881
0x61939bb47bb247c87e2c55c98a8fd15ee2bb56ce 2542.372881
0xad47a5f98174cbea6934e8676d54bd36ae07d225 2542.372881
0x8f10cf7e01345d29c4d708ca6cc36282a8add12f 2542.372881
0xeb0939d7a8555106c187a17c9cfa8409d8cc2cb8 2542.372881
0x441b63ca9f57f197c54e5b0f6c704758a78043c7 2542.372881
0xef62e5468da004935d986ec149db4e37841a833b 2542.372881
0xc5c6f9f0ea697c4727190da140bb776adae026b9 2542.372881
0x99f5dfafb3bcd5bbcffce553e6a35fe5e1b08aca 2542.372881
0x02aec689a094226aa529d64b1f9714901b8d6215 2542.372881
0x82b7a1e57aec7e14801b3cecbbe38fc2335ec16c 2542.372881
0x46f9cda8e931af33390c5e66db89a42d39f91007 2542.372881
0xc9f51c54a7c3d26d62a8ac3a7c6bffdd5a6a9e53 2542.372881
0xcc7079c9691d1ff5a6a82e7a1e0ef0c7c4fd859d 2542.372881
0x36864b2234877af60b1d57c7c317df3812d9987a 2542.372881
0x54be3a794282c030b15e43ae2bb182e14c409c5e 2542.372881
0x481f99f02133e2e0d85f6f6248f2ad127d359659 2542.372881
0xac59155d707121d20d803c0348eac37f8f410a46 2542.372881
0x2d750f37415ea2cd039b8e0b20e37671e742b05f 2542.372881
0x05adf3093237d32d5cfb0a2f7c013197ae070545 2542.372881
0xa2f0d3582f4dbcedd0977856c528eab985d92afb 2542.372881
0xb46bfc7d387bfc4e56bf013d4b1e2246abf456f3 2542.372881
0x4875512ba1307729c4a767ed343e620efbbc3f77 2542.372881
0x3fb26fdc65754fdeb3af6d5e9bb3d2de8154a988 2542.372881
0x0166f6b0ac0900d0b7499755bf7038c4cc819b04 2542.372881
0x9d1817d6fae6bb8b79b1113a32a6c178f6f9b8f8 2542.372881
0x389b1930726972734b576965cd305877840cc33c 2542.372881
0x110a929df2c3243046c562bf9d2988a340ebc584 2542.372881
0xab8f80824fc189026cb887f22f3cd53777a374df 2542.372881
0x2e79750671de844a2582c8ac2678a8afa6ce127c 2542.372881
0x4f957d7e9bb1db3583e5f34774938413bc1a37ee 2542.372881
0xcf0ef234b1917a50b7d59c10e043bbc4c80e03c1 2542.372881
0x210b8b648220a4c7e1bbe508c7b9723e2ecdec24 2542.372881
0x84ea3f44ecfb6c9de86df307e668a9edcd920a4d 2542.372881
0x5c46bcd2afc105a165b6796e211be786a5c6278e 2542.372881
0x17d36852625cd08bb7a538c17f498205cb8db537 2542.372881
0xbdd877681a214e3b9bb280f9d40192f8e048a665 2542.372881
0x8f3a94725a7686055d1aaba8a41be506c5dfd079 2542.372881
0x73da1af06106a7f3ac717ef0fd637177175d98b7 2542.372881
0x0da1ceb8c2edf88c240e259cc8a481ab340d7a55 2542.372881
0x0a7e31ea661a6e09055e849c43848d8420e44778 2542.372881
0x4093455e238eadeafb2da0b69b2ed61234cc8239 2542.372881
0x94243ac3848850064511a616911c5ea7e5b25f92 2542.372881
0xc8c311e8a266a3c6f959433df7c11a05446dad56 2542.372881
0xc6e7a4b569d4ffa6d4a5988bb2129aae9067acfb 2542.372881
0x1a0ed79a4742a1cbc7c2ea39bc33da9e26ee0501 2542.372881
0x6e647959ed844044f25b8c77b34c2d0c399870cd 2542.372881
0x8210a401239f580280ebf85082278e2266af8b2d 2542.372881
0xa045bb2c43bfb1d4286e88ca60355e7a0d9746cb 2542.372881
0xa215b8e30765e30f1faa78e786aa7cd119c3157b 2542.372881
0x5cd67d75e55266be41732c1320ab077e6d8aaabb 2542.372881
0xb2767b2646dbd09c39409fa990d582f36effc3ae 2542.372881
0x4f0130ba51d69c8a0e70f990fc6f8638229c36a7 2542.372881
0x6bbfa2a1faa657f95282673437b005d1838049ba 2542.372881
0x299b54926ea6e99f0c82a2259749eea19e76c283 2542.372881
0x9c9da552b36cc275c0fecaf508bd3327de944bff 2542.372881
0x10ccefdd1323a0053f9bd819c1a7b8c73aebe959 2542.372881
0x67f05ad11c67c72d8e3f0d6d3f05e2633a531b11 2542.372881
0x6c9e3cc54248973b5e52a65348c3f89d2abb3c42 2542.372881
0xb35d77527e9887f8343d7f44167a74ca06008c49 2542.372881
0x32c0a4c8cb0d937c5e2f188a752ec2f591627b39 2542.372881
0xd039b418180875f2cd413764349462b68c1c6460 2542.372881
0xe73aec59250a38774638bf54e8a6277aac225735 2542.372881
0x0decb04d7f0685d196beb845a62356ff2c4098fd 2542.372881
0x68e33a587f1d697c5e0f8b8794cfa304b41a61e2 2542.372881
0xa8b818472b0f855119481953eb696a8cfec5f6a7 2542.372881
0xec544182ac353cc0cb632de61dee13cfda947472 2542.372881
0x0b3be3ee356ce386592f6a944ce9dfc81d8081f8 2542.372881
0x61bebcdc0de0c3d6ce7f7fefa795856f984d570f 2542.372881
0x1941b936657408253f5c5dec9c7f5bbf84c760cd 2542.372881
0x5f9e09b2243f0c950fc2f7e1eb1c681f4aa8a1f1 2542.372881
0xaf4e4c99078be26db80f3bcd08dca89438024f4f 2542.372881
0x44239db3d29828d05227b02c2e5b23a5c6919e44 2542.372881
0x7c0f69d80b87b5403aca1f28e5eb95cae95cc649 2542.372881
0xa2cad146bb7f1e72df8884539d4092bec51520a8 2542.372881
0x70a7ff43e7dec3d1faa4db8dc7a1fc8faf45ef91 2542.372881
0x86920e21ab0c18832369c2e09e93b27c4a5a1750 2542.372881
0xd13a48109203ca22a0221a1a094ba8a033e112ef 2542.372881
0x84264f134879b7ab714ab18ab653a73dd5448b16 2542.372881
0xfa61cac2c8fd3b5a7bbfc0934284913b157e68aa 2542.372881
0xa8078c69d2974e1a90e5aa0b3a3443742065241b 2542.372881
0xad2dea1977055db01c66e6e53309c4604ab869b8 2542.372881
0xdfe9c04c39a0b21929e71b43757be91ac36b0243 2542.372881
0x46b399d3685bd5b0dadb613ed363469ffc985687 2542.372881
0xd8e1c7e0a9dff7cded0303af9252ec8f32dd51cf 2542.372881
0xd077bb17d13247be1227d4095fd7d790bc714132 2542.372881
0x1487f1b080a2c726b24529676ad8ad3e5dac8eb0 2542.372881
0x9c0171bd82e40265c146a01b278087a5947f91e1 2542.372881
0x7ca80728e8c06482412f7ead49c0e9b1b8bbb51c 2542.372881
0x88fd9c3b74b3559c2dc2f474f98296042ae87011 2542.372881
0x81683af10aa7ee91f8df570726f55fd00d2915be 2542.372881
0xe8c4170f68518c3b6bc3c6c9b33a071bea44e569 2542.372881
0x4259efbde098e67cb45a8e23ff8f9a4b155d6100 2542.372881
0x1aa666d676fde62ae9477c75e7f501f214d1849c 2542.372881
0x94e403daa95675d54bfaabaf49b1730ec80fe13f 2542.372881
0x141309877d11e6ff4302824c836675257f89f6b9 2542.372881
0x4a92b853b30c01fb167c65bdeb9a8e6e14b74f52 2542.372881
0xf388b107e627a47bd12ab8ad732fc1d4b9253c42 2542.372881
0x2b65f85e81eec21eda840b8f9c4fd657f917b092 2542.372881
0x13cf64fe5bef40e44908a6cc0aa7aaf8e35f0bbe 2542.372881
0xc87e9dff30a7472329237c4ad222b35b529f0fb7 2542.372881
0x88b7b36e038d4c2015d2c4419613d4ac093356e5 2542.372881
0x9fae7ff188aaf70bdc9f0567cf1524df260dc8ee 2542.372881
0xc196eb8d5a08fb6ce0297b2748e18137f2b431fc 2542.372881
0x96c3a3795666d2e3909aa360dd2c4e6bed63dbd7 2542.372881
0xf2aac76a8dc431201bf61528d99a30cfd37217dd 2542.372881
0xaff81e3f863d19f1d2ecea1e54f4e988131a6122 2542.372881
0xf025f82c16d5809a55cbccf3f373020b6e3b8b01 2542.372881
0x8d6662deb08786547af2c10aa609d469e545baf8 2542.372881
0x89d2d15bf0e3dbc0caf4620d1a694a3f7dc25c4a 2542.372881
0x90f99fea4275ceddb169c631b5bff96781cc8dcc 2542.372881
0xbaaf5a2178e9fa656513c27e43a393661b255332 2542.372881
0x47954ca71620e84b0ad8212547a2f1d7d3976e3a 2542.372881
0x5c2260103ba960d23603a7b824c80a24eae159b9 2542.372881
0xbfe1d5893ddbb0b04e52afdbdb18842f42d733cb 2542.372881
0x3c685d3a0e3f2b87ccfba12aef53dc00a605f797 2542.372881
0xccede66765e2334c717280bafd5dfd0e3d7d1e32 2542.372881
0x6a9eabbe45c28311911429e589723228c0eaeebb 2542.372881
0xb6c4421ccd6be35937e9eda7326f8c01bd401c73 2542.372881
0x4357637b486fe60ff11b4513e636c00f7833dd4a 2542.372881
0x8256343b66dc32c06347673411c0e3d4bedfbb55 2542.372881
0xab6e9887e3c6777095ae910ac7973e77b0f3a577 2542.372881
0xbda75d5353a24f5d96c70a744a834d59af873fc3 2542.372881
0xf1092fffdf736fce2881e16a57c3c68ac8e745d0 2542.372881
0x6c433968265b57e74584309b2364af6d6b394ca0 2542.372881
0xc497344dca4f96ae5d9aa2590234ea7d27fa2d59 2542.372881
0x0722cab71aaded9ed36885c81828870f0534fcfc 2542.372881
0x38f9ee175330828050640ee869068307770984c9 2542.372881
0xd78519e60f29412615a256ca2dd17c7874afcf5b 2542.372881
0x68dda17c32dc46dd13091b34a1d3108ac7b6a68b 2542.372881
0x4ecd795a981842fd626bb6cd6bdb428d8de0a719 2542.372881
0xb703b053556cc3f60d4a0f12813e7fd288912c7d 2542.372881
0xb1c722ed5734d974eb5e52e77d9d4c6b5ab53de1 2542.372881
0x9499054d02a725316d61fa896c29d58550ee4a5b 2542.372881
0x701023a62871ad80aed12270ad5f0296cbfe8e88 2542.372881
0xc6292599483a251a1c1c28ac5eb351061c5f69cf 2542.372881
0xbc382148266fead8ea2762a2725de6e0f12f46b9 2542.372881
0x8eec94936ac76db13c016a64939f3b0830dfc2fe 2542.372881
0x1d074d446dc3c8f83390f36cab81528611ca353a 2542.372881
0x39af18442470f2f6fd670d23466a02752ef55142 2542.372881
0x8b6b7c70aa678e0f93808be74dc4b64bf3950e87 2542.372881
0xd25db8c6bc09500ac7aa227a8e9d8b598d009f37 2542.372881
0x2d7cf39e1f50efc84334ae7d5044dbc6c6241798 2542.372881
0xb0481e4d9513924d3eef075781794ea81b14e0f7 2542.372881
0x099af32b55a6f050f5852d2034cec92172f3f5ba 2542.372881
0xd32baa0ae934520495f9134c3fd8a172989dc0b8 2542.372881
0xbcc93f97e3bbe689caeb5d935fd85879e2a09aad 2542.372881
0x14de65035af2634176876f51ab41bad38942e8f5 2542.372881
0x9c1218103846887b469dd55b36de440cfa42045d 2542.372881
0x4db49d1ebaa49270f252b7343cace7b95e6578d3 2542.372881
0xeab824e199cd3bd5a657ab06d5502df66b5f87fc 2542.372881
0x22dcb6342ef319a4d8b92b19fb280a0983940c7b 2542.372881
0x1e676020e23255e4ff088e149e8fa047272d871b 2542.372881
0x649b0894ce2ba6199f923f7db0c45625020c2427 2542.372881
0x364e2aea672a791eb516999f16f510b92699a98c 2542.372881
0x19747e0527d3f7b8bd3aa7b147d4a61435d08824 2542.372881
0xb93b813eab11a81e52c7ff20e21b8bd8d336685c 2542.372881
0xc5299f30c24ec5bb0d225bbcc43f50894d6c6124 2542.372881
0x4764e2d1f34406cbfcbb91759103db97d8327e36 2542.372881
0xbdff3294962039e9308f364e9312e1f6aec926c1 2542.372881
0x71ce8da3f53254d414e9749ac028ea0932d58f9e 2542.372881

View File

@ -23,7 +23,7 @@
"sybil": "ts-node -r tsconfig-paths/register src/removeSybil.ts",
"releation": "ts-node -r tsconfig-paths/register src/updateReleation.ts",
"rankquery": "ts-node -r tsconfig-paths/register src/rankquery2.ts",
"mail": "ts-node -r tsconfig-paths/register src/batchMail.ts",
"mail": "ts-node -r tsconfig-paths/register src/batch_mail.ts",
"eth": "ts-node -r tsconfig-paths/register src/queryEthTx.ts -s 0 -l 10000 -k TC7Y76AS4AMQ468XXNKKF2R3TI7V844HUC",
"taskid": "ts-node -r tsconfig-paths/register src/generateTaskId.ts",
"token": "ts-node -r tsconfig-paths/register src/generateToken.ts",
@ -49,6 +49,7 @@
"fastify": "^4.15.0",
"fastify-plugin": "^3.0.0",
"fastify-xml-body-parser": "^2.2.0",
"fs-jetpack": "^5.1.0",
"get-jwks": "^9.0.2",
"google-auth-library": "^9.9.0",
"ioredis": "^5.4.1",

118
src/batch_mail.ts Normal file
View File

@ -0,0 +1,118 @@
let fs = require('fs')
const EMAIL_LIST_FILE = 'configs/email_list.txt';
const USED_CODE_FILE = 'mail_out/used_code.txt';
const HISTORY_FILE = 'mail_out/mail_history.txt'
const HISTORY_FILE_FAIL = 'mail_out/mail_history_fail.txt'
const mailText='Go claim $CEC to Bitget now with 0 gas fee and grab a share of 1M $CEC rewards!! https://counterfire.games/claim \n\nDont miss the chance to increase and maximize your $CEC holdings.';
const mailHtml = `
<p><img src="https://res3.counterfire.games/bitget/cec_bitget.jpg" width="800"/></p>
<p>Go claim $CEC to Bitget now with 0 gas fee and grab a share of 1M $CEC rewards!! <a href="https://counterfire.games/claim">https://counterfire.games/claim</a> </p>
<p></p>
<p>Dont miss the chance to increase and maximize your $CEC holdings.</p>
`;
const sleep = (ms) => {
return new Promise((resolve) => setTimeout(resolve, ms));
}
const file = (path) => {
if (!fs.existsSync(path)) {
fs.writeFileSync(path, '');
}
}
const read = (path, encoding) => {
return fs.readFileSync(path, encoding);
}
const append = (path, data) => {
fs.writeFileSync(path, data, { flag: 'a' });
}
const send = async (msg) => {
const url = 'https://oauth-svr.cebggame.com/mail/mail/send';
const headers = {
'Content-Type': 'application/json; charset=utf8',
Authorization: 'Basic bWFpbHNlbmRlcjo3NjU0MzIxY2Yt',
};
const options = {
method: 'POST',
headers,
body: JSON.stringify({ message: msg }),
};
return fetch(url, options).then((res) => res.json());
};
const sendOneMail = async (to) => {
const msgData = {
from: 'Counter Fire <noreply@counterfire.games>',
to: to,
subject: 'Counter Fire TGE confirmed! Check your CEC airdrop eligibility and earn more now!',
text: mailText,
html: mailHtml,
};
return send(msgData);
};
const sendAll = async () => {
file(HISTORY_FILE);
file(HISTORY_FILE_FAIL);
const emailList = read(EMAIL_LIST_FILE, 'utf8')
.split('\n')
.filter((item) => !!item);
console.log('emailList: ', emailList.length);
const sendedList = read(HISTORY_FILE, 'utf8')
.split('\n')
.filter((item) => !!item)
.map((item) => item.toLowerCase());
const sendFailList = read(HISTORY_FILE_FAIL, 'utf8')
.split('\n')
.filter((item) => !!item)
.map((item) => item.toLowerCase());
const failSet = new Set(sendFailList);
const sendedSet = new Set(sendedList);
console.log('sendedCount: ', sendedSet.size);
const emailLis2 = emailList.filter((item) => !sendedSet.has(item) && !!item);
console.log('emailLis2: ', emailLis2.length);
const lsitToSend = [];
let totalSuccess = 0
let totalFail = 0
let i = 0;
for (let email of emailLis2) {
email = email.toLowerCase();
i++;
try {
let { errcode, errmsg, data } = await sendOneMail(email);
if (errcode) {
append(HISTORY_FILE_FAIL, email+'\n');
console.log('error send mail:: email: ', email, ' errcode: ', errcode, ' errmsg: ', errmsg);
continue;
}
writeHistory(email);
totalSuccess += 1;
console.log(i, 'success send mail: ', email);
} catch (e) {
totalFail += 1;
append(HISTORY_FILE_FAIL, email+'\n');
console.log(i, 'send mail error: ', email, e);
}
await sleep(100);
}
console.log('success: ', totalSuccess);
console.log('fail: ', totalFail);
return lsitToSend;
};
const writeHistory = (mailAddress) => {
append(HISTORY_FILE, mailAddress+'\n');
};
(async () => {
await sendAll()
})();

View File

@ -239,12 +239,12 @@ const exportRecords = async () => {
;(async () => {
try {
// await importCecEvent();
await importCecEvent();
// await importUAW()
// await loadGameSeason()
// await loadHashRate()
// await importGachaEvent()
await loadStake()
// await loadStake()
// await loadGacha()
// await exportRecords()
} catch (e) {

View File

@ -1,5 +1,6 @@
import { SyncLocker } from 'common/SyncLocker'
import { BitgetUser } from 'models/BiggetUser'
import { BitgetBindInfo } from 'models/BitgitBindInfo'
import { SiweMessage } from 'siwe'
import { ZError, BaseController, ROLE_ANON, role, router } from 'zutils'
import { checkParamsNeeded } from 'zutils/utils/net.util'
@ -129,7 +130,7 @@ class BiggetController extends BaseController {
return {}
}
@router('post /api/bigget/verify_email')
// @router('post /api/bigget/verify_email')
async verifyCode(req, res) {
await new SyncLocker().checkLock(req)
logger.db('verify_mail_code', req)
@ -169,8 +170,8 @@ class BiggetController extends BaseController {
return { token }
}
@role(ROLE_ANON)
@router('get /api/bigget/remove_email')
// @role(ROLE_ANON)
// @router('get /api/bigget/remove_email')
async removeEmail(req, res) {
let { email } = req.params
if (!debug) {
@ -190,4 +191,23 @@ class BiggetController extends BaseController {
user.email = ''
await user.save()
}
@role(ROLE_ANON)
@router('get /api/bitget/count_bind')
async countBind(req) {
let records = await BitgetBindInfo.aggregate([{ $group: { _id: {$dateToString: {format: "%Y-%m-%d-%H", date: "$createdAt"}}, count: {$sum: 1} }, }, {$sort:{"_id":1}} ])
let results = []
let countTotal = 0
for (let record of records) {
let arr = record._id.split('-')
let time = new Date(new Date().setHours(0, 0, 0, 0))
time.setUTCFullYear(parseInt(arr[0]))
time.setUTCMonth(parseInt(arr[1]) - 1)
time.setUTCDate(parseInt(arr[2]))
time.setUTCHours(parseInt(arr[3]))
countTotal += record.count
results.push(time.toLocaleDateString() + '-' + time.getHours() +': '+record.count + ' ' +countTotal)
}
return results
}
}

View File

@ -11,11 +11,15 @@ import { Wallet } from 'models/Wallet'
import { PlatEnum } from 'enums/PlatEnum'
import { BitgetBindInfo } from 'models/BitgitBindInfo'
import { hidePartString } from 'common/Utils'
import { FixAddress } from 'models/ctrl/FixAddress'
const STAGE1_UNLOCK_TIME = Number(process.env.CEC_CLAIM_STAGE1)
const STAGE2_UNLOCK_TIME = Number(process.env.CEC_CLAIM_STAGE2)
const CEC_CLAIM_STAGE = Number(process.env.CEC_CLAIM_STAGE)
const CEC_ADDRESS = process.env.CEC_CONTRACT
const CEC_CLAIM_CONTRACT = process.env.CLAIM_CONTRACT
const isTest = process.env.IS_TEST === '1'
const checkAddress = (address: string) => {
if (!address) {
@ -27,6 +31,16 @@ const checkAddress = (address: string) => {
return ethers.utils.getAddress(address).toLowerCase()
}
const removeSmallNum = (val: any) => {
if (val === 0n) {
return val
}
var b = ethers.utils.formatEther(val)
b = b.substring(0, b.indexOf('.')+3)
var b1 = parseFloat(b)
return BigInt(ethers.utils.parseEther(b1+'').toString())
}
/**
* cec claim状态
* , , ,
@ -38,9 +52,13 @@ const queryCECClaimStatus = async (address: string) => {
let available = 0n
let claimed = 0n
let unavailable = 0n
const fixed = await FixAddress.checkExist(address)
if (fixed) {
return { total, available, claimed, unavailable, bit: 0n, records: [], bindRecord: null }
}
const records = await CECRecordTotal.find({ address })
//@ts-ignore
await updateClaimStatus({ address, token: CEC_ADDRESS, records})
await updateClaimStatus({ address: CEC_CLAIM_CONTRACT, account: address, token: CEC_ADDRESS, records})
const bindRecord = await BitgetBindInfo.findOne({ wallet: address })
let bit = 0n
for (const record of records) {
@ -71,6 +89,8 @@ const queryCECClaimStatus = async (address: string) => {
}
}
}
total = removeSmallNum(total)
available = removeSmallNum(available)
unavailable = total - available - claimed
return { total, available, claimed, unavailable, bit, records, bindRecord }
}
@ -163,7 +183,7 @@ class CECController extends BaseController {
available: available.toString(),
claimed: claimed.toString(),
unavailable: unavailable.toString(),
records: records.map(record => record.toJson()),
// records: records.map(record => record.toJson()),
bindUid: bindRecord ? hidePartString(bindRecord.biggetAcc) : '',
bindAddress: bindRecord ? hidePartString(bindRecord.address) : ''
}
@ -209,11 +229,40 @@ class CECController extends BaseController {
})
return { calls: [{trans_req: data, trans_id: ''}], direct: true }
}
// @role(ROLE_ANON)
// @router('get /api/cec/add_test/:address')
async addTest(req: any) {
if (!isTest) {
throw new ZError(10, 'not allow')
}
let { address } = req.params
address = checkAddress(address)
address = address.toLowerCase()
let record = new CECRecordTotal({
address,
num: 16,
earnTime: 'before 2024',
desc: 'test',
status: 1,
amount: '16000000000000000000',
__v: 0,
firstRate: 15,
bit: 9,
claimStatus: {
'1': { bit: 16, rate: 15, status: 1, time: 0 },
'2': { bit: 17, rate: 85, status: 1, time: 0 }
}
})
await record.save()
return record.toJson()
}
@router('post /api/cec/bind_account')
async bindAccount(req: any) {
await new SyncLocker().checkLock(req)
logger.db('bind_bitget_acc', req)
return new ZError(100, 'the activity has ended')
const user = req.user
const { accid, address } = req.body
if (CEC_CLAIM_STAGE !== 0) {

150
src/exportBitget.ts Normal file
View File

@ -0,0 +1,150 @@
import mongoose from 'mongoose'
import * as dotenv from 'dotenv'
import { ethers } from 'ethers'
let fs = require('fs')
const envFile = process.env.NODE_ENV && process.env.NODE_ENV === 'production' ? `.env.production` : '.env.development'
dotenv.config({ path: envFile })
console.log(process.env.DB_MAIN)
import { BitgetBindInfo } from 'models/BitgitBindInfo'
import { CECRecordTotal, ClaimStatusEnum } from 'models/CECRecordTotal'
import { FixAddress } from 'models/ctrl/FixAddress'
const CEC_CLAIM_STAGE = 1
const dbMain = mongoose.createConnection(process.env.DB_MAIN)
const removeSmallNum = (val: any) => {
var b = ethers.utils.formatEther(val)
b = b.substring(0, b.indexOf('.')+3)
var b1 = parseFloat(b)
return BigInt(ethers.utils.parseEther(b1+'').toString())
}
const queryCECClaimStatus = async (bindRecord: any) => {
let total = 0n
let available = 0n
let claimed = 0n
let unavailable = 0n
const records = await CECRecordTotal.find({ address: bindRecord.wallet })
let bit = 0n
for (const record of records) {
let currentTotal = BigInt(record.amount)
total += currentTotal
// fetch status from claimStatus
for (const [key, val] of record.claimStatus.entries()) {
const stage = parseInt(key)
// 预充值阶段, 需要展示第一期可领取的数量
if (stage <= CEC_CLAIM_STAGE && val.status === ClaimStatusEnum.NORMAL) {
available += (currentTotal * BigInt(val.rate)) / 100n
}
}
}
unavailable = total - available - claimed
return { total, available, claimed, unavailable, bit, records, bindRecord }
}
const queryAll = async () => {
let addressCursor = BitgetBindInfo.find().cursor({ batchSize: 1000 })
let available_all = 0n
let total_all = 0n
let results = []
for await (let doc of addressCursor) {
if (!doc.address) {
continue
}
const { total, available } = await queryCECClaimStatus(doc)
available_all += available
total_all += total
results.push([doc.wallet, doc.address, doc.biggetAcc, available, ethers.utils.formatEther(available)])
}
console.log('available_all: ', ethers.utils.formatEther(available_all))
console.log('total: ', ethers.utils.formatEther(total_all))
fs.writeFileSync('outdatas/cec_pre_charge.csv', results.map(r => r.join(',')).join('\n'))
}
const queryFixData = async () => {
let addressCursor = FixAddress.find().cursor({ batchSize: 1000 })
let available_all = 0n
let total_all = 0n
let results = []
for await (let doc of addressCursor) {
if (!doc.address) {
continue
}
const { total, available } = await queryCECClaimStatus({wallet: doc.address})
available_all += available
total_all += total
}
console.log('available_all: ', ethers.utils.formatEther(available_all))
console.log('total: ', ethers.utils.formatEther(total_all))
}
const checkFixData = async () => {
let addressCursor = FixAddress.find().cursor({ batchSize: 1000 })
for await (let doc of addressCursor) {
if (!doc.address) {
continue
}
const bind = await BitgetBindInfo.findOne({ wallet: doc.address })
if (bind) {
console.log('found: ', doc.address)
continue
}
}
}
const queryRemain = async () => {
const bindRecords = await BitgetBindInfo.find({invalid: false})
const bindSet = new Set(bindRecords.map(r => r.wallet))
const fixRecords = await FixAddress.find()
const fixSet = new Set(fixRecords.map(r => r.address))
let recordCursor = CECRecordTotal.find().cursor({ batchSize: 1000 })
let available = 0n
let fix = 0n
let fixAndAba = 0n
let bind = 0n
for await (let record of recordCursor) {
if (!record.address) {
continue
}
let currentTotal = BigInt(record.amount)
// fetch status from claimStatus
for (const [key, val] of record.claimStatus.entries()) {
const stage = parseInt(key)
// 预充值阶段, 需要展示第一期可领取的数量
if (stage <= CEC_CLAIM_STAGE && val.status === ClaimStatusEnum.NORMAL) {
if (fixSet.has(record.address)) {
fix += (currentTotal * BigInt(val.rate)) / 100n
fixAndAba += (currentTotal * BigInt(val.rate)) / 100n
} else if (bindSet.has(record.address)) {
bind += (currentTotal * BigInt(val.rate)) / 100n
} else {
available += (currentTotal * BigInt(val.rate)) / 100n
fixAndAba += (currentTotal * BigInt(val.rate)) / 100n
}
}
}
}
console.log('bind: ', removeSmallNum(bind))
console.log('fix: ', removeSmallNum(fix))
console.log('available: ', removeSmallNum(available))
console.log('fixAndAba: ', removeSmallNum(fixAndAba))
}
;(async () => {
try {
// await queryFixData()
// await checkFixData()
// await queryAll()
await queryRemain()
} catch (e) {
console.log(e)
}
process.exit(0)
})()

View File

@ -3,7 +3,7 @@ import { dbconn } from 'decorators/dbconn'
import { BaseModule } from '../Base'
import { GeneralEventClass } from './GeneralEvent'
@dbconn()
@dbconn('chain2')
@index({ chain: 1, address: 1, token: 1, account: 1 }, { unique: true })
@index({ chain: 1, address: 1, token: 1, user: 1 }, { unique: true })
@modelOptions({

View File

@ -172,8 +172,8 @@ export const fetchClaimStatus = async (address: string, taskId: string) => {
export const updateClaimStatus = async (
{address, account, token, records}:
{address: string, account: string, token: string, records: Partial<CECRecordTotalClass>[]}) => {
const chain = process.env.CHAIN + ''
const record = await TokenClaimRecord.findOne({ chain, address, account, token })
const chain = process.env.CLAIM_CHAIN + ''
const record = await TokenClaimRecord.findOne({ chain, address: address.toLowerCase(), token: token.toLowerCase(), account })
if (!record) {
return
}
@ -185,6 +185,8 @@ export const updateClaimStatus = async (
if (value.status == ClaimStatusEnum.NORMAL && (bitTotal & 1n << bit) > 0n ) {
value.status = ClaimStatusEnum.CLAIMED
changed = true
//@ts-ignore
item.markModified('claimStatus')
}
}
if (changed) {

View File

@ -3442,6 +3442,13 @@ fs-extra@^4.0.2:
jsonfile "^4.0.0"
universalify "^0.1.0"
fs-jetpack@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/fs-jetpack/-/fs-jetpack-5.1.0.tgz#dcd34d709b69007c9dc2420a6f2b9e8f986cff0d"
integrity sha512-Xn4fDhLydXkuzepZVsr02jakLlmoARPy+YWIclo4kh0GyNGUHnTqeH/w/qIsVn50dFxtp8otPL2t/HcPJBbxUA==
dependencies:
minimatch "^5.1.0"
fs-minipass@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
@ -4870,6 +4877,13 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
dependencies:
brace-expansion "^1.1.7"
minimatch@^5.1.0:
version "5.1.6"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
dependencies:
brace-expansion "^2.0.1"
minimist@^1.2.0, minimist@^1.2.6:
version "1.2.8"
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"