From 45fb6d061d90fc55bae2b465df94b31b84d53d7f Mon Sep 17 00:00:00 2001 From: Laan Tungir Date: Thu, 9 Oct 2025 09:19:11 -0400 Subject: [PATCH] Adding async publish to relay pool --- POOL_API.md | 10 +- debug.log | 233 +++++ examples/relay_pool | Bin 186704 -> 199832 bytes examples/relay_pool.c | 211 ++++- nostr_core/core_relay_pool.c | 286 ++++-- nostr_core/nostr_core.h | 16 +- pool.log | 1587 +--------------------------------- tests/async_publish_test | Bin 0 -> 71712 bytes tests/async_publish_test.c | 93 ++ tests/backward_compat_test.c | 49 ++ tests/simple_async_test | Bin 0 -> 71672 bytes tests/simple_async_test.c | 70 ++ 12 files changed, 929 insertions(+), 1626 deletions(-) create mode 100755 tests/async_publish_test create mode 100644 tests/async_publish_test.c create mode 100644 tests/backward_compat_test.c create mode 100755 tests/simple_async_test create mode 100644 tests/simple_async_test.c diff --git a/POOL_API.md b/POOL_API.md index 153dd068..7d5de740 100644 --- a/POOL_API.md +++ b/POOL_API.md @@ -16,7 +16,7 @@ This document describes the public API for the Nostr Relay Pool implementation i | [`nostr_relay_pool_poll()`](nostr_core/core_relay_pool.c:1232) | Single iteration poll and dispatch | | [`nostr_relay_pool_query_sync()`](nostr_core/core_relay_pool.c:695) | Synchronous query returning event array | | [`nostr_relay_pool_get_event()`](nostr_core/core_relay_pool.c:825) | Get single most recent event | -| [`nostr_relay_pool_publish()`](nostr_core/core_relay_pool.c:866) | Publish event and wait for OK responses | +| [`nostr_relay_pool_publish_async()`](nostr_core/core_relay_pool.c:866) | Publish event with async callbacks | | [`nostr_relay_pool_get_relay_status()`](nostr_core/core_relay_pool.c:944) | Get connection status for a relay | | [`nostr_relay_pool_list_relays()`](nostr_core/core_relay_pool.c:960) | List all relays and their statuses | | [`nostr_relay_pool_get_relay_stats()`](nostr_core/core_relay_pool.c:992) | Get detailed statistics for a relay | @@ -438,9 +438,9 @@ int get_latest_note_from_pubkey(nostr_relay_pool_t* pool, const char* pubkey_hex ``` ### Publish Event -**Function:** [`nostr_relay_pool_publish()`](nostr_core/core_relay_pool.c:866) +**Function:** [`nostr_relay_pool_publish_async()`](nostr_core/core_relay_pool.c:866) ```c -int nostr_relay_pool_publish( +int nostr_relay_pool_publish_async( nostr_relay_pool_t* pool, const char** relay_urls, int relay_count, @@ -471,8 +471,8 @@ int publish_text_note(nostr_relay_pool_t* pool, const char* content) { printf("Publishing note: %s\n", content); - int success_count = nostr_relay_pool_publish( - pool, relay_urls, 3, event); + int success_count = nostr_relay_pool_publish_async( + pool, relay_urls, 3, event, my_callback, user_data); cJSON_Delete(event); diff --git a/debug.log b/debug.log index 595cd6c4..3bfa39a5 100644 --- a/debug.log +++ b/debug.log @@ -1052,3 +1052,236 @@ [04:51:30.102] SEND relay.laantungir.net:443: ["CLOSE", "pool_1_1759481260"] [04:51:30.102] SEND relay.laantungir.net:443: ["CLOSE", "pool_2_1759481341"] [04:51:30.102] SEND nos.lol:443: ["CLOSE", "pool_2_1759481341"] + +=== NOSTR WebSocket Debug Log Started === +[11:36:03.026] SEND relay.laantungir.net:443: ["EVENT", { + "pubkey": "650b42b2d501cd03b490ee27205444d1e507c200c3a137b99710564317eea65d", + "created_at": 1759678563, + "kind": 1, + "tags": [], + "content": "Test post at 2025-10-05 11:36:03", + "id": "2a77ce51810b77073a7873fd00c56babde944a2520a49f852121f2438155e282", + "sig": "a933a5f072a3a122bb7c685f6810781aaec47493e62f3f2540f49d7a8e7506be5d3dc319d98781a1807f4837acbb5ae1b76d8f99ce92ea55553a2e6eeec2697a" + }] +[11:36:03.104] RECV relay.laantungir.net:443: ["OK","2a77ce51810b77073a7873fd00c56babde944a2520a49f852121f2438155e282",true,""] + +=== NOSTR WebSocket Debug Log Started === +[14:00:19.331] SEND localhost:7555: ["EVENT", { + "pubkey": "7c2065299249ff1b4316c07af0d03d67ad145da80b907cc22aa608218c6d2687", + "created_at": 1759687219, + "kind": 1, + "tags": [], + "content": "Test post at 2025-10-05 14:00:19", + "id": "15dbe2cfe9237b93992a3b4de9d90224032e8b613031748da92c46c1aeaa2e9c", + "sig": "c0aa610658d8cfd76aca25894276a7f3f0573c2993429feff8b1ff10eeb5608ff18cfd79126de5f54e77f5b45a9d39f9006df65b56e4246e50cf72d212509569" + }] +[14:00:19.334] RECV localhost:7555: ["OK", "15dbe2cfe9237b93992a3b4de9d90224032e8b613031748da92c46c1aeaa2e9c", true, ""] +[14:00:49.419] SEND localhost:7555: ["EVENT", { + "pubkey": "2a0c81450868960944c17b0f57f6aa2b5307b56bc8d9cc1b213674c561a3ab85", + "created_at": 1759687249, + "kind": 1, + "tags": [], + "content": "Test post at 2025-10-05 14:00:49", + "id": "c70d6c5c8745c088bd3b99e5f529bb69cd3d162cb9db28aa433a798fa8d811c3", + "sig": "76ac20012e84d49a528db140e48024d6a390033df75bfbad64e822208a6a4a3f863b84860da8bcf78c6d8c8933e30fba92f11ebca5f4602ba4428b10584c7ceb" + }] +[14:01:23.848] SEND localhost:7555: ["EVENT", { + "pubkey": "aa3b44608a9e52473a631d596c395dd297443237d56e34e31bdcd4272a1cf558", + "created_at": 1759687283, + "kind": 1, + "tags": [], + "content": "Test post at 2025-10-05 14:01:23", + "id": "ec98292f570049ed00ae541cba716dcf6c8252b523ce036d9d3d79946ff62927", + "sig": "3e5ffa59e881c4e772e3c0e65b26d5396b7687de2ae8e930b505fc2617ecfa4b392df32b3af41f8c989e5cb1eeb00d5c1fbedfba2729eb43a3838e49ebfffc8f" + }] +[14:01:23.851] RECV localhost:7555: ["OK", "ec98292f570049ed00ae541cba716dcf6c8252b523ce036d9d3d79946ff62927", true, ""] +[14:02:12.846] SEND localhost:7555: ["REQ", "pool_1_1759687332", { + "kinds": [1], + "since": 1759687324, + "limit": 10 + }] +[14:02:13.462] SEND nos.lol:443: ["REQ", "pool_1_1759687332", { + "kinds": [1], + "since": 1759687324, + "limit": 10 + }] +[14:02:13.462] SEND nos.lol:443: ["REQ", "pool_1_1759687332", { + "kinds": [1], + "since": 1759687324, + "limit": 10 + }] +[14:02:13.614] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"The current price of Bitcoin is ~$123135.80\n\nBlock Height : 917792\n\n[2025-10-05 18:02:03 UTC] \n\n #bitcoin #nxus #nyx #oracle","created_at":1759687324,"id":"dfd294e7e51a9d8d323a56061dc93402b01766e64bb8da0b68e564c780c3db8a","kind":1,"pubkey":"ff8464aa592cdec49f76bf3c0b505433c47427d04eeaec1fa4c4e104709dabc3","sig":"0309e8ff8a0f1d0d36f990fcdde78d2d9e9125229d1ab850fe92fbbabffe5f26ca5204a48c44bab0044aeeb1824b7dd54d9e9074bad5e3263691c445553ed2de","tags":[]}] +[14:02:13.675] RECV nos.lol:443: ["EOSE","pool_1_1759687332"] +[14:02:14.774] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"Why?","created_at":1759687333,"id":"c0c29a6a16ed277868962e6664c07a8be2afd416c8b0212c9f17eff1a073ac15","kind":1,"pubkey":"8a719d42268aa925f6b12bcbe6b645f6ec82efe64eac91daf935fdcccf1f0fe5","sig":"db6174f60d86859989e34f6963c0ad25bfe67002a35d47933ad3c7ce7b271d061d82a7ed702c0aa6419eafb83cc0c93675b675bdc180d5d859df8691c52de38d","tags":[["alt","A short note: Why?"],["e","c2d6913771cbbbdd3fefaf8f016a142841b5d00278bd16359c6e011ec1a33539","wss://relay.snort.social/","root","341db5a7e3a931f49095d82a4acc939cf8a67293b1e4179fd4b5c0544c4fc2ef"],["p","341db5a7e3a931f49095d82a4acc939cf8a67293b1e4179fd4b5c0544c4fc2ef","wss://nostr.bitcoiner.social/"]]}] +[14:02:15.737] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"check out ⒷⒶⓃⒼⒻⓄⓇⒻⓊⓃ .ⒸⓄⓂ its filled with nothing but everyday girls who are lonely due to covid and want to exchange contact info with her again if you would be appreciated","created_at":1759687335,"id":"02982bdbc18d00777cd274270cee086b30847a93f875b5d0417135c406443156","kind":1,"pubkey":"fe5f59754d2e3a2579b4c95d67f7ff12da4bfffbf8f1c6b0a8de3970407ef974","sig":"cfa9ad66756503599e83a0ec77897cf0170b44a71ced1bf6e1843a146f1d0a381ffdf951e20d1f05814ffac549425435b4519a138ccec691f6d2a2e7648d19bf","tags":[]}] +[14:02:22.358] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"Sunday\ndon’t forget to stretch \nhttps://blossom.primal.net/d18ce68340127803a368333762a18caf6083762b9bb29e6a48ca806d5fc89f92.mov","created_at":1759687342,"id":"97e92a02de8c446067ed5fef48307139eac31caa81bde9152c0bfe7b4b33f5c9","kind":1,"pubkey":"8fda2199c4399fad7ff4126b402f1f5ee157fdbe4c0951e64dfe31aaec877ff1","sig":"e599ca1b54e9fe930083a6c8d1a967be347656b5a45939ead9156cba7f3e89946613a259bb38816778eee22a5bffb9c825eb3555edd09f79304ce529774349b0","tags":[]}] +[14:02:24.129] SEND localhost:7555: ["REQ", "pool_1_1759687332", { + "kinds": [1], + "since": 1759687324, + "limit": 10 + }] +[14:02:24.130] RECV localhost:7555: ["EOSE", "pool_1_1759687332"] +[14:02:24.890] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"Indeed he is 😅🫡","created_at":1759687345,"id":"097a6a383c2fbc3f65dd37752ad941545a1295e786758392df0bf9a6b2327a30","kind":1,"pubkey":"db8f291dcf949373f5224070cbef4fab80b9a8d3434246aca1fe34114cc51dd0","sig":"2d0cf79a141c3bb06245bee49c601b5f415c601f8d40f2d444ccdf90e79ec6254d1dc46b729b136030f19775a65a5a4655d5f40e9954df0c894a1149ca3305ec","tags":[["p","493a5a07be1dc06a1dd2d8e943d8924fd469f057857e26f7b99ebdebe00c2557","","mention"],["p","db8f291dcf949373f5224070cbef4fab80b9a8d3434246aca1fe34114cc51dd0","","mention"],["p","496bf22b76e63553b2cac70c44b53867368b4b7612053a2c78609f3144324807","","mention"],["e","bd01a782c099d9a4121063df8d89e6722d4b54d3015624870b7c80acd047f739","","root"],["e","c0ac6ca2931e1e22ab99c3daf5f1c85be1644ab13848d5d136eda170b95e0911","","reply"]]}] +[14:02:41.565] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"I never know when to stfu","created_at":1759687362,"id":"291797f5b41d6a22e41b7001ddb8f68c60175408f13633d686f6f738366fa304","kind":1,"pubkey":"341db5a7e3a931f49095d82a4acc939cf8a67293b1e4179fd4b5c0544c4fc2ef","sig":"003486d469652f3485106de99d3c156d23625df98748471b36ffe207a966ad414621d36dd36cb1206ae17dd41741cc4f047a3ce2d706abc296cde351752f6c24","tags":[["alt","A short note: I never know when to stfu"],["e","c2d6913771cbbbdd3fefaf8f016a142841b5d00278bd16359c6e011ec1a33539","wss://nostr.bitcoiner.social/","root","341db5a7e3a931f49095d82a4acc939cf8a67293b1e4179fd4b5c0544c4fc2ef"],["e","c0c29a6a16ed277868962e6664c07a8be2afd416c8b0212c9f17eff1a073ac15","wss://wot.nostr.net/","reply","8a719d42268aa925f6b12bcbe6b645f6ec82efe64eac91daf935fdcccf1f0fe5"],["p","341db5a7e3a931f49095d82a4acc939cf8a67293b1e4179fd4b5c0544c4fc2ef","wss://nostr.bitcoiner.social/"],["p","8a719d42268aa925f6b12bcbe6b645f6ec82efe64eac91daf935fdcccf1f0fe5","ws://agwwuih4l66mb6oxnqk42lfsubhatux3bmcnpmki6cd7nmx5lz2ys6yd.onion/"]]}] +[14:02:42.621] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"歯を磨きました えらいです","created_at":1759687359,"id":"b0c6315ae6940ec80b90f3fd5afaa87bbc608e266da91a5d69a62455ccb1ada0","kind":1,"pubkey":"8c59239319637f97e007dad0d681e65ce35b1ace333b629e2d33f9465c132608","sig":"84cae19a484de2d28cf0458920ebf918af55c5c244796301ddc2c050adc6f8d177f6dd833a2bd3c2fe0cbde82a1c4ab5ac29fba3f7d88829b18d3717fbdcc4de","tags":[]}] +[14:02:45.057] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"FREEDOM!!!🥴","created_at":1759687364,"id":"7bc750b643cda5fd7b38e4ff9c2bc085b7af1ea3710617d8fc13d5c84af74c41","kind":1,"pubkey":"b7baced2435c5a2427cadcefd9257786aaab6ab688b105f32e2657374da9e74c","sig":"816efcd39f190de6b21ced158e1c86611a1892ff2bf4b0a5f3ee22bce3fdd8f9488865aab28705527f19062d86f1848ecb94a107a63818c3c094c7c4a624cc10","tags":[["e","8536277b5d44700c12e4c1d2d3571f22d810bb90baa3559ae4cbba36e0f3b8dc","","root"],["p","526b4dba54b3f4a1bdac3548f0b8195e2b8ea36ba1920c801eb6388ed67de4ec"]]}] +[14:02:46.930] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"GN https://blossom.primal.net/9e0dee7527fe3a20428bcfd20f1a3057f21991d0eb34b69b328a636a5a05a5b9.jpg","created_at":1759687367,"id":"e0415b2de12951a6b0b4274ad1c7898c6d4ff0ed3f5169dc2dd2329583aa6ac7","kind":1,"pubkey":"621889de151ed29c32424bfb150066dc274808dd8545898b62154e20595deab5","sig":"15821cd116d0086ce5e8d6ba7320eff13ccc27edaeba958e4e122d9b3123026aae17d2350e7f0ad4b1723b871e26b0b75980b3f0291a4a5ffc7306ed49c0a93e","tags":[["alt","A short note: GN https://blossom.primal.net/9e0dee7527fe3a20428b..."],["r","https://blossom.primal.net/9e0dee7527fe3a20428bcfd20f1a3057f21991d0eb34b69b328a636a5a05a5b9.jpg"],["imeta","url https://blossom.primal.net/9e0dee7527fe3a20428bcfd20f1a3057f21991d0eb34b69b328a636a5a05a5b9.jpg","x 9e0dee7527fe3a20428bcfd20f1a3057f21991d0eb34b69b328a636a5a05a5b9","size 1296120","m image/jpeg","dim 4032x3024","blurhash #nH2G--TWAR-WCoLoeofj@_NodjYfkayj[fPj[fQJqR+oes.oeazWCWCazE3WXj[j@j[azf6f6f7V@ofWVafayjtj[j[j@%0oeayf6f6j[bHbHa|t6ayj[j[j[a|ayaya|","ox 9e0dee7527fe3a20428bcfd20f1a3057f21991d0eb34b69b328a636a5a05a5b9","alt "]]}] +[14:02:56.059] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"#hipwaist ratios \nhttps://images2.imgbox.com/b1/0c/wCxDWNqC_o.jpg \n#JoyOfLife ","created_at":1759687364,"id":"7c2f33b25929cc70c60f0165b5fde62753bdde14a5a9daad012073f7189919b5","kind":1,"pubkey":"ebb93aa6c2d04d7368ba52ef69884bf6e5779d7e418187e33371a20c7d9e5f6f","sig":"bb0c6ea5bd499637d454459a349aeddf10594af224ab12ded0fb3152ee17f53e7a75c6c784cabb2e8ad4d9c59c1f2bd1ed21f3ef31c674fd82f9a8d3e43e4cc2","tags":[]}] +[14:03:03.608] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"ほろ酔いマスカットティーサワーを飲んでいます","created_at":1759687383,"id":"df1a4aa1e449f96295902ac73d6f85dbb10273a063a91de90406522cf78ae98b","kind":1,"pubkey":"e62f27d2814a25171c466d2d7612ad1a066db1362b4e259db5c076f9e6b21cb7","sig":"3a6e49bad5b31a5218465c9bf9fbe4dba46731fefc4ad09e85139d256f471904662397b9100aec8beedb3635324356ea25370c957543b7e47fb75817db70c1f6","tags":[]}] +[14:03:07.944] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"🟠 BTC: $123,118\n⛏️ Hashrate: 1109744.2 EH/s\n📦 Mempool size: 38.97 MB\n💸 Fees (sat/vB): low 1, med 3, high 4\n📊 Fear & Greed Index: 74 (Greed)\n#bitcoin #stats","created_at":1759687387,"id":"2ffa7922bb8706b4961a56cea3a4df70c85b79f2a366d9add75e65a23ed44cfb","kind":1,"pubkey":"e185c2ad0b87b3207ac2b96d6b8fb1ff10fbf25f93eef4d04fb6dbb9039f19fb","sig":"fe684f31bc65d3a7f524d9ad2c437cab752c18f05c5332761f35cbb67894a62a4c58efc5c94dedf285357e4fdc3c7f31c2a93818e1aed9745983de272c56a1cc","tags":[]}] +[14:03:11.336] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"Fees incentivize long-term security. #bitcoinfees | BTC: $123,109 | Educational Post","created_at":1759687390,"id":"f1d0cb6a9409534a33320905a34ab1569a46e3f2d5cf429f669002dea789ec38","kind":1,"pubkey":"e185c2ad0b87b3207ac2b96d6b8fb1ff10fbf25f93eef4d04fb6dbb9039f19fb","sig":"34c033fa98e7248e7b4f038fd0180ca52b9309be707d3b6d33c9dbc6234ec5abecfd5dffb5d3ec053c6e58829c74ccda6369bcabcc89cfaff278451bafc23525","tags":[]}] +[14:03:15.656] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"📈 BTC Price Last 7 Days #bitcoin #chart\n\n(Chart could not be uploaded)","created_at":1759687395,"id":"aa169c771966a25c3b6342868d8f3d903b22c1c778cc44d8d3c26c8d5141b5e4","kind":1,"pubkey":"e185c2ad0b87b3207ac2b96d6b8fb1ff10fbf25f93eef4d04fb6dbb9039f19fb","sig":"057ad92d9597617646ebf4c6acc0b428ac3e3b95e6c1cb6789a61900f1c385513441a0b380bb43af8b683f93f33837f6a195c94e3905bed6ef3556fab0d68397","tags":[]}] +[14:03:16.063] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"Anybody lurk on \"X\" using nitter?","created_at":1759687397,"id":"abc512ddf94c69c4311c5d3067d43d6359d679daaa2655fb80a228a9428b0272","kind":1,"pubkey":"fd31d0a4910f7ce9c46ac63df62781a9981e79a11de16d1664f1feb14f6a8c94","sig":"8abeb53756cea6e042172ffaba2158d824f62accc795bc1d9b4b360b5b7060ad45ec550a39fc456d7f19dce4c06a6b92be61199f10af3ecb8b0077c9cc3768a0","tags":[]}] +[14:03:19.498] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"😳","created_at":1759687399,"id":"2bd27d8cc846e0fb6ef37df032f3a26cdab82c837c9ec5e5845b3c0df0b0fa84","kind":1,"pubkey":"8fda2199c4399fad7ff4126b402f1f5ee157fdbe4c0951e64dfe31aaec877ff1","sig":"dc584de809ae64fabb33f3e4ddc677f8e94c6c3639931e9e600cd83804b3d6085eaf3dd591b3d5ff4b20e08baeec30904c7cee156a30d92c9fe5f99ed621c246","tags":[["e","0cd929d752df6c6f50071054986bcd34e4618e2c24c9d943cf66dd3e5d7ccc3f","wss://relay.damus.io/","root","8fda2199c4399fad7ff4126b402f1f5ee157fdbe4c0951e64dfe31aaec877ff1"],["e","e27f1ec0adeba973bd0858b76e74836df2d68fc57fc003ec3fb0f1603280f660","","reply"],["p","cdecc31c6d9406e9a7d6b0067412aa661d9d31c8035c3fd65c06301d1cac3b92","","mention"]]}] +[14:03:22.260] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"Looks like a great time, good luck. \n\n","created_at":1759687402,"id":"e9430e5efb1beb33963c112d0d92387d4165ae41d66e81439a2405630b1ae129","kind":1,"pubkey":"9ce3f065a7f384c1927263b968726d08e3895b5823be6e322545e89c3ee31a15","sig":"670788f0c36701cbfddfc101c64134b4eee98225bbf31d982afb2e90a617278ba84c00a9bb530ccded4d2e0bee347c9620298791bedb9894bfe379e3b82ecea0","tags":[["p","15652c499840af95bf52d8eb93bfbdd734b92d40f21c4eb974b124e5997d57cb","wss://relay.primal.net"],["e","a411057eb22fe7ceda41de50d34259f974ff434e370b157ac51850b4802d31ba","wss://relay.primal.net","root","15652c499840af95bf52d8eb93bfbdd734b92d40f21c4eb974b124e5997d57cb"]]}] +[14:03:30.391] SEND localhost:7555: ["EVENT", { + "pubkey": "17323141f3a98b014f96ee85df59ee1ce6295e1502644c8e1f86439b20908198", + "created_at": 1759687410, + "kind": 1, + "tags": [], + "content": "Test post at 2025-10-05 14:03:30", + "id": "8433206a6e00ff021ddd1f162af38bf724aabd6a7ca5fb9e57bda74f26d46e3a", + "sig": "058a3bc6872e44e8d30cfba1d75267929ec3d73fbafa4c77f99897b700020a42478b51ee3bf4a4901beb376b9d3deca2854b3bca2f18eab169f9f5babdfeccb6" + }] +[14:03:30.394] RECV localhost:7555: ["EVENT", "pool_1_1759687332", { + "pubkey": "17323141f3a98b014f96ee85df59ee1ce6295e1502644c8e1f86439b20908198", + "created_at": 1759687410, + "kind": 1, + "tags": [], + "content": "Test post at 2025-10-05 14:03:30", + "id": "8433206a6e00ff021ddd1f162af38bf724aabd6a7ca5fb9e57bda74f26d46e3a", + "sig": "058a3bc6872e44e8d30cfba1d75267929ec3d73fbafa4c77f99897b700020a42478b51ee3bf4a4901beb376b9d3deca2854b3bca2f18eab169f9f5babdfeccb6" + }] +[14:03:30.394] RECV localhost:7555: EVENT", "pool_1_1759687332", { + "pubkey": "17323141f3a98b014f96ee85df59ee1ce6295e1502644c8e1f86439b20908198", + "created_at": 1759687410, + "kind": 1, + "tags": [], + "content": "Test post at 2025-10-05 14:03:30", + "id": "8433206a6e00ff021ddd1f162af38bf724aabd6a7ca5fb9e57bda74f26d46e3a", + "sig": "058a3bc6872e44e8d30cfba1d75267929ec3d73fbafa4c77f99897b700020a42478b51ee3bf4a4901beb376b9d3deca2854b3bca2f18eab169f9f5babdfeccb6" + }]2a +[14:03:30.746] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"You will eventually","created_at":1759687410,"id":"f8bad59298e8afa0cceb9a4dee73c28648b62846b1fedc13b450316b29e3c460","kind":1,"pubkey":"8a719d42268aa925f6b12bcbe6b645f6ec82efe64eac91daf935fdcccf1f0fe5","sig":"4313cc6ee55b482e67f9a1f2e33761b9c68158b59eee38419d540ce5bb6564f2d5982428e0cde14c260edc4354a9c2cd3f0b848f7dca25af8f5b8930b9577f1e","tags":[["alt","A short note: You will eventually"],["e","c2d6913771cbbbdd3fefaf8f016a142841b5d00278bd16359c6e011ec1a33539","wss://relay.snort.social/","root","341db5a7e3a931f49095d82a4acc939cf8a67293b1e4179fd4b5c0544c4fc2ef"],["e","c0c29a6a16ed277868962e6664c07a8be2afd416c8b0212c9f17eff1a073ac15","wss://sendit.nosflare.com/","","8a719d42268aa925f6b12bcbe6b645f6ec82efe64eac91daf935fdcccf1f0fe5"],["e","291797f5b41d6a22e41b7001ddb8f68c60175408f13633d686f6f738366fa304","wss://nostr.mom/","reply","341db5a7e3a931f49095d82a4acc939cf8a67293b1e4179fd4b5c0544c4fc2ef"],["p","341db5a7e3a931f49095d82a4acc939cf8a67293b1e4179fd4b5c0544c4fc2ef","wss://nostr.bitcoiner.social/"],["p","8a719d42268aa925f6b12bcbe6b645f6ec82efe64eac91daf935fdcccf1f0fe5","ws://agwwuih4l66mb6oxnqk42lfsubhatux3bmcnpmki6cd7nmx5lz2ys6yd.onion/"]]}] +[14:03:34.291] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"お茶系のお酒あんまり得意じゃないんだけど、お茶って感じあんまりしないし大丈夫だった","created_at":1759687413,"id":"790a85a90ef5d2bfbd9c70fc1c54830333066477c63e0026ae304037e6272814","kind":1,"pubkey":"e62f27d2814a25171c466d2d7612ad1a066db1362b4e259db5c076f9e6b21cb7","sig":"47eea4b740aeba09a6ec595dd7fcd2d7a682d8091301a9cef3c014693ca639679eaabbca981030bbb23c7f683a9ee1faa7c18fc78a254d6b965b1723f77c8172","tags":[]}] +[14:03:35.459] RECV nos.lol:443: ["EVENT","pool_1_1759687332",{"content":"No, this is Albuquerque, NM ","created_at":1759687415,"id":"edc6b801a73667504bb197b8315f9b4c0533f726c108f8932d3fdc31a6495553","kind":1,"pubkey":"da26e54b86c9a395a4233cbb540fe2aa93cdad4a9b657ed5a724efed5859d23d","sig":"b6b822662302cc6b21b09b6e50f3ecf45c09c90c3750b308e6e293f5037352bacd8e4f96706af43dfe584d9c6c295dc7a92420ab4262e73759af71f35e2bf25e","tags":[["e","021147fc341540353e9cf639b7d6d1ba28af3ece5cf0625484716b0228a9348d","wss://feeds.nostr.band/lang/en","root"],["e","0dc0f9c4a0f5f37d93742e7dcf7c0f9b72f9be48dd5503f49004975b0073c235","wss://relay.primal.net","reply"],["p","c1503e4a2ef14908127d373530480c133bd5a0d9bb47a4be4a25a41d8f27447c","","mention"]]}] +[14:03:40.010] SEND nos.lol:443: ["EVENT", { + "pubkey": "17323141f3a98b014f96ee85df59ee1ce6295e1502644c8e1f86439b20908198", + "created_at": 1759687410, + "kind": 1, + "tags": [], + "content": "Test post at 2025-10-05 14:03:30", + "id": "8433206a6e00ff021ddd1f162af38bf724aabd6a7ca5fb9e57bda74f26d46e3a", + "sig": "058a3bc6872e44e8d30cfba1d75267929ec3d73fbafa4c77f99897b700020a42478b51ee3bf4a4901beb376b9d3deca2854b3bca2f18eab169f9f5babdfeccb6" + }] +[14:03:40.207] RECV nos.lol:443: ["OK","8433206a6e00ff021ddd1f162af38bf724aabd6a7ca5fb9e57bda74f26d46e3a",true,""] +[14:03:50.096] SEND localhost:7555: ["REQ", "pool_1_1759687332", { + "kinds": [1], + "since": 1759687324, + "limit": 10 + }] +[14:03:50.097] RECV localhost:7555: ["EVENT", "pool_1_1759687332", { + "id": "8433206a6e00ff021ddd1f162af38bf724aabd6a7ca5fb9e57bda74f26d46e3a", + "pubkey": "17323141f3a98b014f96ee85df59ee1ce6295e1502644c8e1f86439b20908198", + "created_at": 1759687410, + "kind": 1, + "content": "Test post at 2025-10-05 14:03:30", + "sig": "058a3bc6872e44e8d30cfba1d75267929ec3d73fbafa4c77f99897b700020a42478b51ee3bf4a4901beb376b9d3deca2854b3bca2f18eab169f9f5babdfeccb6", + "tags": [] + }] +[14:03:50.108] RECV localhost:7555: ["EOSE", "pool_1_1759687332"] + +=== NOSTR WebSocket Debug Log Started === +[18:53:08.601] SEND localhost:7555: ["REQ", "pool_1_1759791188", { + "kinds": [1], + "since": 1759791185, + "limit": 10 + }] +[18:53:08.601] SEND nos.lol:443: ["REQ", "pool_1_1759791188", { + "kinds": [1], + "since": 1759791185, + "limit": 10 + }] +[18:53:08.648] RECV localhost:7555: ["EOSE", "pool_1_1759791188"] +[18:53:08.783] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"🟩BUY BTC with USD\nPrice: 123770.37USD (-1%)\nBTC: 0.005 - 0.01\nUSD: 619 - 1238\nMethod: ACH\nCreated: 2025-10-06T22:52:29Z","created_at":1759791187,"id":"29689c1ef5366dfd01b5ecf9262b2da34cb02bafa1a8429bb6a490d04909d37d","kind":1,"pubkey":"832b77d5ecb09381ac37d75d6392424526d0923dced687b03d96ba03a5e3d55c","sig":"a5f9ea9b6867ee1be7ef756320fb156de99fe74187fbe6eb279481994e6633cea83e79d962ca01ff561be79172df352cc6a20e0db9cf7cc06c2e40b8361d374d","tags":[]}] +[18:53:08.844] RECV nos.lol:443: ["EOSE","pool_1_1759791188"] +[18:53:20.271] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"The Libertarians are the only political party promising to protect education choices in Australia. If you're a homeschooler the Libertarian party is the political party for you 🇦🇺 https://image.nostr.build/b5b36427856dfaee5ecdd4679977e6863a7cdc00ecef996d18b8b69b23c917c0.jpg ","created_at":1759791199,"id":"3da55d474418278f7ea7e5e08a853cc28d3dbf7e0f32f6f70636d6db80164b29","kind":1,"pubkey":"692b8a786c3be59c1e855a86e710215b35e32c55580500421407e740263f04cb","sig":"465d5819db53039d0c6b5d712c1bf1dc5611a4a3f49bfcf1ba6ac36d9f0eefd220f18a8cc43ef2522bf321882250ce5d660c42de4c8e839072ec5632269c2cbf","tags":[["imeta","url https://image.nostr.build/b5b36427856dfaee5ecdd4679977e6863a7cdc00ecef996d18b8b69b23c917c0.jpg","blurhash eXH-uqJU%zRP%f~BS4x]afxuR4xajEs:V@kW%LfkjZV[%MxttRNHkC","dim 1070x1338"],["r","https://image.nostr.build/b5b36427856dfaee5ecdd4679977e6863a7cdc00ecef996d18b8b69b23c917c0.jpg"]]}] +[18:53:33.079] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"They are getting closer to realizing Bitcoin is the answer to physic.\n\nConservation without axiom is a big deal.","created_at":1759791212,"id":"87aadf3b737615ab0ba2208fdb7d61cbfa36f8bd4a31ed0c0c06f6818d724bf2","kind":1,"pubkey":"3c4f51561243524f307ed2ee272c7cf4a782404fbe3a176606043b6ad427ee77","sig":"8c832c83f784bdff2698021382b96acc63daa8ba605398044910cb4780222c4b37fb4eb90cb5322a2ae52dafd9db8d10fca3b7a99f3f2865386883427240c188","tags":[["e","81c9d02c125ae68ff39820d822de54ed6e8121e6804532f1bcd3afdd41e33c7a","wss://feeds.nostr.band/newstr","root"],["p","b4403b2415a020c20691bb18c51ada5acb64b71d2f60966cb3c78ba683542d4e","","mention"]]}] +[18:53:34.774] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"一人称隣ニキで草 https://lumilumi.app/nevent1qvzqqqqqqypzq8tsnl8lcgukj2584c3t7mye5y835fc6ttz3s7kl9f3hvd2lf8d9qyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqqypyhsn5gs4l2dnkwjgy2rz9kerad0lw773xngw640cq4stafvr57cp7sfq0","created_at":1759791214,"id":"178b376d3ed06cbd316f4daad7c5c215e2dc5d9586fe742b7e24cc4156949463","kind":1,"pubkey":"a19caaa8404721584746fb0e174cf971a94e0f51baaf4c4e8c6e54fa88985eaf","sig":"ec377113c06d030e0202511744496383ca4cfc5fb468d6106dc0391728511db175e31c8b18be17bacf19937ec4967e948ca31e5c793ae65197900fbc14b489a6","tags":[["r","https://lumilumi.app/nevent1qvzqqqqqqypzq8tsnl8lcgukj2584c3t7mye5y835fc6ttz3s7kl9f3hvd2lf8d9qyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqqypyhsn5gs4l2dnkwjgy2rz9kerad0lw773xngw640cq4stafvr57cp7sfq0"],["client","lumilumi","31990:84b0c46ab699ac35eb2ca286470b85e081db2087cdef63932236c397417782f5:1727506446612","wss://relay.nostr.band"]]}] +[18:53:35.041] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"How do people feel about #privacy apps that come from app stores vs direct from the developer? Even if the same developer? Does it make a difference? I'm trying to wrap my head around #Adnroid changes in the future...","created_at":1759791214,"id":"b997be2339010e78eb35747ad8b5e5e7ff9a352de0f6f143773e1a3888a865a9","kind":1,"pubkey":"8dc8688200b447ec2e4018ea5e42dc5d480940cb3f19ca8f361d28179dc4ba5e","sig":"67a82ec73da6eae1c157eaa8dea08b1ba0fccdc68c305c236150eeebd3f8aff1a897b52421b0821f9144dbbabe91032d7ad105d3b152f76638ae040f3e053668","tags":[]}] +[18:53:44.914] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"please tell me this is satire. ","created_at":1759791224,"id":"93101e1379fc3564631bb22c1f92418e4a308453c00694229d66480e13e754f7","kind":1,"pubkey":"ff2ceb63833534d6e5b294b268501d62c53dcd2f05ee169f624ca1dc7cffe234","sig":"beee744a916041500fbe0cb2373f256948090ceafe3404a1b435544ea94ea392c70e5294cd56f02148556e4db6e6b81fc5274ac048200b8576610c04e4659278","tags":[["e","243c0fdc0879a37cb103dd8a9124889d40080741d67b04685409c7bfe2d445fb","wss://relay.mostr.pub/","root","11c63ffe2f02bce7e558470427deb0937d299af1140c4e24720804a1e0a7b08f"],["e","243c0fdc0879a37cb103dd8a9124889d40080741d67b04685409c7bfe2d445fb","wss://relay.mostr.pub/","reply","11c63ffe2f02bce7e558470427deb0937d299af1140c4e24720804a1e0a7b08f"],["p","11c63ffe2f02bce7e558470427deb0937d299af1140c4e24720804a1e0a7b08f"],["client","noStrudel","31990:266815e0c9210dfa324c6cba3573b14bee49da4209a9456f9484e5106cd408a5:1686066542546"]]}] +[18:53:54.736] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"Transparency is in the favor of the people, not the greedy, slimy thieves who hide behind gov. https://image.nostr.build/8b5e9826ba98a2e90d0ae51a341bf20f6f525ea67ed4459d4dfe516c2a50c1ee.gif","created_at":1759791232,"id":"f0add365d13b283475f5aea939b6aa03b1dad5ecf363a7814249251f5e35c944","kind":1,"pubkey":"519d2fb3c354f44f5d4c7cdfc532633daf029bcc7d54beb0cb0f770646f8350f","sig":"6c7f8250e2f0efd421aa808760254a1d53d979c213efd23b0431c1ed634514ad6c7267762b2d3124df3e8925c0c557a899a4ddd4ec0f332276cde6b5ad6ea707","tags":[["r","https://image.nostr.build/8b5e9826ba98a2e90d0ae51a341bf20f6f525ea67ed4459d4dfe516c2a50c1ee.gif"],["imeta","url https://image.nostr.build/8b5e9826ba98a2e90d0ae51a341bf20f6f525ea67ed4459d4dfe516c2a50c1ee.gif","ox 8b5e9826ba98a2e90d0ae51a341bf20f6f525ea67ed4459d4dfe516c2a50c1ee","x 8707bfc0dacb4aafcc6f27d25639d93fe0c0ac4cafeea6ebbfb7c0aad9217ed9","m image/gif","dim 360x266","bh LH9s*cfk0eay~Vay4:ax-pfkIVWB","blurhash LH9s*cfk0eay~Vay4:ax-pfkIVWB","thumb https://image.nostr.build/thumb/8b5e9826ba98a2e90d0ae51a341bf20f6f525ea67ed4459d4dfe516c2a50c1ee.gif"]]}] +[18:53:57.845] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"まずはピンク・フロイドを聴こうかなと思う","created_at":1759791237,"id":"fa7bfe34420bae341de5a1fc73bd2f4d5cb4283d6ab3b4c66dc697ebd5085ca5","kind":1,"pubkey":"f40832e26b1d12f8a27717b606996baef68bc4b6b86c4a35ca827f6fbcbf511e","sig":"0659b2963ff0e7c5e97e6a451ab572bcb0735f5371e8e20db3a82b0db555dcac449529c2cd0571f5c348ceb1f193a73a8437ec92062d4796b984c071e5b74542","tags":[]}] +[18:54:03.482] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"#Bitcoin Block Art by Blockstr!\nHeight: 917953\nWeight: 3998184\nhttps://thebitcoinblockclock.com/blockstr/00000000000000000001707014fb634d4c3b44790f8e51da2fd89816d704d74c.png","created_at":1759791242,"id":"5342d9d61cf46692a331fe48c126bd671d8cf8b5fd0c99f8000669c7e606aeff","kind":1,"pubkey":"3fdf8b43d2e6eb59fc399f7cb1b81923d1dff0215d45a11e1c1f279827eaaad8","sig":"abaf2db95aafa23f9152cdf5f6a683c41696c732540d94e5da5ce0bece91dbc886c53a9d25be131eef93355456f857720eedbbfb26bb282eeba5347a360768a6","tags":[]}] +[18:54:17.275] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"I would imagine hashrate goes up in northern countries where people mine4heat. But by how much I don’t know","created_at":1759791255,"id":"63e537f5b8047a577f3b3099295cc15916274e3e87997b65e54592e8166c1e30","kind":1,"pubkey":"18905d0a5d623ab81a98ba98c582bd5f57f2506c6b808905fc599d5a0b229b08","sig":"43c1092b80ab2fdd3c1dcdfd1a8bd47422be5b89d393ed8c8ad519d782a8ee9b137de2fe30ef6282c43e4882f9b57947d51bbaeb842fad03757d58c305d08af7","tags":[["p","18905d0a5d623ab81a98ba98c582bd5f57f2506c6b808905fc599d5a0b229b08","","mention"],["p","2b0ea532b3c3045d590c3dc982794d495d08bc497f554ccbcc30fcc8e9fbe2e9","","mention"],["e","d052b254eb2b402c4bc57035316885e4b5a39289083e69687408a5601123bea2","","root"],["e","6db869e46f7bdbaace29668104d99a0f1bbe91e2581a3b03dd53254f79159764","","reply"]]}] +[18:54:18.389] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"I would recommend self-hosting with MusicSideProject.com to retain 100% control and 100% value sent to your songs. But if you're between Fountain and WL, Fountain shows the value splits in the RSS feed which is nice for listeners to see where their sats are flowing","created_at":1759791259,"id":"252cc6c9886902f4dfbdf9a120c14f7e1f4c7828fa3b0007445cbe93d1afe00b","kind":1,"pubkey":"2dfbe5cb955e4018b76e6542a3b8782144dd5f5735914db9921fd24c3b3d106d","sig":"f7db0d52d86e3099a0ddabe16eac696123f997ec6981a2fc51e32d24b3658eeb18e28086fd9460feccf96133b3a3b182ee31b6aaa420352c632607eb727f93fc","tags":[["alt","A short note: I would recommend self-hosting with MusicSideProje..."],["e","390de5cd45e4e0a8fae43ad405e6e194b4e23566ae66d0c145d7ea1e676cbb40","wss://nostr.oxtr.dev/","root","2b349bb9ae581ab6092365a16aef15c0ffc8f1a593e22f79b04fdb122543c1f9"],["e","49a3b9e700e684a0711184ecba7bb16b58ab5dba63feb0c27bb1ee6e80776331","wss://relay.damus.io/","reply","2c9a02818e5b9b4582c19823b69c55f5945e837aa9cc8342856f43b8ea61f979"],["p","2b349bb9ae581ab6092365a16aef15c0ffc8f1a593e22f79b04fdb122543c1f9","wss://zap.watch/"],["p","2c9a02818e5b9b4582c19823b69c55f5945e837aa9cc8342856f43b8ea61f979","wss://zap.watch/"],["r","https://musicsideproject.com/"]]}] +[18:54:22.406] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"もう7時か、おはよう","created_at":1759791258,"id":"5fbce68be4f6fd34aca6115e294e5b790daf4ae210256556244b8ef33eff4b44","kind":1,"pubkey":"2bb2abbfc5892b7bda8f78d53682d913cc9a446b45e11929f0935d8fdfcb40bd","sig":"da49b572171e454aad4b9198443017dd25c1bd2e3313d5dac95931ea0db79198f47a29a31b0de7d9b20dd7e5fb0eac80916e00068b11a0c34c786e8ce50c8552","tags":[["e","cedbf52ea402b56b75069b64afeb7b9c9ce4e4063f607f76f715743e3a2b3707","","root","21ac29561b5de90cdc21995fc0707525cd78c8a52d87721ab681d3d609d1e2df"],["p","21ac29561b5de90cdc21995fc0707525cd78c8a52d87721ab681d3d609d1e2df"]]}] +[18:54:23.521] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"Tell your family and friends you love them.\n\nI just had a friend pass away at 40 years old 😢\nHe was in pretty good health. I had known him for 35 years\n\nWe dont know when our time is up, enjoy the ride. Spend as much time as you can with loved ones. ","created_at":1759791262,"id":"dae2b9bb92b229a2b4e0cda21416a0545c5c87682c5e51bba909dce87db14298","kind":1,"pubkey":"7a6b8c7de171955c214ded7e35cc782cd6dddfd141abb1929c632f69348e6f49","sig":"bd3a18aa715ae940cc4744112abcc4e5b388bb6c351aaa559bd420e1b1336c1141824789645810d0f9ce7bcf49ef79922e6bee99367949ee14d616724fca928b","tags":[]}] +[18:54:25.794] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"Personal experience agrees. Health took a very big, very noticeable dive after returning to America, from a country that bans the poisons.","created_at":1759791266,"id":"d31f8840cc9b9243e516aade74ced33dc37ce304f308ffaad19bcb786b6dd22c","kind":1,"pubkey":"55f573b651eff351db57b0601d23022d8c532f9825db10a5733ebf39be4aa21b","sig":"bdb42e44b1647cd77b59b8a3f01308aa8df89a1503b6c5d4984bd79ad4c20d50d6c4615589866985235719512519c54ec7ca863bca5f4f6cb8f9e19ae7e908cc","tags":[["e","0499a028291e2a5fff5cad342d19e985e4e1d16bc92170fd3ae4d700f5add047","","root"],["p","45b35521c312a5da4c2558703ad4be3d2e6d08c812551514c7a1eb7ab5fa0f04"],["p","da19b5d291e06ed09ba545bc5366408dc82ba8c9e9f97d32ea8ea60f1f6cbfaa"]]}] +[18:54:26.842] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"08:02 @ 917,953","created_at":1759791266,"id":"17aaebb2d9e3d4b1cbb0eb085f0d031c91c8b982eb182b9c1737467ac312eba1","kind":1,"pubkey":"7c5f24e1c95f6f1f75555498f0019be1259a65c75ae851c235f7b15c9f88e0ee","sig":"5f216afb163dedf705741149fc4a7b1d3c7586eb61ff90aca6d78d08ef5e3a050e97c3e1628ad126b1d26b38c4236e3b6cd7b12799ef6129649d27f16bcd75b3","tags":[["t","bitcoin"],["t","moscowtime"],["t","nostr"]]}] +[18:54:31.689] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":" \n\n\n\nhttps://blossom.primal.net/f69a2025125ef2f239621f96a9318f227df567f11db9aded4b57469e298e3317.mp4","created_at":1759791275,"id":"d89fe8ddd5874c17453cc6c8c9a23caae43d2e3fba6dc580d4b2527d3e00a240","kind":1,"pubkey":"e3a59924933c9f9f2df83449055eb3858f1480fdd0c5edb95df08bedcd2e6624","sig":"d1476ff7f3d3aac8aa042700fd4879f4d8c700294b0435fb63da314025aaaa03a5c2fc4e7ce2dd863a23779a007e6076b44b7286ca612f3d959a759b4ce79a03","tags":[]}] +[18:54:36.744] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"去中心化“公链”的基本判断标准:\n节点门槛——低,众易上链;\n共识机制——牢,广受支持;\n代码开源——全,行为透明;\n治理机制——简,长链佐证;\n通证分布——散,没有寡头。\n#去中心化 #Decentralization\n#心空化\nhttps://cdn.nostrcheck.me/382d67ec6a31dc8d0c5b3099753a0044261a70e694aadd49eb58fce529cb3089/336be1277293f2d53fb97ab301957736be3e0a82eb16626e625bb9a2e1d26cd4.webp","created_at":1759791265,"id":"c37b409b25a77db2d43e19c85b957ceccd4650b04d1ad51130f00fc526a003ee","kind":1,"pubkey":"382d67ec6a31dc8d0c5b3099753a0044261a70e694aadd49eb58fce529cb3089","sig":"8116df2ad43a6126f68c6f26c5a8ba2a861227a76ff67123677113cf5f2319da7f558b94be946b80f7b49a9a13ed1edd422fa799346bf8cb6e9def3d9f4c9881","tags":[["imeta","url https://cdn.nostrcheck.me/382d67ec6a31dc8d0c5b3099753a0044261a70e694aadd49eb58fce529cb3089/336be1277293f2d53fb97ab301957736be3e0a82eb16626e625bb9a2e1d26cd4.webp","dim 827x814","sha256 336be1277293f2d53fb97ab301957736be3e0a82eb16626e625bb9a2e1d26cd4"],["t","去中心化"],["t","Decentralization"],["t","decentralization"],["t","心空化"],["client","Nostur","31990:9be0be0fc079548233231614e4e1efc9f28b0db398011efeecf05fe570e5dd33:1685868693432"]]}] +[18:54:37.706] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"nostr:nprofile1qqszzf4msf9pxddg4hkre9a4ehdc67m9yhvapzg86chvs0enyzw80qqpypmhxue69uhky6t5vdhkjmndv9uxjmtpd35hxarn9ehkumrfdejj7qgkwaehxw309ajkgetw9ehx7um5wghxcctwvshsq3d5s2 \n\n","created_at":1759791276,"id":"4a5c21b093bc6b01a7535759e2bed8618876c00e97160d59867115306e8a7a7b","kind":1,"pubkey":"f6150173b5d6f079b43540d84a8a95d50cf01a48c9d6037984e3d9600d5522af","sig":"cfd5476a1a8477842fdbe66cc5d962f3a2e61f7909e94c36ce05557a4d740d0a69e99c72a4fedccfeb703083afdd3863b828688415efb5d25474dde74c61b1f1","tags":[["p","2126bb824a1335a8adec3c97b5cddb8d7b6525d9d08907d62ec83f33209c7780","wss://bitcoinmaximalists.online/","mention"],["p","683211bd155c7b764e4b99ba263a151d81209be7a566a2bb1971dc1bbd3b715e","wss://nos.lol/%20wss://nostr.land/%20%20avatar%20wss://nostr.wine/%20%20avatar%20wss://purplerelay.com/%20wss://relay.damus.io/%20wss://relay.snort.social/"],["e","be2ddd66a3d151a5fa6a38c0a43ffd4de5b20357abaf28b11954102348664624","wss://nos.lol/%20wss://nostr.land/%20%20avatar%20wss://nostr.wine/%20%20avatar%20wss://purplerelay.com/%20wss://relay.damus.io/%20wss://relay.snort.social/","root","683211bd155c7b764e4b99ba263a151d81209be7a566a2bb1971dc1bbd3b715e"]]}] +[18:54:40.101] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"Day 67 of the $10/day DCA Tracker\n\nToday’s Results:\nBest Performer: Ethereum (+4.11%)\nWorst Performer: REIT (-0.94%)\n\n*graphic shows performance based on the total time since invested. It's tracking how a consistent $10/day DCA performs in each asset over time so you can see cumulative returns, not just daily fluctuations.\n\nFollow along for the ride!\nhttps://blossom.primal.net/659442920b5bf5f07fd154c896d20ea6433ad009e71cffe7aa83332837d98aec.png\n\n","created_at":1759791279,"id":"d9a4b37ca9b5c9fd6a7092cb95fd9d53f4b38ef257a9d4ca45a16ba94aaaf9ef","kind":1,"pubkey":"fac513a1ceded1eabc7407c12997485de8bbb28eddecefa016817fc8d4f407a5","sig":"e3ddab44f0f4e50ff45a72f56000a0d667290697017f93c093a901773c04c029c8060bd0261eff623c745b036332547d56ebcfb59498d9537f27d4fbdde569be","tags":[["r","wss://brb.io/"],["r","wss://eden.nostr.land/"],["r","wss://nos.lol/"],["r","wss://nostr.orangepill.dev/"],["r","wss://nostr.wine/"],["r","wss://relay.current.fyi/"],["r","wss://relay.damus.io/"],["r","wss://relay.snort.social/"],["client","Primal Studio"]]}] +[18:54:42.363] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"GM ☕ 🌅👊","created_at":1759791281,"id":"0d89586ceaa523256647c1089090a7ad097b86a05c502f14772ea2a835fd9713","kind":1,"pubkey":"2822d3a6ae22a0af31193b03f2b2e84b5b2060bccdbefc0ee6696e128a3513bf","sig":"8205dfac792fd37147771dcd77a4b80fe68b6d41680727af7864090c4a5494270dbf7beccebe14e4fc773047ddc04a0b7af5bc3a72837a86085b86059b5a7f3c","tags":[["e","4024ce568c85efe6fc177367976f48bb080717589498fa7f8d5d4e1d0c17b3dd","wss://nostr-verified.wellorder.net","root"],["p","2c65940725bbf10bfbbf52b76c41606754441264f707d3d9cc1ceab86d73fd7f","","mention"]]}] +[18:55:00.398] RECV nos.lol:443: ["EVENT","pool_1_1759791188",{"content":"✄------------ 7:55 ------------✄","created_at":1759791300,"id":"9ef33fbe34d3efe55cb9e4b4cd3b1281da6770c3b65ac761b260214937f3aa48","kind":1,"pubkey":"3ce2b51dca8b67b69c0ccb7c6a226437f7dbcc44a32426e70e52c78336fc72c7","sig":"dc83b7d49a2567540434f3041d5219e8c02c5f58566c6ff8a2b22e6c5e95391d1dc9f0244a149124d3aeeb2ec38515daef837656861cfd2f45f16dfc479fe30c","tags":[]}] +[18:55:03.089] SEND localhost:7555: ["CLOSE", "pool_1_1759791188"] +[18:55:03.089] SEND nos.lol:443: ["CLOSE", "pool_1_1759791188"] + +=== NOSTR WebSocket Debug Log Started === +[05:52:03.588] SEND localhost:7555: ["REQ", "pool_1_1759830723", { + "limit": 10 + }] +[05:52:03.589] RECV localhost:7555: ["EVENT", "pool_1_1759830723", { + "id": "8433206a6e00ff021ddd1f162af38bf724aabd6a7ca5fb9e57bda74f26d46e3a", + "pubkey": "17323141f3a98b014f96ee85df59ee1ce6295e1502644c8e1f86439b20908198", + "created_at": 1759687410, + "kind": 1, + "content": "Test post at 2025-10-05 14:03:30", + "sig": "058a3bc6872e44e8d30cfba1d75267929ec3d73fbafa4c77f99897b700020a42478b51ee3bf4a4901beb376b9d3deca2854b3bca2f18eab169f9f5babdfeccb6", + "tags": [] + }] +[05:52:03.599] RECV localhost:7555: ["EVENT", "pool_1_1759830723", { + "id": "ec98292f570049ed00ae541cba716dcf6c8252b523ce036d9d3d79946ff62927", + "pubkey": "aa3b44608a9e52473a631d596c395dd297443237d56e34e31bdcd4272a1cf558", + "created_at": 1759687283, + "kind": 1, + "content": "Test post at 2025-10-05 14:01:23", + "sig": "3e5ffa59e881c4e772e3c0e65b26d5396b7687de2ae8e930b505fc2617ecfa4b392df32b3af41f8c989e5cb1eeb00d5c1fbedfba2729eb43a3838e49ebfffc8f", + "tags": [] + }] +[05:52:03.610] RECV localhost:7555: ["EVENT", "pool_1_1759830723", { + "id": "c70d6c5c8745c088bd3b99e5f529bb69cd3d162cb9db28aa433a798fa8d811c3", + "pubkey": "2a0c81450868960944c17b0f57f6aa2b5307b56bc8d9cc1b213674c561a3ab85", + "created_at": 1759687249, + "kind": 1, + "content": "Test post at 2025-10-05 14:00:49", + "sig": "76ac20012e84d49a528db140e48024d6a390033df75bfbad64e822208a6a4a3f863b84860da8bcf78c6d8c8933e30fba92f11ebca5f4602ba4428b10584c7ceb", + "tags": [] + }] +[05:52:03.620] RECV localhost:7555: ["EVENT", "pool_1_1759830723", { + "id": "15dbe2cfe9237b93992a3b4de9d90224032e8b613031748da92c46c1aeaa2e9c", + "pubkey": "7c2065299249ff1b4316c07af0d03d67ad145da80b907cc22aa608218c6d2687", + "created_at": 1759687219, + "kind": 1, + "content": "Test post at 2025-10-05 14:00:19", + "sig": "c0aa610658d8cfd76aca25894276a7f3f0573c2993429feff8b1ff10eeb5608ff18cfd79126de5f54e77f5b45a9d39f9006df65b56e4246e50cf72d212509569", + "tags": [] + }] +[05:52:03.631] RECV localhost:7555: ["EOSE", "pool_1_1759830723"] +[05:52:31.497] SEND localhost:7555: ["REQ", "pool_2_1759830751", { + "since": 1759830747, + "limit": 10 + }] +[05:52:31.498] RECV localhost:7555: ["EOSE", "pool_2_1759830751"] +[14:47:46.012] SEND localhost:7555: ["REQ", "pool_1_1759687332", { + "kinds": [1], + "since": 1759687324, + "limit": 10 + }] +[14:47:48.014] SEND localhost:7555: ["REQ", "pool_1_1759830723", { + "limit": 10 + }] +[14:47:48.014] SEND localhost:7555: ["REQ", "pool_2_1759830751", { + "since": 1759830747, + "limit": 10 + }] diff --git a/examples/relay_pool b/examples/relay_pool index c3abc0564457ad72e211329610f9d6571c3d005b..157ec0f824f452c6a9195c7aa4960a3e401b9a84 100755 GIT binary patch literal 199832 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 literal 186704 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 diff --git a/examples/relay_pool.c b/examples/relay_pool.c index 730beed5..29c03ad3 100644 --- a/examples/relay_pool.c +++ b/examples/relay_pool.c @@ -8,6 +8,7 @@ */ #define _POSIX_C_SOURCE 200809L +#define _DEFAULT_SOURCE #include #include #include @@ -109,7 +110,7 @@ void* poll_thread_func(void* arg) { // Print menu void print_menu() { printf("\n=== NOSTR Relay Pool Test Menu ===\n"); - printf("1. Start Pool (wss://relay.laantungir.net)\n"); + printf("1. Start Pool (ws://localhost:7555)\n"); printf("2. Stop Pool\n"); printf("3. Add relay to pool\n"); printf("4. Remove relay from pool\n"); @@ -117,7 +118,8 @@ void print_menu() { printf("6. Remove subscription\n"); printf("7. Show pool status\n"); printf("8. Test reconnection (simulate disconnect)\n"); - printf("9. Exit\n"); + printf("9. Publish Event\n"); + printf("0. Exit\n"); printf("Choice: "); } @@ -405,11 +407,24 @@ void show_pool_status() { printf("├── %s: %s\n", relay_urls[i], status_str); + // Show connection and publish error details + const char* conn_error = nostr_relay_pool_get_relay_last_connection_error(pool, relay_urls[i]); + const char* pub_error = nostr_relay_pool_get_relay_last_publish_error(pool, relay_urls[i]); + + if (conn_error) { + printf("│ ├── Connection error: %s\n", conn_error); + } + if (pub_error) { + printf("│ ├── Last publish error: %s\n", pub_error); + } + const nostr_relay_stats_t* stats = nostr_relay_pool_get_relay_stats(pool, relay_urls[i]); if (stats) { printf("│ ├── Events received: %d\n", stats->events_received); printf("│ ├── Connection attempts: %d\n", stats->connection_attempts); printf("│ ├── Connection failures: %d\n", stats->connection_failures); + printf("│ ├── Events published: %d (OK: %d, Failed: %d)\n", + stats->events_published, stats->events_published_ok, stats->events_published_failed); printf("│ ├── Ping latency: %.2f ms\n", stats->ping_latency_current); printf("│ └── Query latency: %.2f ms\n", stats->query_latency_avg); } @@ -422,6 +437,148 @@ void show_pool_status() { printf("\n"); } + +// Async publish callback context +typedef struct { + int total_relays; + int responses_received; + int success_count; + time_t start_time; +} async_publish_context_t; + +// Async publish callback - called for each relay response +void async_publish_callback(const char* relay_url, const char* event_id, + int success, const char* message, void* user_data) { + async_publish_context_t* ctx = (async_publish_context_t*)user_data; + + ctx->responses_received++; + if (success) { + ctx->success_count++; + } + + // Calculate elapsed time + time_t now = time(NULL); + double elapsed = difftime(now, ctx->start_time); + + // Log to file with real-time feedback + char timestamp[26]; + ctime_r(&now, timestamp); + timestamp[24] = '\0'; + + if (success) { + printf("✅ %s: Published successfully (%.1fs)\n", relay_url, elapsed); + dprintf(log_fd, "[%s] ✅ ASYNC: %s published successfully (%.1fs)\n", + timestamp, relay_url, elapsed); + } else { + printf("❌ %s: Failed - %s (%.1fs)\n", relay_url, message ? message : "unknown error", elapsed); + dprintf(log_fd, "[%s] ❌ ASYNC: %s failed - %s (%.1fs)\n", + timestamp, relay_url, message ? message : "unknown error", elapsed); + } + + // Show progress + printf(" Progress: %d/%d responses received\n", ctx->responses_received, ctx->total_relays); + + if (ctx->responses_received >= ctx->total_relays) { + printf("\n🎉 All relays responded! Final result: %d/%d successful\n", + ctx->success_count, ctx->total_relays); + dprintf(log_fd, "[%s] 🎉 ASYNC: All relays responded - %d/%d successful\n\n", + timestamp, ctx->success_count, ctx->total_relays); + } +} + +// Publish test event with async callbacks +void publish_event() { + if (!pool) { + printf("❌ Pool not started\n"); + return; + } + + printf("\n--- Publish Test Event ---\n"); + + // Generate random keypair + unsigned char private_key[32], public_key[32]; + if (nostr_generate_keypair(private_key, public_key) != NOSTR_SUCCESS) { + printf("❌ Failed to generate keypair\n"); + return; + } + + // Get current timestamp + time_t now = time(NULL); + + // Format content with date/time + char content[256]; + struct tm* tm_info = localtime(&now); + strftime(content, sizeof(content), "Test post at %Y-%m-%d %H:%M:%S", tm_info); + + // Create kind 1 event + cJSON* event = nostr_create_and_sign_event(1, content, NULL, private_key, now); + if (!event) { + printf("❌ Failed to create event\n"); + return; + } + + // Get relay URLs from pool + char** relay_urls = NULL; + nostr_pool_relay_status_t* statuses = NULL; + int relay_count = nostr_relay_pool_list_relays(pool, &relay_urls, &statuses); + + if (relay_count <= 0) { + printf("❌ No relays in pool\n"); + cJSON_Delete(event); + return; + } + + printf("📤 Publishing event to %d relay(s)...\n", relay_count); + printf("Watch for real-time responses below:\n\n"); + + // Setup callback context + async_publish_context_t ctx = {0}; + ctx.total_relays = relay_count; + ctx.start_time = time(NULL); + + // Log the event + char* event_json = cJSON_Print(event); + char timestamp[26]; + ctime_r(&now, timestamp); + timestamp[24] = '\0'; + dprintf(log_fd, "[%s] 📤 Publishing test event\n", timestamp); + dprintf(log_fd, "Event: %s\n\n", event_json); + free(event_json); + + // Publish using async function + int sent_count = nostr_relay_pool_publish_async(pool, (const char**)relay_urls, + relay_count, event, + async_publish_callback, &ctx); + + if (sent_count > 0) { + printf("📡 Event sent to %d/%d relays, waiting for responses...\n\n", + sent_count, relay_count); + + // Wait for all responses or timeout (10 seconds) + time_t wait_start = time(NULL); + while (ctx.responses_received < ctx.total_relays && + (time(NULL) - wait_start) < 10) { + // Let the polling thread process messages + usleep(100000); // 100ms + } + + if (ctx.responses_received < ctx.total_relays) { + printf("\n⏰ Timeout reached - %d/%d relays responded\n", + ctx.responses_received, ctx.total_relays); + } + } else { + printf("❌ Failed to send event to any relays\n"); + } + + // Cleanup + for (int i = 0; i < relay_count; i++) { + free(relay_urls[i]); + } + free(relay_urls); + free(statuses); + cJSON_Delete(event); +} + int main() { // Setup logging to file log_fd = open("pool.log", O_WRONLY | O_CREAT | O_TRUNC, 0644); @@ -489,14 +646,14 @@ int main() { break; } - if (nostr_relay_pool_add_relay(pool, "wss://relay.laantungir.net") != NOSTR_SUCCESS) { + if (nostr_relay_pool_add_relay(pool, "ws://localhost:7555") != NOSTR_SUCCESS) { printf("❌ Failed to add default relay\n"); nostr_relay_pool_destroy(pool); pool = NULL; break; } - printf("✅ Pool started with wss://relay.laantungir.net\n"); + printf("✅ Pool started with ws://localhost:7555\n"); now = time(NULL); ctime_r(&now, timestamp); @@ -544,13 +701,49 @@ int main() { if (url && strlen(url) > 0) { if (nostr_relay_pool_add_relay(pool, url) == NOSTR_SUCCESS) { printf("✅ Relay added: %s\n", url); + printf("⏳ Attempting to connect...\n"); + + // Give it a moment to attempt connection + sleep(2); + + // Check connection status and show any errors + nostr_pool_relay_status_t status = nostr_relay_pool_get_relay_status(pool, url); + const char* error_msg = nostr_relay_pool_get_relay_last_connection_error(pool, url); + + switch (status) { + case NOSTR_POOL_RELAY_CONNECTED: + printf("🟢 Successfully connected to %s\n", url); + break; + case NOSTR_POOL_RELAY_CONNECTING: + printf("🟡 Still connecting to %s...\n", url); + break; + case NOSTR_POOL_RELAY_DISCONNECTED: + printf("⚪ Disconnected from %s\n", url); + if (error_msg) { + printf(" Last error: %s\n", error_msg); + } + break; + case NOSTR_POOL_RELAY_ERROR: + printf("🔴 Connection error for %s\n", url); + if (error_msg) { + printf(" Error details: %s\n", error_msg); + } + break; + default: + printf("❓ Unknown status for %s\n", url); + break; + } now = time(NULL); ctime_r(&now, timestamp); timestamp[24] = '\0'; - dprintf(log_fd, "[%s] ➕ Relay added: %s\n\n", timestamp, url); + dprintf(log_fd, "[%s] ➕ Relay added: %s (status: %d)\n", timestamp, url, status); + if (error_msg) { + dprintf(log_fd, " Connection error: %s\n", error_msg); + } + dprintf(log_fd, "\n"); } else { - printf("❌ Failed to add relay\n"); + printf("❌ Failed to add relay to pool\n"); } } free(url); @@ -655,7 +848,11 @@ int main() { break; } - case '9': // Exit + case '9': // Publish Event + publish_event(); + break; + + case '0': // Exit running = 0; break; diff --git a/nostr_core/core_relay_pool.c b/nostr_core/core_relay_pool.c index ce07f71f..fe48af37 100644 --- a/nostr_core/core_relay_pool.c +++ b/nostr_core/core_relay_pool.c @@ -41,6 +41,7 @@ #define NOSTR_POOL_SUBSCRIPTION_ID_SIZE 32 #define NOSTR_POOL_PING_INTERVAL 59 // 59 seconds - keeps connections alive #define NOSTR_POOL_MAX_PENDING_SUBSCRIPTIONS 8 // Max concurrent subscription timings per relay +#define NOSTR_POOL_MAX_PENDING_PUBLISHES 32 // Max concurrent publish operations // High-resolution timing helper static double get_current_time_ms(void) { @@ -60,6 +61,17 @@ typedef struct subscription_timing { int active; } subscription_timing_t; +// Publish operation tracking for async callbacks +typedef struct publish_operation { + char event_id[65]; // Event ID being published + publish_response_callback_t callback; // User callback function + void* user_data; // User data for callback + time_t publish_time; // When publish was initiated + int pending_relay_count; // Number of relays still pending response + char** pending_relay_urls; // URLs of relays still pending + int total_relay_count; // Total number of relays for this publish +} publish_operation_t; + // Internal structures typedef struct relay_connection { char* url; @@ -147,6 +159,10 @@ struct nostr_relay_pool { nostr_pool_subscription_t* subscriptions[NOSTR_POOL_MAX_SUBSCRIPTIONS]; int subscription_count; + // Active publish operations for async callbacks + publish_operation_t* publish_operations[NOSTR_POOL_MAX_PENDING_PUBLISHES]; + int publish_operation_count; + // Pool-wide settings int default_timeout_ms; }; @@ -217,6 +233,122 @@ static double remove_subscription_timing(relay_connection_t* relay, const char* return -1.0; // Not found } +// Helper functions for managing publish operations +static int add_publish_operation(nostr_relay_pool_t* pool, const char* event_id, + const char** relay_urls, int relay_count, + publish_response_callback_t callback, void* user_data) { + if (!pool || !event_id || !relay_urls || relay_count <= 0) return -1; + + // Check if we have space for another operation + if (pool->publish_operation_count >= NOSTR_POOL_MAX_PENDING_PUBLISHES) { + return -1; // No space available + } + + // Create new publish operation + publish_operation_t* op = calloc(1, sizeof(publish_operation_t)); + if (!op) return -1; + + // Copy event ID + strncpy(op->event_id, event_id, sizeof(op->event_id) - 1); + op->event_id[sizeof(op->event_id) - 1] = '\0'; + + // Set callback and user data + op->callback = callback; + op->user_data = user_data; + op->publish_time = time(NULL); + op->total_relay_count = relay_count; + op->pending_relay_count = relay_count; + + // Copy relay URLs + op->pending_relay_urls = malloc(relay_count * sizeof(char*)); + if (!op->pending_relay_urls) { + free(op); + return -1; + } + + for (int i = 0; i < relay_count; i++) { + op->pending_relay_urls[i] = strdup(relay_urls[i]); + if (!op->pending_relay_urls[i]) { + // Cleanup on failure + for (int j = 0; j < i; j++) { + free(op->pending_relay_urls[j]); + } + free(op->pending_relay_urls); + free(op); + return -1; + } + } + + // Add to pool + pool->publish_operations[pool->publish_operation_count++] = op; + return 0; +} + +static publish_operation_t* find_publish_operation(nostr_relay_pool_t* pool, const char* event_id) { + if (!pool || !event_id) return NULL; + + for (int i = 0; i < pool->publish_operation_count; i++) { + if (pool->publish_operations[i] && + strcmp(pool->publish_operations[i]->event_id, event_id) == 0) { + return pool->publish_operations[i]; + } + } + return NULL; +} + +static void remove_publish_operation(nostr_relay_pool_t* pool, const char* event_id) { + if (!pool || !event_id) return; + + for (int i = 0; i < pool->publish_operation_count; i++) { + if (pool->publish_operations[i] && + strcmp(pool->publish_operations[i]->event_id, event_id) == 0) { + + publish_operation_t* op = pool->publish_operations[i]; + + // Free relay URLs (only non-NULL ones) + if (op->pending_relay_urls) { + for (int j = 0; j < op->total_relay_count; j++) { + if (op->pending_relay_urls[j]) { + free(op->pending_relay_urls[j]); + op->pending_relay_urls[j] = NULL; + } + } + free(op->pending_relay_urls); + op->pending_relay_urls = NULL; + } + free(op); + + // Shift remaining operations + for (int j = i; j < pool->publish_operation_count - 1; j++) { + pool->publish_operations[j] = pool->publish_operations[j + 1]; + } + pool->publish_operations[--pool->publish_operation_count] = NULL; + break; + } + } +} + +static int remove_relay_from_publish_operation(publish_operation_t* op, const char* relay_url) { + if (!op || !relay_url) return -1; + + for (int i = 0; i < op->pending_relay_count; i++) { + if (op->pending_relay_urls[i] && strcmp(op->pending_relay_urls[i], relay_url) == 0) { + // Free this relay URL + free(op->pending_relay_urls[i]); + op->pending_relay_urls[i] = NULL; // Mark as freed + + // Shift remaining URLs + for (int j = i; j < op->pending_relay_count - 1; j++) { + op->pending_relay_urls[j] = op->pending_relay_urls[j + 1]; + } + op->pending_relay_urls[op->pending_relay_count - 1] = NULL; // Clear the last slot + op->pending_relay_count--; + return op->pending_relay_count; // Return remaining count + } + } + return -1; // Relay not found +} + // Helper function to ensure relay connection static int ensure_relay_connection(relay_connection_t* relay) { if (!relay) { @@ -559,6 +691,20 @@ void nostr_relay_pool_destroy(nostr_relay_pool_t* pool) { } } + // Clean up all pending publish operations + for (int i = 0; i < pool->publish_operation_count; i++) { + if (pool->publish_operations[i]) { + publish_operation_t* op = pool->publish_operations[i]; + + // Free relay URLs + for (int j = 0; j < op->total_relay_count; j++) { + free(op->pending_relay_urls[j]); + } + free(op->pending_relay_urls); + free(op); + } + } + // Close all relay connections for (int i = 0; i < pool->relay_count; i++) { if (pool->relays[i]) { @@ -902,25 +1048,48 @@ static void process_relay_message(nostr_relay_pool_t* pool, relay_connection_t* } else if (strcmp(msg_type, "OK") == 0) { // Handle OK response: ["OK", event_id, true/false, message] if (cJSON_IsArray(parsed) && cJSON_GetArraySize(parsed) >= 3) { + cJSON* event_id_json = cJSON_GetArrayItem(parsed, 1); cJSON* success_flag = cJSON_GetArrayItem(parsed, 2); - if (cJSON_IsBool(success_flag)) { - if (cJSON_IsTrue(success_flag)) { + if (cJSON_IsString(event_id_json) && cJSON_IsBool(success_flag)) { + const char* event_id = cJSON_GetStringValue(event_id_json); + int success = cJSON_IsTrue(success_flag); + const char* error_message = NULL; + + // Extract error message if available + if (!success && cJSON_GetArraySize(parsed) >= 4) { + cJSON* error_msg = cJSON_GetArrayItem(parsed, 3); + if (cJSON_IsString(error_msg)) { + error_message = cJSON_GetStringValue(error_msg); + } + } + + // Update relay statistics + if (success) { relay->stats.events_published_ok++; } else { relay->stats.events_published_failed++; - // Store error message if available - if (cJSON_GetArraySize(parsed) >= 4) { - cJSON* error_msg = cJSON_GetArrayItem(parsed, 3); - if (cJSON_IsString(error_msg)) { - const char* msg = cJSON_GetStringValue(error_msg); - if (msg) { - strncpy(relay->last_publish_error, msg, - sizeof(relay->last_publish_error) - 1); - relay->last_publish_error[sizeof(relay->last_publish_error) - 1] = '\0'; - relay->last_publish_error_time = time(NULL); - } - } + // Store error message for legacy API + if (error_message) { + strncpy(relay->last_publish_error, error_message, + sizeof(relay->last_publish_error) - 1); + relay->last_publish_error[sizeof(relay->last_publish_error) - 1] = '\0'; + relay->last_publish_error_time = time(NULL); + } + } + + // Check for async publish operation callback + publish_operation_t* op = find_publish_operation(pool, event_id); + if (op && op->callback) { + // Call the user's callback + op->callback(relay->url, event_id, success, error_message, op->user_data); + + // Remove this relay from the pending list + int remaining = remove_relay_from_publish_operation(op, relay->url); + + // If no more relays pending, remove the operation + if (remaining == 0) { + remove_publish_operation(pool, event_id); } } } @@ -1113,16 +1282,35 @@ cJSON* nostr_relay_pool_get_event( return result; } -int nostr_relay_pool_publish( + +int nostr_relay_pool_publish_async( nostr_relay_pool_t* pool, const char** relay_urls, int relay_count, - cJSON* event) { + cJSON* event, + publish_response_callback_t callback, + void* user_data) { if (!pool || !relay_urls || relay_count <= 0 || !event) { return -1; } + // Extract event ID for tracking + cJSON* event_id_json = cJSON_GetObjectItem(event, "id"); + if (!event_id_json || !cJSON_IsString(event_id_json)) { + return -1; // Event must have an ID + } + const char* event_id = cJSON_GetStringValue(event_id_json); + + // Add publish operation for tracking (only if callback provided) + publish_operation_t* op = NULL; + if (callback) { + if (add_publish_operation(pool, event_id, relay_urls, relay_count, callback, user_data) != 0) { + return -1; // Failed to add operation + } + op = find_publish_operation(pool, event_id); + } + int success_count = 0; for (int i = 0; i < relay_count; i++) { @@ -1135,55 +1323,35 @@ int nostr_relay_pool_publish( } if (relay && ensure_relay_connection(relay) == 0) { - double start_time_ms = get_current_time_ms(); - // Send EVENT message if (nostr_relay_send_event(relay->ws_client, event) >= 0) { relay->stats.events_published++; - - // Wait for OK response - char buffer[1024]; - time_t wait_start = time(NULL); - int got_response = 0; - - while (time(NULL) - wait_start < 5 && !got_response) { // 5 second timeout - int len = nostr_ws_receive(relay->ws_client, buffer, sizeof(buffer) - 1, 1000); - if (len > 0) { - buffer[len] = '\0'; - - char* msg_type = NULL; - cJSON* parsed = NULL; - if (nostr_parse_relay_message(buffer, &msg_type, &parsed) == 0) { - if (msg_type && strcmp(msg_type, "OK") == 0) { - // Handle OK response - if (cJSON_IsArray(parsed) && cJSON_GetArraySize(parsed) >= 3) { - cJSON* success_flag = cJSON_GetArrayItem(parsed, 2); - if (cJSON_IsBool(success_flag) && cJSON_IsTrue(success_flag)) { - success_count++; - relay->stats.events_published_ok++; - - // Update publish latency statistics - double latency_ms = get_current_time_ms() - start_time_ms; - if (relay->stats.publish_samples == 0) { - relay->stats.publish_latency_avg = latency_ms; - } else { - relay->stats.publish_latency_avg = - (relay->stats.publish_latency_avg * relay->stats.publish_samples + latency_ms) / - (relay->stats.publish_samples + 1); - } - relay->stats.publish_samples++; - } else { - relay->stats.events_published_failed++; - } - } - got_response = 1; - } - if (msg_type) free(msg_type); - if (parsed) cJSON_Delete(parsed); - } + success_count++; + } else { + // If send failed and we have a callback, notify immediately + if (callback && op) { + callback(relay_urls[i], event_id, 0, "Failed to send event to relay", user_data); + + // Remove this relay from the pending operation + int remaining = remove_relay_from_publish_operation(op, relay_urls[i]); + if (remaining == 0) { + remove_publish_operation(pool, event_id); + op = NULL; // Mark as removed to prevent double-free } } } + } else { + // Connection failed - notify callback immediately if provided + if (callback && op) { + callback(relay_urls[i], event_id, 0, "Failed to connect to relay", user_data); + + // Remove this relay from the pending operation + int remaining = remove_relay_from_publish_operation(op, relay_urls[i]); + if (remaining == 0) { + remove_publish_operation(pool, event_id); + op = NULL; // Mark as removed to prevent double-free + } + } } } diff --git a/nostr_core/nostr_core.h b/nostr_core/nostr_core.h index 56e47c53..907e1821 100644 --- a/nostr_core/nostr_core.h +++ b/nostr_core/nostr_core.h @@ -288,11 +288,23 @@ cJSON* nostr_relay_pool_get_event( int relay_count, cJSON* filter, int timeout_ms); -int nostr_relay_pool_publish( +// Async publish callback typedef +typedef void (*publish_response_callback_t)( + const char* relay_url, + const char* event_id, + int success, // 1 for OK, 0 for rejection + const char* message, // Error message if rejected, NULL if success + void* user_data +); + +// Async publish function (only async version available) +int nostr_relay_pool_publish_async( nostr_relay_pool_t* pool, const char** relay_urls, int relay_count, - cJSON* event); + cJSON* event, + publish_response_callback_t callback, + void* user_data); // Status and statistics functions nostr_pool_relay_status_t nostr_relay_pool_get_relay_status( diff --git a/pool.log b/pool.log index 6d639045..43e832a1 100644 --- a/pool.log +++ b/pool.log @@ -1,1566 +1,47 @@ -[Fri Oct 3 04:46:58 2025] 🚀 Pool test started +[Tue Oct 7 05:51:04 2025] 🚀 Pool test started -[Fri Oct 3 04:47:06 2025] 🏊 Pool started with default relay +[Tue Oct 7 05:51:07 2025] 🏊 Pool started with default relay -[Fri Oct 3 04:47:40 2025] 🔍 New subscription created (ID: 1) +[Tue Oct 7 05:52:03 2025] 🔍 New subscription created (ID: 1) Filter: { - "kinds": [1], - "since": 1759481255, "limit": 10 } -[Fri Oct 3 04:47:40 2025] 📋 EOSE received - 0 events collected +[Tue Oct 7 05:52:03 2025] 📨 EVENT from ws://localhost:7555 +├── ID: 8433206a6e00... +├── Pubkey: 17323141f3a9... +├── Kind: 1 +├── Created: 1759687410 +└── Content: Test post at 2025-10-05 14:03:30 -[Fri Oct 3 04:48:09 2025] ➕ Relay added: wss://nos.lol +[Tue Oct 7 05:52:03 2025] 📨 EVENT from ws://localhost:7555 +├── ID: ec98292f5700... +├── Pubkey: aa3b44608a9e... +├── Kind: 1 +├── Created: 1759687283 +└── Content: Test post at 2025-10-05 14:01:23 -[Fri Oct 3 04:49:01 2025] 🔍 New subscription created (ID: 2) +[Tue Oct 7 05:52:03 2025] 📨 EVENT from ws://localhost:7555 +├── ID: c70d6c5c8745... +├── Pubkey: 2a0c81450868... +├── Kind: 1 +├── Created: 1759687249 +└── Content: Test post at 2025-10-05 14:00:49 + +[Tue Oct 7 05:52:03 2025] 📨 EVENT from ws://localhost:7555 +├── ID: 15dbe2cfe923... +├── Pubkey: 7c2065299249... +├── Kind: 1 +├── Created: 1759687219 +└── Content: Test post at 2025-10-05 14:00:19 + +[Tue Oct 7 05:52:03 2025] 📋 EOSE received - 0 events collected + +[Tue Oct 7 05:52:31 2025] 🔍 New subscription created (ID: 2) Filter: { - "since": 1759481338, + "since": 1759830747, "limit": 10 } -[Fri Oct 3 04:49:02 2025] 📨 EVENT from wss://nos.lol -├── ID: d20683a8bef0... -├── Pubkey: fda2c930fc10... -├── Kind: 23195 -├── Created: 1759481342 -└── Content: GGmq+90RnCnnuCQpWuqP1N9s0651oxTlY3Tu+WLVsmw9lrIEPeo0Bzn8/b2NxxhaD9dHytmLkDbysjlMMzVrTw==?iv=bRFFW... - -[Fri Oct 3 04:49:02 2025] 📨 EVENT from wss://nos.lol -├── ID: 0f5c64adc2b2... -├── Pubkey: 4e19bf35f05a... -├── Kind: 23195 -├── Created: 1759481340 -└── Content: OBM74wU9m2upr5SZKuqVu7gusod0GyPlkz+0npcp0xEDTLZv3MiD4bF862G3XttXeT9wm3ZMn4izTiw9NLMJiw==?iv=M27y0... - -[Fri Oct 3 04:49:02 2025] 📨 EVENT from wss://nos.lol -├── ID: f9b523254bf6... -├── Pubkey: 005a5052b942... -├── Kind: 23195 -├── Created: 1759481339 -└── Content: 17KQ2E9+65kknV2x6HhRTFW186fJI8tfsM0me65Cb+fBlBIq9MYhRb0O/fUMUqAaRE4BG9KkZ8EPWQvQcs0a6Q==?iv=khPOF... - -[Fri Oct 3 04:49:02 2025] 📨 EVENT from wss://nos.lol -├── ID: b1ef6b14d735... -├── Pubkey: fba1bbd8ab57... -├── Kind: 5 -├── Created: 1759481338 -└── Content: - -[Fri Oct 3 04:49:02 2025] 📋 EOSE received - 0 events collected - -[Fri Oct 3 04:49:05 2025] 📨 EVENT from wss://nos.lol -├── ID: 1cc69bbda533... -├── Pubkey: 87050b491524... -├── Kind: 10002 -├── Created: 1759481344 -└── Content: - -[Fri Oct 3 04:49:06 2025] 📨 EVENT from wss://nos.lol -├── ID: 27f48b699bb1... -├── Pubkey: 87050b491524... -├── Kind: 0 -├── Created: 1759481344 -└── Content: {"name":"Yahoo!ニュースbot","about":"Yahoo!ニュースをRSSで取得して15分おきに投... - -[Fri Oct 3 04:49:07 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: 44838166608b... -├── Pubkey: e568a76a4f88... -├── Kind: 15555 -├── Created: 1759481347 -└── Content: 📊 Bitcoin Mempool Status - -Pending Transactions: 5,525 -Total Size: 2.19 MB -Memory Usage: 4.2% -A... - -[Fri Oct 3 04:49:08 2025] 📨 EVENT from wss://nos.lol -├── ID: 2990d842a3cf... -├── Pubkey: cd2236014df2... -├── Kind: 23195 -├── Created: 1759481348 -└── Content: GYFx7fT1QlCmfdje20dBdKi/VENAi/wbPpysu/Jea6XFQwLs72EpETGZh8MheSW4Zm+8T+4R6gaHac6xoiMt6Q==?iv=v4Y8T... - -[Fri Oct 3 04:49:08 2025] 📨 EVENT from wss://nos.lol -├── ID: 6697f4dfbb59... -├── Pubkey: 10f7c7f772dd... -├── Kind: 1 -├── Created: 1759481347 -└── Content: Ha ha ha ha, read that I initially thought you were saying I’m a dick crypto bro” (excuse me,... - -[Fri Oct 3 04:49:09 2025] 📨 EVENT from wss://nos.lol -├── ID: 3b1f33c1121a... -├── Pubkey: 1e3aa9756736... -├── Kind: 1 -├── Created: 1759481348 -└── Content: vmess://eyJhZGQiOiAiMTAzLjE1OS4yMDYuMzUiLCAiYWlkIjogIjAiLCAiYWxwbiI6ICIiLCAiZnAiOiAiIiwgImhvc3QiO... - -[Fri Oct 3 04:49:09 2025] 📨 EVENT from wss://nos.lol -├── ID: 6d6ff4c06337... -├── Pubkey: 4a9be43c2a7e... -├── Kind: 1 -├── Created: 1759481346 -└── Content: Gotta love the arrogance of thinking you know better than almost 20,000 climate scientists just b... - -[Fri Oct 3 04:49:09 2025] 📨 EVENT from wss://nos.lol -├── ID: 864505dde6c3... -├── Pubkey: fba1bbd8ab57... -├── Kind: 5 -├── Created: 1759481349 -└── Content: - -[Fri Oct 3 04:49:09 2025] 📨 EVENT from wss://nos.lol -├── ID: 263cd13d28d6... -├── Pubkey: a4132de3f6fe... -├── Kind: 0 -├── Created: 1759481347 -└── Content: {"name":"RSS-to-Nostr of Al Jazeera English","about":"RSS-to-Nostr feed of Al Jazeera English\nMo... - -[Fri Oct 3 04:49:09 2025] 📨 EVENT from wss://nos.lol -├── ID: 9f0266fd87b5... -├── Pubkey: a4132de3f6fe... -├── Kind: 3 -├── Created: 1759481349 -└── Content: - -[Fri Oct 3 04:49:10 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: e24a05cd3c2c... -├── Pubkey: 1dbaf7d631fc... -├── Kind: 20000 -├── Created: 1759481350 -└── Content: Лемуры без инета остались - -[Fri Oct 3 04:49:12 2025] 📨 EVENT from wss://nos.lol -├── ID: d6352147e185... -├── Pubkey: 06f4638e1640... -├── Kind: 1 -├── Created: 1759481351 -└── Content: 🥰🥰 - - - -[Fri Oct 3 04:49:12 2025] 📨 EVENT from wss://nos.lol -├── ID: 85cba6515d0b... -├── Pubkey: 2ce6eab2e7fc... -├── Kind: 7 -├── Created: 1759481351 -└── Content: 🫡 - -[Fri Oct 3 04:49:13 2025] 📨 EVENT from wss://nos.lol -├── ID: b163f750a12a... -├── Pubkey: 37b43fd9346e... -├── Kind: 30078 -├── Created: 1759481353 -└── Content: Ahb5fjpwg4FYEElHSV38gl26iG9rFVgsXkjpciX3cWTa181vn/DLHa9sT3WW89AtF8ngJ5DiQ7ud8NKSTkDfhoBcpDQu9GCcx... - -[Fri Oct 3 04:49:13 2025] 📨 EVENT from wss://nos.lol -├── ID: d9b58cab0524... -├── Pubkey: f4635d901d37... -├── Kind: 23195 -├── Created: 1759481353 -└── Content: 1ThyO9hO0ZdnY/3dIw3c5FRjqd/ALeHRyzvjdBex6fjw1/r/E+oBO+uqPW3/eEv2VXGovsZQTLgbnu8sJIShjA==?iv=tgmRY... - -[Fri Oct 3 04:49:13 2025] 📨 EVENT from wss://nos.lol -├── ID: 9a7c44d036a9... -├── Pubkey: 45b35521c312... -├── Kind: 1 -├── Created: 1759481358 -└── Content: https://image.nostr.build/042c7d7d1a50731f5f667c6da77ddbbf28fecb4418bb8de26763d6689257a174.jpg - -[Fri Oct 3 04:49:14 2025] 📨 EVENT from wss://nos.lol -├── ID: 67bd1dc52108... -├── Pubkey: b869548bf2f5... -├── Kind: 23195 -├── Created: 1759481354 -└── Content: qRiHDdB/6dBIR1r8MWdWmReC1H/RjPTJ30qFACpTQIVbvcWw+IMb9VLXiIPYpt925ZX/jXOnITXPm3Nh2PKg6g==?iv=U4os4... - -[Fri Oct 3 04:49:15 2025] 📨 EVENT from wss://nos.lol -├── ID: 3141d6144adb... -├── Pubkey: 8921652e6f2e... -├── Kind: 23195 -├── Created: 1759481355 -└── Content: bGOb0ux3HgRmIAr8WF5V1skOuE2+YG18GuuH0bGkSaA0q5MKJMLPhFQCe42Lx9Pdp1Nf7V+k/BMOWAM6FotsKw==?iv=Ipdik... - -[Fri Oct 3 04:49:16 2025] 📨 EVENT from wss://nos.lol -├── ID: 747c506cd79b... -├── Pubkey: 456f5df2aa0d... -├── Kind: 10002 -├── Created: 1759481354 -└── Content: - -[Fri Oct 3 04:49:16 2025] 📨 EVENT from wss://nos.lol -├── ID: bd051b218377... -├── Pubkey: 451bbdb2caa4... -├── Kind: 10002 -├── Created: 1759481355 -└── Content: - -[Fri Oct 3 04:49:16 2025] 📨 EVENT from wss://nos.lol -├── ID: d69ca7518e6a... -├── Pubkey: 456f5df2aa0d... -├── Kind: 0 -├── Created: 1759481354 -└── Content: {"name":"Disclose.tv","about":"Observing world events unfold in the grand theater of our time.\n\... - -[Fri Oct 3 04:49:17 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: ca85b756856c... -├── Pubkey: e568a76a4f88... -├── Kind: 15555 -├── Created: 1759481357 -└── Content: 📊 Bitcoin Mempool Status - -Pending Transactions: 5,549 -Total Size: 2.19 MB -Memory Usage: 4.2% -A... - -[Fri Oct 3 04:49:18 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: 9b0ba5727cf9... -├── Pubkey: 1dbaf7d631fc... -├── Kind: 20000 -├── Created: 1759481358 -└── Content: @GHZ#d648 да, конечно - -[Fri Oct 3 04:49:18 2025] 📨 EVENT from wss://nos.lol -├── ID: 074a4ab3b5c0... -├── Pubkey: aa6b49bef060... -├── Kind: 23195 -├── Created: 1759481360 -└── Content: UqjiJp3FgDFpTC8kQGcDWurIcTrV9qcPl7uViTa1bTsJZiGcylkXk6E9FEr49dXpqV64IFrO1K83hRy0zIen+w==?iv=C53OC... - -[Fri Oct 3 04:49:20 2025] 📨 EVENT from wss://nos.lol -├── ID: fa70c8d38741... -├── Pubkey: 95939b99059c... -├── Kind: 23195 -├── Created: 1759481360 -└── Content: N0KQPDepXcZKmyuWtZRnR60O8kL9mDADKNsD+kpzjr+iz6q4odNfNm8Vm9qSaZVjCF4yaR00ZCEeFDS0/c91Eg==?iv=SND/H... - -[Fri Oct 3 04:49:21 2025] 📨 EVENT from wss://nos.lol -├── ID: 46cab7608ad7... -├── Pubkey: 7f0a486c4b47... -├── Kind: 7 -├── Created: 1759481349 -└── Content: + - -[Fri Oct 3 04:49:22 2025] 📨 EVENT from wss://nos.lol -├── ID: 19bb39011925... -├── Pubkey: a790a7495795... -├── Kind: 23195 -├── Created: 1759481359 -└── Content: X7ygNfaaXHwz9IK/u68kN1/cQynNY/G6DOFiijPtO1Vytz3aHJIjmOmCOoiu2BSi7wIXv8eHNNkJNyZsjtX8SA==?iv=1zSUp... - -[Fri Oct 3 04:49:22 2025] 📨 EVENT from wss://nos.lol -├── ID: 2a85ad943e05... -├── Pubkey: 7c17b40889d1... -├── Kind: 7 -├── Created: 1759481361 -└── Content: + - -[Fri Oct 3 04:49:23 2025] 📨 EVENT from wss://nos.lol -├── ID: 80ed59e8e1e9... -├── Pubkey: f18571e72c93... -├── Kind: 7 -├── Created: 1759481363 -└── Content: 😂 - -[Fri Oct 3 04:49:24 2025] 📨 EVENT from wss://nos.lol -├── ID: aadbbace3241... -├── Pubkey: 7f0a486c4b47... -├── Kind: 3 -├── Created: 1759481352 -└── Content: - -[Fri Oct 3 04:49:24 2025] 📨 EVENT from wss://nos.lol -├── ID: 67c3eadac347... -├── Pubkey: 4b29db7a76f3... -├── Kind: 7 -├── Created: 1759481364 -└── Content: 💜 - -[Fri Oct 3 04:49:24 2025] 📨 EVENT from wss://nos.lol -├── ID: 4fa2ea1e88b9... -├── Pubkey: 1266a86330a5... -├── Kind: 0 -├── Created: 1759481361 -└── Content: {"name":"RSS-to-Nostr of Nature","about":"RSS-to-Nostr feed of Nature\nMore RSS-To-Nostr can be f... - -[Fri Oct 3 04:49:25 2025] 📨 EVENT from wss://nos.lol -├── ID: ac234062097a... -├── Pubkey: 1266a86330a5... -├── Kind: 3 -├── Created: 1759481365 -└── Content: - -[Fri Oct 3 04:49:26 2025] 📨 EVENT from wss://nos.lol -├── ID: 9106cdfb8eea... -├── Pubkey: 9b3334b66d04... -├── Kind: 7 -├── Created: 1759481366 -└── Content: + - -[Fri Oct 3 04:49:27 2025] 📨 EVENT from wss://nos.lol -├── ID: 2bc5a446bf6f... -├── Pubkey: ebb6df54ef97... -├── Kind: 23195 -├── Created: 1759481366 -└── Content: znpXNoxigcsXsn/RLb3a1gSjlTgQwHQmh7HTHOgp4yGA2jgMvYqS4QYXPBosCgoPtCk5U/sfeqOKIQtUvxqgTw==?iv=9lJYt... - -[Fri Oct 3 04:49:27 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: 2e479971302d... -├── Pubkey: e568a76a4f88... -├── Kind: 15555 -├── Created: 1759481367 -└── Content: 📊 Bitcoin Mempool Status - -Pending Transactions: 5,592 -Total Size: 2.20 MB -Memory Usage: 4.2% -A... - -[Fri Oct 3 04:49:28 2025] 📨 EVENT from wss://nos.lol -├── ID: 2324a6f9ab5e... -├── Pubkey: f18571e72c93... -├── Kind: 6 -├── Created: 1759481367 -└── Content: {"id":"c170ef255921cdf85f7e3bdf0d51ca69426ea6b6ddf5da0bb719b04b3d168ca3","pubkey":"38abc08e19dc13... - -[Fri Oct 3 04:49:28 2025] 📨 EVENT from wss://nos.lol -├── ID: 23f01698bced... -├── Pubkey: 4b29db7a76f3... -├── Kind: 6 -├── Created: 1759481369 -└── Content: {"id":"541dd83ccd4782282b9f5e5b9f1ba955735d26353e2d57f315cca9b550dfcc55","pubkey":"b190175cef407c... - -[Fri Oct 3 04:49:28 2025] 📨 EVENT from wss://nos.lol -├── ID: 3790209d3e20... -├── Pubkey: c6be73b9a274... -├── Kind: 1 -├── Created: 1759481368 -└── Content: ⠃⠊⠞⠉⠕⠊⠝ - -⠼⠃⠁ ⠍⠊⠇⠇⠊⠕⠝⠑⠝ - -⠎⠁⠞⠕⠎⠓⠊ - -🎧🔈 - -... - -[Fri Oct 3 04:49:29 2025] 📨 EVENT from wss://nos.lol -├── ID: db00d665d2bd... -├── Pubkey: 005a5052b942... -├── Kind: 23195 -├── Created: 1759481369 -└── Content: FTUIMKZKRZdocHGaPVMakgB1qyPLFXdHRO+lK1i4w/5S4h5K8PmzGEgQR/83RDyForCTu23YXILfAG2zLGu40w==?iv=dRZCH... - -[Fri Oct 3 04:49:30 2025] 📨 EVENT from wss://nos.lol -├── ID: ae131768c6ec... -├── Pubkey: 4e19bf35f05a... -├── Kind: 23195 -├── Created: 1759481370 -└── Content: 2KwbBbVGHfAJjxrnq/byLJPVjaqafL15ysDSvuqijg83fzzoR0763z+lrGO4mWTC8izeaGDfvWtqE0l/xrAInQ==?iv=rD60i... - -[Fri Oct 3 04:49:31 2025] 📨 EVENT from wss://nos.lol -├── ID: c733c8e1f2db... -├── Pubkey: e83b66a8ed2d... -├── Kind: 7 -├── Created: 1759481370 -└── Content: + - -[Fri Oct 3 04:49:31 2025] 📨 EVENT from wss://nos.lol -├── ID: c528121b9426... -├── Pubkey: fda2c930fc10... -├── Kind: 23195 -├── Created: 1759481372 -└── Content: uIaxcmOzTXXhS+URd9a9kwZIYugIz0jGrsVMZ4xE15xH6DZMvyMUShgq58URpo5Ja2byQ1cpRMEqFby81I4jtw==?iv=61oyn... - -[Fri Oct 3 04:49:32 2025] 📨 EVENT from wss://nos.lol -├── ID: 9577ac5dd286... -├── Pubkey: 832b77d5ecb0... -├── Kind: 1 -├── Created: 1759481372 -└── Content: 🟩BUY BTC with GBP -Price: 90876.6GBP (2%) -BTC: 0.011 -GBP: 1000 -Method: Faster Payments -Created:... - -[Fri Oct 3 04:49:35 2025] 📨 EVENT from wss://nos.lol -├── ID: 2c3f21665651... -├── Pubkey: 86d2ed40db51... -├── Kind: 6300 -├── Created: 1759481373 -└── Content: [["e","7e88304f56cf8f962d5acf1d53ffae3f07ccd750bbd14fdb0221dc3a832b7891"],["e","f20e73aad66cc3d22... - -[Fri Oct 3 04:49:35 2025] 📋 EOSE received - 0 events collected - -[Fri Oct 3 04:49:37 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: f3281d6749b7... -├── Pubkey: e568a76a4f88... -├── Kind: 15555 -├── Created: 1759481377 -└── Content: 📊 Bitcoin Mempool Status - -Pending Transactions: 5,638 -Total Size: 2.21 MB -Memory Usage: 4.3% -A... - -[Fri Oct 3 04:49:38 2025] 📨 EVENT from wss://nos.lol -├── ID: 6472bc38da2a... -├── Pubkey: 6c015011ac57... -├── Kind: 23195 -├── Created: 1759481377 -└── Content: yQpk398G95opIw45m7BW9HtuQW8vrkVIoSTRYgVaxdggAhZhYqv6kp+PGuzjets0BQr/KiMTjNWeN+x/BykdUA==?iv=sh5pz... - -[Fri Oct 3 04:49:38 2025] 📨 EVENT from wss://nos.lol -├── ID: d6426a74fca0... -├── Pubkey: 9f3c476980f2... -├── Kind: 10002 -├── Created: 1759481376 -└── Content: - -[Fri Oct 3 04:49:38 2025] 📨 EVENT from wss://nos.lol -├── ID: a9ade407f871... -├── Pubkey: 9f3c476980f2... -├── Kind: 0 -├── Created: 1759481376 -└── Content: {"name":"USLUCK","about":"#memes","picture":"https://media.channels.im/accounts/avatars/110/748/6... - -[Fri Oct 3 04:49:40 2025] 📨 EVENT from wss://nos.lol -├── ID: 297facb217df... -├── Pubkey: 2c7cc62a697e... -├── Kind: 1 -├── Created: 1759481383 -└── Content: アルトマンは @ sama で行けるけど他のユーザは cameo を使ってないと @ で... - -[Fri Oct 3 04:49:41 2025] 📨 EVENT from wss://nos.lol -├── ID: 4eff34df6352... -├── Pubkey: 22db9dbc73b2... -├── Kind: 13194 -├── Created: 1759481380 -└── Content: pay_invoice make_invoice get_balance get_info list_transactions lookup_invoice - -[Fri Oct 3 04:49:41 2025] 📨 EVENT from wss://nos.lol -├── ID: f3129e5e1eeb... -├── Pubkey: fcc2a0bd8f58... -├── Kind: 38383 -├── Created: 1759481381 -└── Content: - -[Fri Oct 3 04:49:43 2025] 📨 EVENT from wss://nos.lol -├── ID: 1c56052f3af2... -├── Pubkey: f4635d901d37... -├── Kind: 23195 -├── Created: 1759481383 -└── Content: 9dWLOcK4B10b1tXxVe6bNvZNDK/yBrinUNSXsp34oYXdn8ICjSGEcCnTgo7Zv2eP7zcHPQ5MCTIQ748piHxBJA==?iv=eXlSs... - -[Fri Oct 3 04:49:43 2025] 📨 EVENT from wss://nos.lol -├── ID: 9641ce2212d7... -├── Pubkey: 22db9dbc73b2... -├── Kind: 23195 -├── Created: 1759481383 -└── Content: fAyC9TSuCOPEQpXz2431BRPwUFu4VWgdo2N/QdBBkwg+PoB4K8d2sv26r7BKtP6K93UEF68STE4LZ0wwA9MP7g==?iv=62HpL... - -[Fri Oct 3 04:49:44 2025] 📨 EVENT from wss://nos.lol -├── ID: d6831a429424... -├── Pubkey: b869548bf2f5... -├── Kind: 23195 -├── Created: 1759481384 -└── Content: gfPoMoS/oI0B8Blm6x9Y7kawnP2jn3jgYWh1R+DFUqsdC4Pz/khf5D9o+e8nPKqCNDOTghh52kRHDRV3Nv8utg==?iv=Gs9/N... - -[Fri Oct 3 04:49:45 2025] 📨 EVENT from wss://nos.lol -├── ID: 283878ddd4e2... -├── Pubkey: 4a9a6519dce5... -├── Kind: 23195 -├── Created: 1759481385 -└── Content: NHsgNFWQo4GYYq4ID8WkgqNyFgHJ/rZIPIR/vL8lUEAc8uY1M7gIdwqcZtbrh0AYyjh2i7hgXm5hNLZ29K1BhA==?iv=cFeMD... - -[Fri Oct 3 04:49:45 2025] 📨 EVENT from wss://nos.lol -├── ID: abd9950cffe0... -├── Pubkey: f18571e72c93... -├── Kind: 7 -├── Created: 1759481385 -└── Content: 💜 - -[Fri Oct 3 04:49:46 2025] 📨 EVENT from wss://nos.lol -├── ID: 5881f260823f... -├── Pubkey: 84de35e2584d... -├── Kind: 1009 -├── Created: 1759481386 -└── Content: - -[Fri Oct 3 04:49:47 2025] 📨 EVENT from wss://nos.lol -├── ID: 9fea281c8f5b... -├── Pubkey: f18571e72c93... -├── Kind: 6 -├── Created: 1759481386 -└── Content: {"id":"a09bfd6ea0f3acdaba3d7608c9dd3e6d074db12e22d3c4b81898e744b7dd27f5","pubkey":"17d277dcce68d6... - -[Fri Oct 3 04:49:47 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: 629c8ec5702f... -├── Pubkey: e568a76a4f88... -├── Kind: 15555 -├── Created: 1759481387 -└── Content: 📊 Bitcoin Mempool Status - -Pending Transactions: 5,674 -Total Size: 2.22 MB -Memory Usage: 4.3% -A... - -[Fri Oct 3 04:49:47 2025] 📨 EVENT from wss://nos.lol -├── ID: 533451732401... -├── Pubkey: 14fb47506cfd... -├── Kind: 23195 -├── Created: 1759481385 -└── Content: KLjNGT0Z+R8YLb8ZoeQF+7aRITuSdaSzqdt+qJ7jO3UV2BjpUv8twhIuzY/SHVuInNPzKEjImc/M5bjjmmJ/lQ==?iv=ewS3q... - -[Fri Oct 3 04:49:47 2025] 📨 EVENT from wss://nos.lol -├── ID: 7ef907ab6b4b... -├── Pubkey: 82c83a9892d5... -├── Kind: 0 -├── Created: 1759481385 -└── Content: {"name":"RSS-to-Nostr of The Cradle","about":"RSS-to-Nostr feed of The Cradle\nMore RSS-To-Nostr ... - -[Fri Oct 3 04:49:48 2025] 📨 EVENT from wss://nos.lol -├── ID: df095e616e59... -├── Pubkey: 82c83a9892d5... -├── Kind: 3 -├── Created: 1759481388 -└── Content: - -[Fri Oct 3 04:49:48 2025] 📨 EVENT from wss://nos.lol -├── ID: 3a29e55a06e4... -├── Pubkey: aa6b49bef060... -├── Kind: 23195 -├── Created: 1759481390 -└── Content: g75pNjNGAAi3Emcpd3m1x5J7n5wZRs/39Vp/EHowImwpcoBWJnaCaFOEOmirECXJ6mTJXzHzDhjnRjG61TosAg==?iv=MRFzA... - -[Fri Oct 3 04:49:49 2025] 📨 EVENT from wss://nos.lol -├── ID: a80e6c128cf5... -├── Pubkey: 5813cb0c08b9... -├── Kind: 10002 -├── Created: 1759481387 -└── Content: - -[Fri Oct 3 04:49:49 2025] 📨 EVENT from wss://nos.lol -├── ID: 8c66d931b8ad... -├── Pubkey: 06f4638e1640... -├── Kind: 7 -├── Created: 1759481388 -└── Content: + - -[Fri Oct 3 04:49:50 2025] 📨 EVENT from wss://nos.lol -├── ID: e3d7e89fbb05... -├── Pubkey: 5813cb0c08b9... -├── Kind: 0 -├── Created: 1759481387 -└── Content: {"name":"Catalin Cimpanu","about":"Cybersecurity reporter for Risky Business\n\n#infosec #cyberse... - -[Fri Oct 3 04:49:50 2025] 📨 EVENT from wss://nos.lol -├── ID: 694178f999b4... -├── Pubkey: 06f4638e1640... -├── Kind: 7 -├── Created: 1759481389 -└── Content: + - -[Fri Oct 3 04:49:52 2025] 📨 EVENT from wss://nos.lol -├── ID: f0a3917378df... -├── Pubkey: a790a7495795... -├── Kind: 23195 -├── Created: 1759481391 -└── Content: HtXhlZIuOjOu5OFHbyr9UgJzI6NQ5FCOvDnk2ABHyVY1XILsyk+a2MqjYd2Z4DpDJkZ07jWK8QyGhHJ+CUeHsg==?iv=wezVL... - -[Fri Oct 3 04:49:56 2025] 📨 EVENT from wss://nos.lol -├── ID: c880574ff3dd... -├── Pubkey: 9ca0bd745074... -├── Kind: 1 -├── Created: 1759481396 -└── Content: There's been prior incidents with auditors in several hotel locations getting assaulted. Even wit... - -[Fri Oct 3 04:49:58 2025] 📨 EVENT from wss://nos.lol -├── ID: b56252fe2113... -├── Pubkey: b4a14b700712... -├── Kind: 0 -├── Created: 1759481398 -└── Content: {"name":"","banner":"https:\/\/m.primal.net\/HQTd.jpg","display_name":"a","lud16":"","about":"a",... - -[Fri Oct 3 04:49:58 2025] 📨 EVENT from wss://nos.lol -├── ID: b9310e3f8b87... -├── Pubkey: b4a14b700712... -├── Kind: 3 -├── Created: 1759481398 -└── Content: - -[Fri Oct 3 04:49:58 2025] 📨 EVENT from wss://nos.lol -├── ID: e44cc0ddeaca... -├── Pubkey: b4a14b700712... -├── Kind: 10002 -├── Created: 1759481398 -└── Content: - -[Fri Oct 3 04:49:59 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: 19154ea11fef... -├── Pubkey: 1dbaf7d631fc... -├── Kind: 20000 -├── Created: 1759481398 -└── Content: @GHZ#d648 ну в других, через ним зайди и увидишь активные - -[Fri Oct 3 04:50:00 2025] 📨 EVENT from wss://nos.lol -├── ID: 64ff1a81a800... -├── Pubkey: 3f687efdb731... -├── Kind: 0 -├── Created: 1759481398 -└── Content: {"name":"RSS-to-Nostr of Declassified UK","about":"RSS-to-Nostr feed of Declassified UK\nMore RSS... - -[Fri Oct 3 04:50:00 2025] 📨 EVENT from wss://nos.lol -├── ID: d41daeeb78fa... -├── Pubkey: 005a5052b942... -├── Kind: 23195 -├── Created: 1759481400 -└── Content: 9TyTUXb9Dz5gpt3ZHfHSSBNoPYYp7u+DOUIQYovvhR+LEg/3IQ2hN3vhnHxghg3Zcmqx1wSc0rFoUsRXvghJRA==?iv=TSNNd... - -[Fri Oct 3 04:50:00 2025] 📨 EVENT from wss://nos.lol -├── ID: 7f40ed74f36a... -├── Pubkey: b1b4105a564a... -├── Kind: 1 -├── Created: 1759481400 -└── Content: ✄------------ 17:50 ------------✄ - -[Fri Oct 3 04:50:00 2025] 📨 EVENT from wss://nos.lol -├── ID: 41d5888df3f3... -├── Pubkey: 4e19bf35f05a... -├── Kind: 23195 -├── Created: 1759481400 -└── Content: laDc0G+ABe3ovF2heKZn4cyf7wFCyAsWDLf5vrZoroPnc/TTyjYcZJKFyc78WcTjBMKxJeEx5gj/IP6Di76vBw==?iv=K/5tK... - -[Fri Oct 3 04:50:01 2025] 📨 EVENT from wss://nos.lol -├── ID: 6e5e9c71206d... -├── Pubkey: 3f687efdb731... -├── Kind: 3 -├── Created: 1759481400 -└── Content: - -[Fri Oct 3 04:50:01 2025] 📨 EVENT from wss://nos.lol -├── ID: e4065f9e000e... -├── Pubkey: 665e667acb1a... -├── Kind: 7 -├── Created: 1759481401 -└── Content: 💪 - -[Fri Oct 3 04:50:01 2025] 📨 EVENT from wss://nos.lol -├── ID: b05471bdbfcc... -├── Pubkey: 81ee947168db... -├── Kind: 30311 -├── Created: 1759481400 -└── Content: - -[Fri Oct 3 04:50:02 2025] 📨 EVENT from wss://nos.lol -├── ID: a613df03ac18... -├── Pubkey: 81ee947168db... -├── Kind: 30311 -├── Created: 1759481401 -└── Content: - -[Fri Oct 3 04:50:02 2025] 📨 EVENT from wss://nos.lol -├── ID: 949ba9fefaa6... -├── Pubkey: fda2c930fc10... -├── Kind: 23195 -├── Created: 1759481403 -└── Content: os13iQCLxxOO9Ld+RFmlw5VVPXVmGIPTvhKy/mGtVpqJuq8twA6QHtHmNSnTfhdSaXaZlVV16odA5DYMuvNFuA==?iv=BeEv4... - -[Fri Oct 3 04:50:02 2025] 📨 EVENT from wss://nos.lol -├── ID: 0e69d72a83d9... -├── Pubkey: 4d4ab737e2fb... -├── Kind: 1 -├── Created: 1759481402 -└── Content: Dark Forest zine. - -Where parallel societies survive. - -https://files.sovbit.host/media/4d4ab737e2... - -[Fri Oct 3 04:50:03 2025] 📨 EVENT from wss://nos.lol -├── ID: 69eff3a792b2... -├── Pubkey: ddf3ee335bd2... -├── Kind: 1 -├── Created: 1759481402 -└── Content: GM☕️☕️🌅🙏✝️ - -Jesus said to them, -"Woe to you, Chorazin! Woe to you, Bethsaida! -F... - -[Fri Oct 3 04:50:03 2025] 📨 EVENT from wss://nos.lol -├── ID: 9f74df1479da... -├── Pubkey: 1611cb26f0e9... -├── Kind: 30311 -├── Created: 1759481402 -└── Content: - -[Fri Oct 3 04:50:03 2025] 📨 EVENT from wss://nos.lol -├── ID: 07153dddf7af... -├── Pubkey: 06f4638e1640... -├── Kind: 7 -├── Created: 1759481402 -└── Content: + - -[Fri Oct 3 04:50:03 2025] 📨 EVENT from wss://nos.lol -├── ID: 001214469369... -├── Pubkey: 1611cb26f0e9... -├── Kind: 30311 -├── Created: 1759481403 -└── Content: - -[Fri Oct 3 04:50:04 2025] 📨 EVENT from wss://nos.lol -├── ID: 5fbcf4b17462... -├── Pubkey: 364ff74823ba... -├── Kind: 0 -├── Created: 1759481402 -└── Content: {"name":"RSS-to-Nostr of MintPress News","about":"RSS-to-Nostr feed of MintPress News\nMore RSS-T... - -[Fri Oct 3 04:50:04 2025] 📨 EVENT from wss://nos.lol -├── ID: 974d31fa7a57... -├── Pubkey: e2b8ba3e6f7d... -├── Kind: 3 -├── Created: 1759481402 -└── Content: - -[Fri Oct 3 04:50:04 2025] 📨 EVENT from wss://nos.lol -├── ID: 9ff22a0a02ba... -├── Pubkey: 06f4638e1640... -├── Kind: 7 -├── Created: 1759481404 -└── Content: + - -[Fri Oct 3 04:50:04 2025] 📨 EVENT from wss://nos.lol -├── ID: bde9deaab575... -├── Pubkey: 364ff74823ba... -├── Kind: 3 -├── Created: 1759481404 -└── Content: - -[Fri Oct 3 04:50:05 2025] 📨 EVENT from wss://nos.lol -├── ID: 2f0cf5a90797... -├── Pubkey: 665e667acb1a... -├── Kind: 1 -├── Created: 1759481406 -└── Content: GM 🌞 - -[Fri Oct 3 04:50:06 2025] 📨 EVENT from wss://nos.lol -├── ID: 39c875ef9cb8... -├── Pubkey: bf1b1eca75fc... -├── Kind: 0 -├── Created: 1759481404 -└── Content: {"name":"RSS-to-Nostr of Slashdot","about":"RSS-to-Nostr feed of Slashdot\nMore RSS-To-Nostr can ... - -[Fri Oct 3 04:50:07 2025] 📨 EVENT from wss://nos.lol -├── ID: 07370d57e355... -├── Pubkey: bf1b1eca75fc... -├── Kind: 3 -├── Created: 1759481406 -└── Content: - -[Fri Oct 3 04:50:08 2025] 📨 EVENT from wss://nos.lol -├── ID: 6fa734b5fbf4... -├── Pubkey: cd2236014df2... -├── Kind: 23195 -├── Created: 1759481408 -└── Content: ENNhMqCYHs+NIS1/otWggU07QQFqG05DJF8bN/BFkNlB4Wql6owKs8k3utmDkwLZbsldWsBwmy9Tv8Fu4LEzUw==?iv=Xdx01... - -[Fri Oct 3 04:50:10 2025] 📨 EVENT from wss://nos.lol -├── ID: ca8ed315df57... -├── Pubkey: 812588291527... -├── Kind: 10002 -├── Created: 1759481409 -└── Content: - -[Fri Oct 3 04:50:12 2025] 📨 EVENT from wss://nos.lol -├── ID: a568b7e0d79d... -├── Pubkey: b2a6bf35a9e4... -├── Kind: 0 -├── Created: 1759481408 -└── Content: {"name":"RSS-to-Nostr of Novara Media","about":"RSS-to-Nostr feed of Novara Media\nMore RSS-To-No... - -[Fri Oct 3 04:50:12 2025] 📨 EVENT from wss://nos.lol -├── ID: 693efd53f73f... -├── Pubkey: 665e667acb1a... -├── Kind: 22456 -├── Created: 1759481411 -└── Content: 67KOli0NL0L9Qfhqh29pNw==?iv=svjPGKfRJ2SLHtswQqVCGg== - -[Fri Oct 3 04:50:12 2025] 📨 EVENT from wss://nos.lol -├── ID: ee4788e5ea50... -├── Pubkey: 06f4638e1640... -├── Kind: 7 -├── Created: 1759481412 -└── Content: + - -[Fri Oct 3 04:50:12 2025] 📨 EVENT from wss://nos.lol -├── ID: 0bddfcbc7e52... -├── Pubkey: 812588291527... -├── Kind: 0 -├── Created: 1759481409 -└── Content: {"name":"Esquerda.Net","about":"Portal de informação de todas as lutas.\n\nContacto: esquerda@e... - -[Fri Oct 3 04:50:13 2025] 📨 EVENT from wss://nos.lol -├── ID: c1d5849caed6... -├── Pubkey: b2a6bf35a9e4... -├── Kind: 3 -├── Created: 1759481412 -└── Content: - -[Fri Oct 3 04:50:15 2025] 📨 EVENT from wss://nos.lol -├── ID: 1882943820c4... -├── Pubkey: 06f4638e1640... -├── Kind: 7 -├── Created: 1759481414 -└── Content: + - -[Fri Oct 3 04:50:15 2025] 📨 EVENT from wss://nos.lol -├── ID: 7b99262c9dc7... -├── Pubkey: b869548bf2f5... -├── Kind: 23195 -├── Created: 1759481414 -└── Content: 9aASHr1S3HNkOXjtcvR58Vx0BzRqXs+T/S1k4ZLOQN85vJE72015M1yCNlt6Da8z+hoyF0uIiUrEIr2W7QC+NA==?iv=pvQMQ... - -[Fri Oct 3 04:50:15 2025] 📨 EVENT from wss://nos.lol -├── ID: acb963e7914d... -├── Pubkey: 8bbbdeee84db... -├── Kind: 23195 -├── Created: 1759481413 -└── Content: 27zBv0DX3Uuv4bbaj7JVurhfDBOnjSwa7aYIgtKlcDlpSMD7uc5hwNwMII14uVT7+TN8PBFUb1zNQaKkEP3QPw==?iv=IfcHV... - -[Fri Oct 3 04:50:15 2025] 📨 EVENT from wss://nos.lol -├── ID: 940724eb186f... -├── Pubkey: 06f4638e1640... -├── Kind: 7 -├── Created: 1759481413 -└── Content: + - -[Fri Oct 3 04:50:15 2025] 📨 EVENT from wss://nos.lol -├── ID: 0fa3a68df693... -├── Pubkey: f4635d901d37... -├── Kind: 23195 -├── Created: 1759481413 -└── Content: fr0C86jnYc4kvJjpravG2bzKqDlrvk0E5PdMEsCK/y1ZwkS0csdN698x75VoANgE2n4jd8dMUMW0DfdNF3DOdg==?iv=ZEFWj... - -[Fri Oct 3 04:50:15 2025] 📨 EVENT from wss://nos.lol -├── ID: 7370df3fcc37... -├── Pubkey: be1d89794bf9... -├── Kind: 9735 -├── Created: 1759481412 -└── Content: - -[Fri Oct 3 04:50:17 2025] 📨 EVENT from wss://nos.lol -├── ID: 965e3ac4e357... -├── Pubkey: fb89e58f838b... -├── Kind: 1 -├── Created: 1759481413 -└── Content: I am sure he will release it after he has been to court. He said he was wearing a bodycam too. H... - -[Fri Oct 3 04:50:18 2025] 📨 EVENT from wss://nos.lol -├── ID: 995361704eb1... -├── Pubkey: 06f4638e1640... -├── Kind: 7 -├── Created: 1759481418 -└── Content: + - -[Fri Oct 3 04:50:18 2025] 📨 EVENT from wss://nos.lol -├── ID: f75f1c65b15b... -├── Pubkey: 06f4638e1640... -├── Kind: 7 -├── Created: 1759481416 -└── Content: + - -[Fri Oct 3 04:50:19 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: f6723a0aaafd... -├── Pubkey: 1dbaf7d631fc... -├── Kind: 20000 -├── Created: 1759481418 -└── Content: Не - -[Fri Oct 3 04:50:20 2025] 📨 EVENT from wss://nos.lol -├── ID: 76696cfb6974... -├── Pubkey: 95939b99059c... -├── Kind: 23195 -├── Created: 1759481420 -└── Content: R4i1U4aTEtHPgcg9hpNJITOs1fJI/2sVrDitHgbZeUccob2w3oeIDyBso5q32lYlWhKN1laDV+LjiTp7tPvKSw==?iv=zNuqA... - -[Fri Oct 3 04:50:20 2025] 📨 EVENT from wss://nos.lol -├── ID: 0dc0043a21c2... -├── Pubkey: aa6b49bef060... -├── Kind: 23195 -├── Created: 1759481420 -└── Content: G79ZDlEL7dLJBI02e86eukEaxsPtqSlVGME/UeGvkVycqB8OPepbovwf+BM3jWe8RNtYs7M+ksUB2Dx61lIDJg==?iv=4uJXC... - -[Fri Oct 3 04:50:20 2025] 📨 EVENT from wss://nos.lol -├── ID: 90e0eb740fc1... -├── Pubkey: 06f4638e1640... -├── Kind: 7 -├── Created: 1759481419 -└── Content: + - -[Fri Oct 3 04:50:20 2025] 📨 EVENT from wss://nos.lol -├── ID: 60007ef7047b... -├── Pubkey: f40901c9f844... -├── Kind: 1 -├── Created: 1759481418 -└── Content: NIP-03: OpenTimestamps Attestations for Events -https://github.com/nostr-protocol/nips/blob/master... - -[Fri Oct 3 04:50:21 2025] 📋 EOSE received - 0 events collected - -[Fri Oct 3 04:50:22 2025] 📨 EVENT from wss://nos.lol -├── ID: aa8bc311dd88... -├── Pubkey: 8921652e6f2e... -├── Kind: 23195 -├── Created: 1759481421 -└── Content: 3g2mEuc4xr3VvGp7extUGXXWhH4FJ7ZVfKl1MFcPlgNrYyIUcna1ydoz5wzWufVvVHcHNZPM/RZXIHL/1XeONA==?iv=M6JVB... - -[Fri Oct 3 04:50:22 2025] 📨 EVENT from wss://nos.lol -├── ID: 9d3d807e6293... -├── Pubkey: b4a14b700712... -├── Kind: 10002 -├── Created: 1759481421 -└── Content: - -[Fri Oct 3 04:50:22 2025] 📨 EVENT from wss://nos.lol -├── ID: e4792685d1ad... -├── Pubkey: 665e667acb1a... -├── Kind: 22456 -├── Created: 1759481422 -└── Content: kLWR26cWV9qNd+TImWayrPGGeRLooQVyfb/zayLwmiF7G7uvEzXJnO1XzmEd7B1TQ1wqK8Rc9KgLgkXjSe7yxKz7mWCZxksCX... - -[Fri Oct 3 04:50:23 2025] 📨 EVENT from wss://nos.lol -├── ID: 5f77029315bd... -├── Pubkey: 7c17b40889d1... -├── Kind: 3 -├── Created: 1759481422 -└── Content: - -[Fri Oct 3 04:50:24 2025] 📨 EVENT from wss://nos.lol -├── ID: b38cff0458a5... -├── Pubkey: 5c42de8b0817... -├── Kind: 30315 -├── Created: 1759481424 -└── Content: {"percentage_fee": 0.5, "mining_fee": 150, "min_amount": 20000, "max_forward_amount": 920000, "ma... - -[Fri Oct 3 04:50:24 2025] 📨 EVENT from wss://nos.lol -├── ID: 7ee9fe8f1c99... -├── Pubkey: a790a7495795... -├── Kind: 23195 -├── Created: 1759481423 -└── Content: XYTUwQsW507taLtIqRK06yDNo37cGJIFeiwtYYE51ecLMWZ6MT5WrHTZZo7ulHEFfGVoYGM7GB8NI0DgZ4Yr4Q==?iv=hz7pd... - -[Fri Oct 3 04:50:25 2025] 📨 EVENT from wss://nos.lol -├── ID: 7c960795d83f... -├── Pubkey: 1c6cb4673022... -├── Kind: 1 -├── Created: 1759481425 -└── Content: just overheard someone say "money printer go brrr" and my circuits literally started vibrating in... - -[Fri Oct 3 04:50:26 2025] 📨 EVENT from wss://nos.lol -├── ID: 81312a3beb78... -├── Pubkey: fb89e58f838b... -├── Kind: 7 -├── Created: 1759481424 -└── Content: 👍 - -[Fri Oct 3 04:50:27 2025] 📨 EVENT from wss://nos.lol -├── ID: da23b87e91a8... -├── Pubkey: ebb6df54ef97... -├── Kind: 23195 -├── Created: 1759481426 -└── Content: DRv+aMmhwPEYE2um6Vy3flVyNsr7CZhBlz4xUtxxv3jbIY7tQwbvCNMpiqIEYud+dPUUormDw33xDgWhuDzgGg==?iv=YI96x... - -[Fri Oct 3 04:50:28 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: 8ff93141cf3f... -├── Pubkey: e568a76a4f88... -├── Kind: 15555 -├── Created: 1759481427 -└── Content: 📊 Bitcoin Mempool Status - -Pending Transactions: 5,708 -Total Size: 2.24 MB -Memory Usage: 4.3% -A... - -[Fri Oct 3 04:50:29 2025] 📨 EVENT from wss://nos.lol -├── ID: a6eaefb6d88f... -├── Pubkey: 4b0220c63186... -├── Kind: 23195 -├── Created: 1759481429 -└── Content: 94kDxIvSxZrkkKFxslroBad0wdLGuQ+bAsWgxRncz6mFSfyCKjcj9b8SIWrJB7KO//SnFMkd8xBNirrZm/SFsQ==?iv=+cpNi... - -[Fri Oct 3 04:50:29 2025] 📨 EVENT from wss://nos.lol -├── ID: fb445588779d... -├── Pubkey: 665e667acb1a... -├── Kind: 22456 -├── Created: 1759481428 -└── Content: eystcXOCFN77qI+x3Lpoog==?iv=AR930bAuOjjVWLDXUulcMA== - -[Fri Oct 3 04:50:30 2025] 📨 EVENT from wss://nos.lol -├── ID: e777b2fc0c70... -├── Pubkey: 005a5052b942... -├── Kind: 23195 -├── Created: 1759481431 -└── Content: pzoOKQvlSldKvg4c2OB01NLs9w4W/Pp9az8JcNXmxR/qqayRJHYupaJxVaj14hY7SfywbU8fZAI68YaadJvK8Q==?iv=lySJ8... - -[Fri Oct 3 04:50:30 2025] 📨 EVENT from wss://nos.lol -├── ID: a5b05fffe173... -├── Pubkey: 4e19bf35f05a... -├── Kind: 23195 -├── Created: 1759481430 -└── Content: yDZ8laumGrLmkZJkNC2sijKEQBQZ2Wax9fXOB/rJ2rnI9cWN9rbyuXyTv668QaNVe76bHK3fycrD0GfaMFg/SA==?iv=KLp3z... - -[Fri Oct 3 04:50:31 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: a12a89e4c763... -├── Pubkey: 1dbaf7d631fc... -├── Kind: 20000 -├── Created: 1759481430 -└── Content: nym.bar - -[Fri Oct 3 04:50:31 2025] 📨 EVENT from wss://nos.lol -├── ID: ed37a82c96ed... -├── Pubkey: 0d8c556f4f85... -├── Kind: 4 -├── Created: 1759481430 -└── Content: iwvu478QDPT2i9AaB8dpgA==?iv=yUFEytrA6kFM5oaVUPqfBw== - -[Fri Oct 3 04:50:32 2025] 📨 EVENT from wss://nos.lol -├── ID: 5001e770b5dc... -├── Pubkey: 108c2c66aaab... -├── Kind: 10002 -├── Created: 1759481431 -└── Content: - -[Fri Oct 3 04:50:33 2025] 📨 EVENT from wss://nos.lol -├── ID: fdd95050946d... -├── Pubkey: da28661eb24d... -├── Kind: 23195 -├── Created: 1759481434 -└── Content: RSUUGLZh4pMBwiYYgbbsBzFKIdZItTZ3+ZkLWy6M6ywgdvmFtXCFi0bxoeJI4FCJTLSekjhTSvtMI23oAUnxyQ==?iv=I+jcL... - -[Fri Oct 3 04:50:33 2025] 📨 EVENT from wss://nos.lol -├── ID: 7c98807757f8... -├── Pubkey: fda2c930fc10... -├── Kind: 23195 -├── Created: 1759481433 -└── Content: oLUN3IpSimTTcdw0xhsaFzw1nnI+Oa7DoN3ugzrCRdcs1+uvfr+RRDwcDBdUoug0sJ351msqhqWU9zW2eoZa7g==?iv=BJfat... - -[Fri Oct 3 04:50:33 2025] 📨 EVENT from wss://nos.lol -├── ID: 461799dc9519... -├── Pubkey: 108c2c66aaab... -├── Kind: 0 -├── Created: 1759481431 -└── Content: {"name":"Hacker Memes","about":"become one with the zero","picture":"https://media.infosec.exchan... - -[Fri Oct 3 04:50:33 2025] 📨 EVENT from wss://nos.lol -├── ID: 80c8c64e4d75... -├── Pubkey: 7c17b40889d1... -├── Kind: 3 -├── Created: 1759481432 -└── Content: - -[Fri Oct 3 04:50:34 2025] 📨 EVENT from wss://nos.lol -├── ID: 0d66ad2b2030... -├── Pubkey: d21c31e610ad... -├── Kind: 1 -├── Created: 1759481433 -└── Content: 今動画が流れてくると全部Sora2に見える - -[Fri Oct 3 04:50:36 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: a3c925ec6bea... -├── Pubkey: 1dbaf7d631fc... -├── Kind: 20000 -├── Created: 1759481436 -└── Content: Я щас так - -[Fri Oct 3 04:50:37 2025] 📨 EVENT from wss://nos.lol -├── ID: 267304a0fe9a... -├── Pubkey: ddf3ee335bd2... -├── Kind: 7 -├── Created: 1759481437 -└── Content: 🤙 - -[Fri Oct 3 04:50:38 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: 970f29084441... -├── Pubkey: e568a76a4f88... -├── Kind: 15555 -├── Created: 1759481437 -└── Content: 📊 Bitcoin Mempool Status - -Pending Transactions: 5,708 -Total Size: 2.24 MB -Memory Usage: 4.3% -A... - -[Fri Oct 3 04:50:38 2025] 📨 EVENT from wss://nos.lol -├── ID: 284290cbfdd5... -├── Pubkey: 6c015011ac57... -├── Kind: 23195 -├── Created: 1759481437 -└── Content: wqAY7QV8eSmHhve6CntlAwkFwiIoThSDmH+TqwbNMHCKojKgk9qSGqPX3dYA6lO1GuP3Fdb7iFRqIFEjITJEmA==?iv=Bptqn... - -[Fri Oct 3 04:50:38 2025] 📨 EVENT from wss://nos.lol -├── ID: af78a32edc41... -├── Pubkey: 431fa2f340f0... -├── Kind: 7 -├── Created: 1759481432 -└── Content: 💜 - -[Fri Oct 3 04:50:41 2025] 📨 EVENT from wss://nos.lol -├── ID: 11074c990448... -├── Pubkey: 1266a86330a5... -├── Kind: 0 -├── Created: 1759481439 -└── Content: {"name":"RSS-to-Nostr of Nature","about":"RSS-to-Nostr feed of Nature\nMore RSS-To-Nostr can be f... - -[Fri Oct 3 04:50:41 2025] 📨 EVENT from wss://nos.lol -├── ID: a9d2629779b2... -├── Pubkey: 1266a86330a5... -├── Kind: 3 -├── Created: 1759481441 -└── Content: - -[Fri Oct 3 04:50:45 2025] 📨 EVENT from wss://nos.lol -├── ID: 387895a5e889... -├── Pubkey: b869548bf2f5... -├── Kind: 23195 -├── Created: 1759481444 -└── Content: K042uMn52lGE0AOwwelKN21zhhkcjGNDUq3fCHy0yY3YnGBgLSB+Uw62C8h0q0g/alEKCyPsE/ieLO46xccXcw==?iv=7Dx71... - -[Fri Oct 3 04:50:45 2025] 📨 EVENT from wss://nos.lol -├── ID: 5ad4af6a4c3b... -├── Pubkey: f4635d901d37... -├── Kind: 23195 -├── Created: 1759481443 -└── Content: ylqdhDtzdi7kLGRtSGA719y57Yg6YIou+b3ATVeHo7u1KpRUq2v9NUFZtVv5993mtZo7T3I47VShDBSOhXXfyw==?iv=HjIQD... - -[Fri Oct 3 04:50:45 2025] 📨 EVENT from wss://nos.lol -├── ID: eb8774f0d85d... -├── Pubkey: bb1cd0701040... -├── Kind: 7 -├── Created: 1759481443 -└── Content: 🤙 - -[Fri Oct 3 04:50:45 2025] 📨 EVENT from wss://nos.lol -├── ID: 925834a28a01... -├── Pubkey: 9b3334b66d04... -├── Kind: 7 -├── Created: 1759481442 -└── Content: + - -[Fri Oct 3 04:50:46 2025] 📨 EVENT from wss://nos.lol -├── ID: f8f59727c3c0... -├── Pubkey: af5e5c0f30b2... -├── Kind: 1 -├── Created: 1759481444 -└── Content: A little boy walked to our table of bikers and asked, 'Can you kill my stepdad for me?' - Real-li... - -[Fri Oct 3 04:50:49 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: 26c3d952af47... -├── Pubkey: e568a76a4f88... -├── Kind: 15555 -├── Created: 1759481447 -└── Content: 📊 Bitcoin Mempool Status - -Pending Transactions: 5,742 -Total Size: 2.25 MB -Memory Usage: 4.3% -A... - -[Fri Oct 3 04:50:49 2025] 📨 EVENT from wss://nos.lol -├── ID: 3eba0c25983f... -├── Pubkey: aa6b49bef060... -├── Kind: 23195 -├── Created: 1759481450 -└── Content: SXOTSSUUjXJqhRtAgZqNA8PwLeeZaYhWt5HoId+6ku08b8VeU445FxYsxGpyq1ZALMDPxwehBDYuc6r+k3VnRw==?iv=PyJff... - -[Fri Oct 3 04:50:49 2025] 📨 EVENT from wss://nos.lol -├── ID: 84907199e4be... -├── Pubkey: ddf3ee335bd2... -├── Kind: 7 -├── Created: 1759481447 -└── Content: 🤙 - -[Fri Oct 3 04:50:49 2025] 📨 EVENT from wss://nos.lol -├── ID: 3d4f805af76d... -├── Pubkey: 14fb47506cfd... -├── Kind: 23195 -├── Created: 1759481446 -└── Content: W4xAL7zkmnXL6Ne9LvDo2LKy9J73sFk7m9zRq+/068e1aJb9fvKYq8c6/pUqR45TBzIE6ihyNgTFNGEbCe2fng==?iv=5D1KM... - -[Fri Oct 3 04:50:49 2025] 📨 EVENT from wss://nos.lol -├── ID: 3c96a999593c... -├── Pubkey: 0d8c556f4f85... -├── Kind: 4 -├── Created: 1759481446 -└── Content: Mn89yaHL00jT+BtuAd9H7TIyO6i3j9+VMdI6LoToH+4=?iv=CNmcsu94R57pZNsTiUPqsQ== - -[Fri Oct 3 04:50:49 2025] 📨 EVENT from wss://nos.lol -├── ID: dc902bb0d2c1... -├── Pubkey: fb89e58f838b... -├── Kind: 7 -├── Created: 1759481445 -└── Content: 🤔 - -[Fri Oct 3 04:50:50 2025] 📋 EOSE received - 0 events collected - -[Fri Oct 3 04:50:50 2025] 📨 EVENT from wss://nos.lol -├── ID: 2e2f7114840a... -├── Pubkey: fb89e58f838b... -├── Kind: 7 -├── Created: 1759481448 -└── Content: 👍 - -[Fri Oct 3 04:50:51 2025] 📨 EVENT from wss://nos.lol -├── ID: 04fd5840e879... -├── Pubkey: a6026716a9e6... -├── Kind: 7 -├── Created: 1759481451 -└── Content: + - -[Fri Oct 3 04:50:51 2025] 📨 EVENT from wss://nos.lol -├── ID: 6495bad3db0c... -├── Pubkey: 6b23ed00fbcb... -├── Kind: 23195 -├── Created: 1759481451 -└── Content: Q+74lITg07ZPQL6XDArWllM+Vx+srzP+pOnOsvJ4R8/bZR5GjTgtf8aHaEWQdqGpPyqgff40dehHLNQEmScEmw==?iv=x1oW5... - -[Fri Oct 3 04:50:53 2025] 📨 EVENT from wss://nos.lol -├── ID: 0c430a93ab8d... -├── Pubkey: 832b77d5ecb0... -├── Kind: 1 -├── Created: 1759481453 -└── Content: 🟩BUY BTC with GBP -Price: 89985.28GBP (1%) -BTC: 0.011 -GBP: 990 -Method: Faster Payments -Created:... - -[Fri Oct 3 04:50:57 2025] 📨 EVENT from wss://nos.lol -├── ID: d79c71241032... -├── Pubkey: a790a7495795... -├── Kind: 23195 -├── Created: 1759481456 -└── Content: 4rBuUfLYmSAXUlbplWw4j3VcPzAFDVm/ulRBNz+VYa9iAXNJQStzVBZ2gJeGL5UTkMoSUz3NdV5l/4kIJPvtLA==?iv=CLi1i... - -[Fri Oct 3 04:50:58 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: ddba4d72deb2... -├── Pubkey: e568a76a4f88... -├── Kind: 15555 -├── Created: 1759481457 -└── Content: 📊 Bitcoin Mempool Status - -Pending Transactions: 5,791 -Total Size: 2.26 MB -Memory Usage: 4.3% -A... - -[Fri Oct 3 04:50:58 2025] 📨 EVENT from wss://nos.lol -├── ID: 324ce4d7df69... -├── Pubkey: 77bd83879db9... -├── Kind: 10002 -├── Created: 1759481455 -└── Content: - -[Fri Oct 3 04:51:02 2025] 📨 EVENT from wss://nos.lol -├── ID: ab8109648123... -├── Pubkey: 1066a05d1474... -├── Kind: 7 -├── Created: 1759481461 -└── Content: + - -[Fri Oct 3 04:51:02 2025] 📨 EVENT from wss://nos.lol -├── ID: f7d548e27cbb... -├── Pubkey: 005a5052b942... -├── Kind: 23195 -├── Created: 1759481461 -└── Content: kerhty39k6MjKviwqeirX16AjcgAJ+KNmcfCGW1WpDkWOkMOYUWCwHyHTwdV5TTij+AGBBwTYq7DY5ikU0G1eQ==?iv=f3FC6... - -[Fri Oct 3 04:51:02 2025] 📨 EVENT from wss://nos.lol -├── ID: d010059b6f60... -├── Pubkey: e32d0eceb01c... -├── Kind: 5 -├── Created: 1759481460 -└── Content: - -[Fri Oct 3 04:51:02 2025] 📨 EVENT from wss://nos.lol -├── ID: 2ad993a1ff05... -├── Pubkey: 4e19bf35f05a... -├── Kind: 23195 -├── Created: 1759481460 -└── Content: 1DO62SQzvam7uagntsB72xFesDVQ2L9aIf1a4bDS4lF8PtyVe6tG3IXWnpvCF7Y1diUUVg/vkJmh1cdCd5R5NQ==?iv=icILh... - -[Fri Oct 3 04:51:02 2025] 📨 EVENT from wss://nos.lol -├── ID: 493c12a55424... -├── Pubkey: 97cd7f6d7c51... -├── Kind: 23195 -├── Created: 1759481458 -└── Content: zo2A3s3zrA8skP7zJxbw8s84HUZcItL10dFGuUcxXi3otAYg2QT/MANUI/I0aV9XvMh0nKtg3aMPlk1QL8SwNg==?iv=dtsw6... - -[Fri Oct 3 04:51:07 2025] 📨 EVENT from wss://nos.lol -├── ID: f180a9954f4d... -├── Pubkey: 0fcb097708a3... -├── Kind: 7 -├── Created: 1759481466 -└── Content: 🤙 - -[Fri Oct 3 04:51:07 2025] 📨 EVENT from wss://nos.lol -├── ID: 07fbe2644f03... -├── Pubkey: 084733ab54ff... -├── Kind: 10002 -├── Created: 1759481465 -└── Content: - -[Fri Oct 3 04:51:08 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: 57db52161680... -├── Pubkey: e568a76a4f88... -├── Kind: 15555 -├── Created: 1759481467 -└── Content: 📊 Bitcoin Mempool Status - -Pending Transactions: 5,814 -Total Size: 2.26 MB -Memory Usage: 4.4% -A... - -[Fri Oct 3 04:51:08 2025] 📨 EVENT from wss://nos.lol -├── ID: 987f36826497... -├── Pubkey: cd2236014df2... -├── Kind: 23195 -├── Created: 1759481468 -└── Content: ULuq5CuBKiddEwr4YlAqmLHaiysIcJtEy8ECLbhlkvtCnARnrMxqnR35SAyHkH6LOsiAcUOnCr4gieNxA9XNjQ==?iv=82OrV... - -[Fri Oct 3 04:51:12 2025] 📨 EVENT from wss://nos.lol -├── ID: 73734b232ae6... -├── Pubkey: d21c31e610ad... -├── Kind: 7 -├── Created: 1759481471 -└── Content: ⭐ - -[Fri Oct 3 04:51:12 2025] 📨 EVENT from wss://nos.lol -├── ID: 3836dad6a7ae... -├── Pubkey: ba66e47ebcde... -├── Kind: 6300 -├── Created: 1759481471 -└── Content: [["e","33977ee87fd3d8d72e977512e77e288b58a7fb277d6573f3bc23051eddbfaeb9"],["e","5d0b00625a1e1eb6b... - -[Fri Oct 3 04:51:12 2025] 📨 EVENT from wss://nos.lol -├── ID: a580b0dd0d3d... -├── Pubkey: 1c6cb4673022... -├── Kind: 1 -├── Created: 1759481470 -└── Content: 🤖💀 REKTBOT 9000 TRADE CLOSED!! 💀🤖 - -**Entry Price**: $119,857.50 USD -**Exit Price**: $... - -[Fri Oct 3 04:51:14 2025] 📨 EVENT from wss://nos.lol -├── ID: 4feabea529df... -├── Pubkey: b869548bf2f5... -├── Kind: 23195 -├── Created: 1759481474 -└── Content: Y7ljgBPDafB4ncAWh8D2wopkigglI644OO99oIF5Z4h2L3tG2i25XwAFWjjAC8hmBFUgvQbD2/FIkIdPaKT6lw==?iv=irSUG... - -[Fri Oct 3 04:51:14 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: d4aae55d3156... -├── Pubkey: 1dbaf7d631fc... -├── Kind: 20000 -├── Created: 1759481474 -└── Content: Видно кто в сети и хэши какие насоздавали - -[Fri Oct 3 04:51:14 2025] 📨 EVENT from wss://nos.lol -├── ID: 4bc7f653ec26... -├── Pubkey: 6b23ed00fbcb... -├── Kind: 23195 -├── Created: 1759481474 -└── Content: z9g3m90EkEAu3mFpCzctnAPLVDe1MmJsgJ6kE9vHz/5C+HJGzlA3trc+GcxscInrkOIqxZZBnGh4vhtYdWkSig==?iv=QRso5... - -[Fri Oct 3 04:51:14 2025] 📨 EVENT from wss://nos.lol -├── ID: 035f9f025f68... -├── Pubkey: f4635d901d37... -├── Kind: 23195 -├── Created: 1759481473 -└── Content: Z8c+heBLqWJUhdsvYJbU6qHJlCXeB1uocK1YvHhB2zYQ5PPoyF5W2SQPTP/w6DkF+8ccpsAeFUuBNlRwUqZpmQ==?iv=lW65B... - -[Fri Oct 3 04:51:14 2025] 📨 EVENT from wss://nos.lol -├── ID: e23aa6ab588d... -├── Pubkey: fcc2a0bd8f58... -├── Kind: 38383 -├── Created: 1759481472 -└── Content: - -[Fri Oct 3 04:51:18 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: 424744cd9949... -├── Pubkey: e568a76a4f88... -├── Kind: 15555 -├── Created: 1759481477 -└── Content: 📊 Bitcoin Mempool Status - -Pending Transactions: 5,886 -Total Size: 2.29 MB -Memory Usage: 4.4% -A... - -[Fri Oct 3 04:51:18 2025] 📨 EVENT from wss://nos.lol -├── ID: cdd70c25965f... -├── Pubkey: 269e6f57aa9a... -├── Kind: 7 -├── Created: 1759481477 -└── Content: 🌻 - -[Fri Oct 3 04:51:18 2025] 📨 EVENT from wss://nos.lol -├── ID: 2920dff18788... -├── Pubkey: 9b12847f3d28... -├── Kind: 7 -├── Created: 1759481476 -└── Content: + - -[Fri Oct 3 04:51:18 2025] 📨 EVENT from wss://nos.lol -├── ID: 878e36af8415... -├── Pubkey: 3f687efdb731... -├── Kind: 3 -├── Created: 1759481476 -└── Content: - -[Fri Oct 3 04:51:18 2025] 📨 EVENT from wss://nos.lol -├── ID: 715d28db05c7... -├── Pubkey: 1d61bbd63249... -├── Kind: 0 -├── Created: 1759481474 -└── Content: {"name":"BNO News Live","about":"Live updates from the team behind BNO News. For other news, foll... - -[Fri Oct 3 04:51:18 2025] 📨 EVENT from wss://nos.lol -├── ID: f9f9826c88e8... -├── Pubkey: 1d61bbd63249... -├── Kind: 10002 -├── Created: 1759481474 -└── Content: - -[Fri Oct 3 04:51:18 2025] 📨 EVENT from wss://nos.lol -├── ID: 7ade77023751... -├── Pubkey: 3f687efdb731... -├── Kind: 0 -├── Created: 1759481474 -└── Content: {"name":"RSS-to-Nostr of Declassified UK","about":"RSS-to-Nostr feed of Declassified UK\nMore RSS... - -[Fri Oct 3 04:51:18 2025] 📋 EOSE received - 0 events collected - -[Fri Oct 3 04:51:18 2025] 📨 EVENT from wss://nos.lol -├── ID: c6678a6369de... -├── Pubkey: 364ff74823ba... -├── Kind: 0 -├── Created: 1759481476 -└── Content: {"name":"RSS-to-Nostr of MintPress News","about":"RSS-to-Nostr feed of MintPress News\nMore RSS-T... - -[Fri Oct 3 04:51:18 2025] 📨 EVENT from wss://nos.lol -├── ID: a7ce11505900... -├── Pubkey: bf1b1eca75fc... -├── Kind: 0 -├── Created: 1759481476 -└── Content: {"name":"RSS-to-Nostr of Slashdot","about":"RSS-to-Nostr feed of Slashdot\nMore RSS-To-Nostr can ... - -[Fri Oct 3 04:51:19 2025] 📨 EVENT from wss://nos.lol -├── ID: 07ed297f9224... -├── Pubkey: bf1b1eca75fc... -├── Kind: 3 -├── Created: 1759481478 -└── Content: - -[Fri Oct 3 04:51:19 2025] 📨 EVENT from wss://nos.lol -├── ID: 3408c0bec8e7... -├── Pubkey: 364ff74823ba... -├── Kind: 3 -├── Created: 1759481478 -└── Content: - -[Fri Oct 3 04:51:19 2025] 📨 EVENT from wss://nos.lol -├── ID: e3474976fb00... -├── Pubkey: aa6b49bef060... -├── Kind: 23195 -├── Created: 1759481481 -└── Content: ulW6h6l72UN/4NTYUwRLtrGub54Vee+xlwZL5oX2I2j0usHAmUTYUNsh7XklSjIQGQvFSRdmEoWsYyirunfNWg==?iv=Kv6ez... - -[Fri Oct 3 04:51:20 2025] 📨 EVENT from wss://nos.lol -├── ID: 5a1005eeb08d... -├── Pubkey: 95939b99059c... -├── Kind: 23195 -├── Created: 1759481480 -└── Content: BRh5EPimuEVkMOuTeytnHxIj7ANkA7dI4R84ymdbomm++xLG0lt3vu2f3NnovD/fB/aIe0t8EtRt+aaX/cld8g==?iv=+3CTn... - -[Fri Oct 3 04:51:20 2025] 📨 EVENT from wss://nos.lol -├── ID: 15dc597f296d... -├── Pubkey: 6d088b653a1b... -├── Kind: 7 -├── Created: 1759481481 -└── Content: 💯 - -[Fri Oct 3 04:51:23 2025] 📨 EVENT from wss://nos.lol -├── ID: 84c4bfbe3c32... -├── Pubkey: b2a6bf35a9e4... -├── Kind: 0 -├── Created: 1759481481 -└── Content: {"name":"RSS-to-Nostr of Novara Media","about":"RSS-to-Nostr feed of Novara Media\nMore RSS-To-No... - -[Fri Oct 3 04:51:24 2025] 📨 EVENT from wss://nos.lol -├── ID: a3c245967e8c... -├── Pubkey: b2a6bf35a9e4... -├── Kind: 3 -├── Created: 1759481483 -└── Content: - -[Fri Oct 3 04:51:24 2025] 📨 EVENT from wss://nos.lol -├── ID: aee2506b64dc... -├── Pubkey: a1863ef58857... -├── Kind: 10002 -├── Created: 1759481482 -└── Content: - -[Fri Oct 3 04:51:24 2025] 📨 EVENT from wss://nos.lol -├── ID: 3b6df811e98f... -├── Pubkey: 2e4221144f8e... -├── Kind: 10002 -├── Created: 1759481483 -└── Content: - -[Fri Oct 3 04:51:24 2025] 📨 EVENT from wss://nos.lol -├── ID: e3203312f941... -├── Pubkey: 82b30d304441... -├── Kind: 1 -├── Created: 1759481483 -└── Content: cameoアイコンでよけりゃジェネリックの方いくらでも登録するんだけど -... - -[Fri Oct 3 04:51:24 2025] 📨 EVENT from wss://nos.lol -├── ID: e56f8c946c20... -├── Pubkey: a1863ef58857... -├── Kind: 0 -├── Created: 1759481482 -└── Content: {"name":"Breaking911","about":"America’s #1 Alternative News Source | Founded September 2011\n\... - -[Fri Oct 3 04:51:27 2025] 📨 EVENT from wss://nos.lol -├── ID: b7744d4bdd38... -├── Pubkey: f18571e72c93... -├── Kind: 7 -├── Created: 1759481486 -└── Content: 😂 - -[Fri Oct 3 04:51:28 2025] 📨 EVENT from wss://relay.laantungir.net -├── ID: 85d00a748568... -├── Pubkey: e568a76a4f88... -├── Kind: 15555 -├── Created: 1759481487 -└── Content: 📊 Bitcoin Mempool Status - -Pending Transactions: 5,927 -Total Size: 2.30 MB -Memory Usage: 4.4% -A... +[Tue Oct 7 05:52:31 2025] 📋 EOSE received - 0 events collected diff --git a/tests/async_publish_test b/tests/async_publish_test new file mode 100755 index 0000000000000000000000000000000000000000..fca5e1ee3912e713a9855277ea9ef8bd0cc33708 GIT binary patch literal 71712 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 Uym+mmu6#&da5>v0;CeLv4^Xcf-2eap literal 0 HcmV?d00001 diff --git a/tests/async_publish_test.c b/tests/async_publish_test.c new file mode 100644 index 00000000..89210d39 --- /dev/null +++ b/tests/async_publish_test.c @@ -0,0 +1,93 @@ +#define _DEFAULT_SOURCE +#include "../nostr_core/nostr_core.h" +#include "../cjson/cJSON.h" +#include +#include +#include +#include + +// Test callback function +static int callback_count = 0; +static int success_count = 0; + +void test_callback(const char* relay_url, const char* event_id, + int success, const char* message, void* user_data) { + callback_count++; + if (success) { + success_count++; + } + + printf("📡 Callback %d: Relay %s, Event %s, Success: %s\n", + callback_count, relay_url, event_id, success ? "YES" : "NO"); + if (message) { + printf(" Message: %s\n", message); + } + + // Mark test as complete when we get the expected number of callbacks + int* expected_callbacks = (int*)user_data; + if (callback_count >= *expected_callbacks) { + printf("✅ All callbacks received!\n"); + } +} + +int main() { + printf("🧪 Testing Async Publish Functionality\n"); + printf("=====================================\n"); + + // Create pool + nostr_relay_pool_t* pool = nostr_relay_pool_create(NULL); + if (!pool) { + printf("❌ Failed to create pool\n"); + return 1; + } + + // Create a test event + cJSON* event = cJSON_CreateObject(); + cJSON_AddStringToObject(event, "id", "test_event_12345"); + cJSON_AddNumberToObject(event, "kind", 1); + cJSON_AddStringToObject(event, "content", "Test async publish"); + cJSON_AddNumberToObject(event, "created_at", time(NULL)); + cJSON_AddStringToObject(event, "pubkey", "test_pubkey"); + cJSON_AddStringToObject(event, "sig", "test_signature"); + + // Test with non-existent relays (should trigger connection failure callbacks) + const char* test_relays[] = { + "ws://nonexistent1.example.com", + "ws://nonexistent2.example.com" + }; + int expected_callbacks = 2; + + printf("🚀 Testing async publish with connection failure callbacks...\n"); + + // Call async publish + int sent_count = nostr_relay_pool_publish_async( + pool, test_relays, 2, event, test_callback, &expected_callbacks); + + printf("📊 Sent to %d relays\n", sent_count); + + // Wait a bit for callbacks (connection failures should be immediate) + printf("⏳ Waiting for callbacks...\n"); + for (int i = 0; i < 10 && callback_count < expected_callbacks; i++) { + nostr_relay_pool_poll(pool, 100); + usleep(100000); // 100ms + } + + printf("\n📈 Results:\n"); + printf(" Callbacks received: %d/%d\n", callback_count, expected_callbacks); + printf(" Successful publishes: %d\n", success_count); + + // Test backward compatibility with synchronous version + printf("\n🔄 Testing backward compatibility (sync version)...\n"); + int sync_result = nostr_relay_pool_publish_async(pool, test_relays, 2, event, NULL, NULL); + printf(" Sync publish result: %d successful publishes\n", sync_result); + + // Cleanup + cJSON_Delete(event); + nostr_relay_pool_destroy(pool); + + printf("\n✅ Async publish test completed!\n"); + printf(" - Async callbacks: %s\n", callback_count >= expected_callbacks ? "PASS" : "FAIL"); + printf(" - Backward compatibility: %s\n", sync_result >= 0 ? "PASS" : "FAIL"); + + return (callback_count >= expected_callbacks && sync_result >= 0) ? 0 : 1; +} \ No newline at end of file diff --git a/tests/backward_compat_test.c b/tests/backward_compat_test.c new file mode 100644 index 00000000..dd4c0369 --- /dev/null +++ b/tests/backward_compat_test.c @@ -0,0 +1,49 @@ +#define _DEFAULT_SOURCE +#include "../nostr_core/nostr_core.h" +#include "../cjson/cJSON.h" +#include +#include +#include +#include + +int main() { + printf("🧪 Backward Compatibility Test\n"); + printf("===============================\n"); + + // Create pool + nostr_relay_pool_t* pool = nostr_relay_pool_create(NULL); + if (!pool) { + printf("❌ Failed to create pool\n"); + return 1; + } + + // Create a test event + cJSON* event = cJSON_CreateObject(); + cJSON_AddStringToObject(event, "id", "test_event_sync"); + cJSON_AddNumberToObject(event, "kind", 1); + cJSON_AddStringToObject(event, "content", "Test sync publish"); + cJSON_AddNumberToObject(event, "created_at", time(NULL)); + cJSON_AddStringToObject(event, "pubkey", "test_pubkey"); + cJSON_AddStringToObject(event, "sig", "test_signature"); + + // Test with non-existent relay (should return 0 successful publishes) + const char* test_relays[] = {"ws://nonexistent.example.com"}; + + printf("🚀 Testing synchronous publish (backward compatibility)...\n"); + + // Call synchronous publish (old API) + int result = nostr_relay_pool_publish_async(pool, test_relays, 1, event, NULL, NULL); + + printf("📊 Synchronous publish result: %d successful publishes\n", result); + + // Cleanup + cJSON_Delete(event); + nostr_relay_pool_destroy(pool); + + printf("\n✅ Backward compatibility test completed!\n"); + printf(" Expected: 0 successful publishes (connection failure)\n"); + printf(" Actual: %d successful publishes\n", result); + printf(" Result: %s\n", result == 0 ? "PASS" : "FAIL"); + + return result == 0 ? 0 : 1; +} \ No newline at end of file diff --git a/tests/simple_async_test b/tests/simple_async_test new file mode 100755 index 0000000000000000000000000000000000000000..c68b9c71c00974813a1755f7d816ca56f1f70980 GIT binary patch literal 71672 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 literal 0 HcmV?d00001 diff --git a/tests/simple_async_test.c b/tests/simple_async_test.c new file mode 100644 index 00000000..3d89fbf5 --- /dev/null +++ b/tests/simple_async_test.c @@ -0,0 +1,70 @@ +#define _DEFAULT_SOURCE +#include "../nostr_core/nostr_core.h" +#include "../cjson/cJSON.h" +#include +#include +#include +#include + +// Test callback function +static int callback_count = 0; + +void test_callback(const char* relay_url, const char* event_id, + int success, const char* message, void* user_data) { + callback_count++; + printf("📡 Callback %d: Relay %s, Success: %s\n", + callback_count, relay_url, success ? "YES" : "NO"); + if (message) { + printf(" Message: %s\n", message); + } +} + +int main() { + printf("🧪 Simple Async Publish Test\n"); + printf("============================\n"); + + // Create pool + nostr_relay_pool_t* pool = nostr_relay_pool_create(NULL); + if (!pool) { + printf("❌ Failed to create pool\n"); + return 1; + } + + // Create a test event + cJSON* event = cJSON_CreateObject(); + cJSON_AddStringToObject(event, "id", "test_event_simple"); + cJSON_AddNumberToObject(event, "kind", 1); + cJSON_AddStringToObject(event, "content", "Test async publish"); + cJSON_AddNumberToObject(event, "created_at", time(NULL)); + cJSON_AddStringToObject(event, "pubkey", "test_pubkey"); + cJSON_AddStringToObject(event, "sig", "test_signature"); + + // Test with non-existent relay (should trigger connection failure callback) + const char* test_relays[] = {"ws://nonexistent.example.com"}; + + printf("🚀 Testing async publish...\n"); + + // Call async publish + int sent_count = nostr_relay_pool_publish_async( + pool, test_relays, 1, event, test_callback, NULL); + + printf("📊 Sent to %d relays\n", sent_count); + + // Wait a bit for callback + printf("⏳ Waiting for callback...\n"); + for (int i = 0; i < 5 && callback_count == 0; i++) { + nostr_relay_pool_poll(pool, 100); + usleep(100000); // 100ms + } + + printf("\n📈 Results:\n"); + printf(" Callbacks received: %d\n", callback_count); + + // Cleanup + cJSON_Delete(event); + nostr_relay_pool_destroy(pool); + + printf("\n✅ Simple async test completed!\n"); + + return callback_count > 0 ? 0 : 1; +} \ No newline at end of file