web: bump explore timeline pow target to 25

It's much harder to spam at this level
This commit is contained in:
William Casarin 2022-11-14 18:05:37 -08:00
parent d643e2d06b
commit eeb3811585
2 changed files with 75 additions and 7 deletions

View file

@ -8,11 +8,11 @@
<link rel="stylesheet" href="css/responsive.css?v=8"> <link rel="stylesheet" href="css/responsive.css?v=8">
<link rel="stylesheet" href="css/fontawesome.css?v=2"> <link rel="stylesheet" href="css/fontawesome.css?v=2">
<script defer src="js/ui/util.js?v=5"></script> <script defer src="js/ui/util.js?v=5"></script>
<script defer src="js/ui/render.js?v=6"></script> <script defer src="js/ui/render.js?v=7"></script>
<script defer src="js/noble-secp256k1.js?v=1"></script> <script defer src="js/noble-secp256k1.js?v=1"></script>
<script defer src="js/bech32.js?v=1"></script> <script defer src="js/bech32.js?v=1"></script>
<script defer src="js/nostr.js?v=6"></script> <script defer src="js/nostr.js?v=6"></script>
<script defer src="js/damus.js?v=78"></script> <script defer src="js/damus.js?v=79"></script>
</head> </head>
<body> <body>
<script> <script>

View file

@ -62,6 +62,7 @@ function init_home_model() {
explore: { explore: {
...init_timeline('explore'), ...init_timeline('explore'),
seen: new Set(), seen: new Set(),
pow: 25, // pow difficulty target
} }
}, },
deleted: {}, deleted: {},
@ -271,6 +272,8 @@ function process_event(model, ev)
const notified = was_pubkey_notified(model.pubkey, ev) const notified = was_pubkey_notified(model.pubkey, ev)
ev.notified = notified ev.notified = notified
ev.pow = calculate_pow(ev)
if (ev.kind === 7) if (ev.kind === 7)
process_reaction_event(model, ev) process_reaction_event(model, ev)
else if (ev.kind === 42 && ev.refs && ev.refs.root) else if (ev.kind === 42 && ev.refs && ev.refs.root)
@ -315,7 +318,7 @@ function should_add_to_timeline(ev)
return ev.kind === 1 || ev.kind === 42 || ev.kind === 6 return ev.kind === 1 || ev.kind === 42 || ev.kind === 6
} }
function should_add_to_explore_timeline(view, ev) function should_add_to_explore_timeline(contacts, view, ev)
{ {
if (!should_add_to_timeline(ev)) if (!should_add_to_timeline(ev))
return false return false
@ -323,7 +326,10 @@ function should_add_to_explore_timeline(view, ev)
if (view.seen.has(ev.pubkey)) if (view.seen.has(ev.pubkey))
return false return false
return true if (contacts.friend_of_friends.has(ev.pubkey))
return true
return ev.pow >= view.pow
} }
function get_current_view() function get_current_view()
@ -354,7 +360,7 @@ function handle_home_event(ids, model, relay, sub_id, ev) {
case ids.explore: case ids.explore:
const view = model.views.explore const view = model.views.explore
if (should_add_to_explore_timeline(view, ev)) { if (should_add_to_explore_timeline(model.contacts, view, ev)) {
view.seen.add(ev.pubkey) view.seen.add(ev.pubkey)
insert_event_sorted(view.events, ev) insert_event_sorted(view.events, ev)
} }
@ -621,15 +627,77 @@ function fetch_referenced_events(refevents_id, model, relay) {
model.pool.subscribe(refevents_id, [filter], relay) model.pool.subscribe(refevents_id, [filter], relay)
} }
function zero_bits(b)
{
let n = 0;
if (b == 0)
return 8;
while (b >>= 1)
n++;
return 7-n;
}
function leading_zero_bits(id)
{
const buf = nostrjs.hex_decode(id)
let i
for (i = 0, total = 0; i < 32; i++) {
bits = zero_bits(buf[i])
total += bits
if (bits != 8)
break
}
return total
}
function min(a, b) {
return a < b ? a : b;
}
function difficulty_to_prefix(d)
{
const n = Math.floor(d / 4)
let s = ""
for (i = 0; i < n; i++) {
s += "0"
}
return s
}
function calculate_pow(ev)
{
const id_bits = leading_zero_bits(ev.id)
for (const tag of ev.tags) {
if (tag.length >= 3 && tag[0] === "nonce") {
const target = +tag[2]
if (isNaN(target))
return 0
// if our nonce target is smaller than the difficulty,
// then we use the nonce target as the actual difficulty
return min(target, id_bits)
}
}
// not a valid pow if we don't have a difficulty target
return 0
}
function handle_profiles_loaded(ids, model, view, relay) { function handle_profiles_loaded(ids, model, view, relay) {
// stop asking for profiles // stop asking for profiles
model.pool.unsubscribe(ids.profiles, relay) model.pool.unsubscribe(ids.profiles, relay)
redraw_events(model, view) redraw_events(model, view)
redraw_my_pfp(model) redraw_my_pfp(model)
const prefix = difficulty_to_prefix(view.pow)
const fofs = Array.from(model.contacts.friend_of_friends) const fofs = Array.from(model.contacts.friend_of_friends)
let explore_filters = [ let explore_filters = [
{kinds: [1,42], ids: ["00000"], limit: 200} {kinds: [1,42], ids: [prefix], limit: 200}
] ]
if (fofs.length > 0) { if (fofs.length > 0) {