More outbox lessons learned for me, maybe useful for #devstr

elsat

npub1zafcms4xya5ap9zr7xxr0jlrtrattwlesytn2s42030lzu0dwlzqpd26k5

hex

0229245acab381168569e28aa9501d37239552e34a3fefd6debe7011aacd61f6

nevent

nevent1qqsqy2fytt9t8qgks4579z4f2qwnwgu42t3550l06m0tuuq34txkrasprpmhxue69uhhyetvv9ujuem4d36kwatvw5hx6mm9qgspw5udc2nzw6wsj3plrrphe0343744h0ucz9e4g248chl3w8kh03q0ygusl

Kind-1 (TextNote)

2026-02-26T05:39:29Z

More outbox lessons learned for me, maybe useful for #devstr

As far as I know

  1. Learned that no nostr app uses nip-66 to check if a relay is alive before firing off requests
  2. According to my benchmarks, by implementing nip-66, the relay success rate increases from 30% -> ~~75-85%, meaning fewer connections are wasted on dead relays.
  3. Nip-66 is therefore an efficiency improvement, and is not necessarily a coverage guarantee
  4. I have not measured time to outbox results yet.
  5. No nostr app spot checks what outbox relays return against an independent relay to detect gaps. Nip-66 liveness checks return relay health, but do not verify per-author delivery.
  6. Deterministic algos like greedy set coverage cannot be set up with a learning mechanism
  7. Stochastic algos like coracle’s are able to implement learning, and benefit significantly - coverage improves the more the app looks up a specific profile
  8. The theoretical CS algo I mentioned before (MAB-UCB) algo is not practical
  9. 20-44% of follows dont have a kind-10002, which hampers outbox.

From what I’ve seen so far the best starting point is coracle’s stochastic algo, with nip-66, and delivery scoring.

https://github.com/nostrability/outbox

cc nostr:npub1uac67zc9er54ln0kl6e4qp2y6ta3enfcg7ywnayshvlw9r5w6ehsqq99rx nostr:npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6 nostr:npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8 nostr:npub1acg6thl5psv62405rljzkj8spesceyfz2c32udakc2ak0dmvfeyse9p35c nostr:npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr nostr:npub1fgz3pungsr2quse0fpjuk4c5m8fuyqx2d6a3ddqc4ek92h6hf9ns0mjeck nostr:npub13v47pg9dxjq96an8jfev9znhm0k7ntwtlh9y335paj9kyjsjpznqzzl3l8

nostr:nevent1qqstev5upz37lcwpqxzc6prkk8rdy35sudpcj78a8zfa8gxfl33zfjqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqs6amnwvaz7tmwdaejumr0dsq3jamnwvaz7tms09exzmtfvshxv6tpw34xze3wvdhk6qglwaehxw309ac8junpd45kgtnxd9shg6npvchxxmmd9a5kucn00qpzq96n3hp2vfmf6z2y8uvvxl97xk86kkalnqghx4p25lzl79c76a7yqvzqqqqqqyuydjtd

原始 JSON

{
  "kind": 1,
  "id": "0229245acab381168569e28aa9501d37239552e34a3fefd6debe7011aacd61f6",
  "pubkey": "17538dc2a62769d09443f18c37cbe358fab5bbf981173542aa7c5ff171ed77c4",
  "created_at": 1772084369,
  "tags": [
    [
      "q",
      "bcb29c08a3efe1c101858d0476b1c6d24690e3438978fd3893d3a0c9fc6224c8",
      "wss://relay.damus.io",
      "17538dc2a62769d09443f18c37cbe358fab5bbf981173542aa7c5ff171ed77c4"
    ],
    [
      "p",
      "17538dc2a62769d09443f18c37cbe358fab5bbf981173542aa7c5ff171ed77c4",
      "wss://relay.damus.io"
    ],
    [
      "t",
      "devstr"
    ],
    [
      "r",
      "https://github.com/nostrability/outbox"
    ],
    [
      "p",
      "e771af0b05c8e95fcdf6feb3500544d2fb1ccd384788e9f490bb3ee28e8ed66f"
    ],
    [
      "p",
      "97c70a44366a6535c145b333f973ea86dfdc2d7a99da618c40c64705ad98e322"
    ],
    [
      "p",
      "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d"
    ],
    [
      "p",
      "e2ccf7cf20403f3f2a4a55b328f0de3be38558a7d5f33632fdaaefc726c1c8eb"
    ],
    [
      "p",
      "ee11a5dff40c19a555f41fe42b48f00e618c91225622ae37b6c2bb67b76c4e49"
    ],
    [
      "p",
      "266815e0c9210dfa324c6cba3573b14bee49da4209a9456f9484e5106cd408a5"
    ],
    [
      "p",
      "4a0510f26880d40e432f4865cb5714d9d3c200ca6ebb16b418ae6c555f574967"
    ],
    [
      "p",
      "8b2be0a0ad34805d76679272c28a77dbede9adcbfdca48c681ec8b624a1208a6"
    ]
  ],
  "content": "More outbox lessons learned for me, maybe useful for #devstr\n\nAs far as I know\n1. Learned that no nostr app uses nip-66 to check if a relay is alive before firing off requests\n2. According to my benchmarks, by implementing nip-66, the relay success rate increases from 30% -\u003e ~~75-85%, meaning fewer connections are wasted on dead relays. \n3. Nip-66 is therefore an efficiency improvement, and is not necessarily a coverage guarantee\n4. I have not measured time to outbox results yet. \n5. No nostr app spot checks what outbox relays return against an independent relay to detect gaps. Nip-66 liveness checks return relay health, but do not verify per-author delivery. \n6. Deterministic algos like greedy set coverage cannot be set up with a learning mechanism\n7. Stochastic algos like coracle’s are able to implement learning, and benefit significantly - coverage improves the more the app looks up a specific profile\n8. The theoretical CS algo I mentioned before (MAB-UCB) algo is not practical\n9. 20-44% of follows dont have a kind-10002, which hampers outbox. \n\nFrom what I’ve seen so far the best starting point is coracle’s stochastic algo, with nip-66, and delivery scoring. \n\nhttps://github.com/nostrability/outbox\n\ncc nostr:npub1uac67zc9er54ln0kl6e4qp2y6ta3enfcg7ywnayshvlw9r5w6ehsqq99rx nostr:npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6 nostr:npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8 nostr:npub1acg6thl5psv62405rljzkj8spesceyfz2c32udakc2ak0dmvfeyse9p35c nostr:npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr nostr:npub1fgz3pungsr2quse0fpjuk4c5m8fuyqx2d6a3ddqc4ek92h6hf9ns0mjeck nostr:npub13v47pg9dxjq96an8jfev9znhm0k7ntwtlh9y335paj9kyjsjpznqzzl3l8\n\nnostr:nevent1qqstev5upz37lcwpqxzc6prkk8rdy35sudpcj78a8zfa8gxfl33zfjqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqs6amnwvaz7tmwdaejumr0dsq3jamnwvaz7tms09exzmtfvshxv6tpw34xze3wvdhk6qglwaehxw309ac8junpd45kgtnxd9shg6npvchxxmmd9a5kucn00qpzq96n3hp2vfmf6z2y8uvvxl97xk86kkalnqghx4p25lzl79c76a7yqvzqqqqqqyuydjtd",
  "sig": "ef054671e6401ae0f8488fbf766d9e535526a9d0595e9b8eab80c5be6ed84c3d8c3f8ed4f03ef203883342ec97de767d21ec0eb431decede99f424cce9c82bf3"
}