It took a year to ship WebAssembly in Anubis
Posted by xena 1 day ago
Comments
Comment by vintagedave 1 day ago
Love this. There’s been past discussion on HN re how OSS maintainers are treated, and this is such a wry sentence. I really appreciate the tone / attitude to the problem.
Comment by skrebbel 1 day ago
Comment by st_goliath 1 day ago
I'd say "wide variance in the level of kindness" is a rather British way to describe some of the opinions that have been voiced.
Comment by cowsandmilk 1 day ago
Comment by graemep 23 hours ago
Comment by afavour 1 day ago
Comment by strken 1 day ago
Comment by skrebbel 1 day ago
Comment by joquarky 18 hours ago
Comment by doctor_radium 1 day ago
So this is going to be interesting.
My plea (in a small voice) to the OP: just as many sites still do for JavaScript, please add a "This captcha required Webassembly to continue" message to your code when Webassembly is disabled. And, incidentally, for smaller platforms/browsers that don't offer a Webassembly engine at all.
Comment by evnp 1 day ago
> One of the big things that blocked this shipping for so long was not having an escape hatch of some kind to allow clients that disable WebAssembly by policy to get through the gate. [...] This combination of factors means that there would need to be another implementation of the proof of work code in JavaScript that would actually execute the number crunching.
Comment by doctor_radium 1 day ago
Comment by swiftcoder 1 day ago
Point of order: WASM doesn't let things run in the background. To do that you need WebWorkers (a javascript feature, not WASM-specific).
Comment by zamadatix 19 hours ago
Comment by swiftcoder 17 hours ago
I mean, you get the same indicators as when the page runs arbitrary Javascript on load? WASM assembly may be (slightly) harder to read than typescript compiled to JS, but the source is all there, it calls the same APIs, etc.
Comment by zamadatix 14 hours ago
js on any site -> okay, I enable permanently
wasm on any site -> not okay, will never enable
But rather: js disabled -> I often get a fallback warning message letting me know a site needs it to work
wasm disabled -> I'd like a similar kind of message
So they don't have to guess at the cause(s). I.e. they don't mind Anubis moved to WASM over JS in itself, they mind there is no fallback warning message letting them know that's the missing requirement. In general, I agree with the problem trend. Most users get pushed along auto-update tracks these days and so fallback behavior has often fallen out of mind with the newer technologies even though it's so easy to implement. That's almost expected with "normal" pages and the lack of time to put into them but when you push something which will affect many sites it's probably worth the reminder for a fallback message.Comment by swiftcoder 5 hours ago
Comment by noduerme 1 day ago
Comment by xena 1 day ago
Comment by tiagod 21 hours ago
Comment by doctor_radium 11 hours ago
Comment by nosioptar 18 hours ago
I forgot to do so on my phone. I noticed Firefox had slowed to a friggeb crawl when opening pages. Disabling web workers fixed that.
Comment by jonkoops 1 day ago
Comment by doctor_radium 10 hours ago
My wish is actually for the days of NPAPI where Webassembly would be just another plugin (like Flash) and browsers clung to mainly HTML, JS, and CSS. Then developers wouldn't be quite so keen to rely on it and the web would be much less bloated. Yes, those days are long gone... As a tradeoff, I'd settle for a simple toolbar icon that lit up when Webassembly is running, and/or a high level UI (just like Location, Camera, and Microphone) so I can enable it for just those sites that need it. I tried selling Mozilla on the idea once but they apparently weren't interested.
Baselines aren't entirely universal. I remember the days when the Mozilla (or early Firefox) browser was the only viable web client for Linux, but some sites still opted to run behind ActiveX. Today I don't think you'll find a Haiku or Amiga browser with Webassembly support, nor Firefox for Linux on IBM Power motherboards. It's easy to forget that just because most any 'nix or BSD OS has a plethora of choices, that others aren't still dealing with the "ActiveX" situation and feeling like everybody's out to get them.
Comment by well_ackshually 1 day ago
You do see how selfish it is, right? While the author did introduce such a solution, it's such a massive waste of time.
Comment by xenafan1 1 day ago
Comment by gavinsyancey 1 day ago
This amounts to giving Google effectively complete control over the web. I'm not sure that's a good idea. IMO it's important that Firefox and Safari remain popular enough that webdevs are forced to support them.
I'm somewhat sympathetic to "If you want to 'customize' your web experience, you shouldn't be surprised when things don't work right." in terms of turning off commonly-used features, but the request isn't to make it work right. OP just wants a helpful error message.
Comment by adrianN 1 day ago
Comment by kccqzy 1 day ago
I have a Mac from 2014 running Yosemite that I occasionally use to test for backwards compatibility in my own frontend code (for fun!). But IMO the best way to ensure compatibility is to use period-correct toolchains or toolchains where the pace of change is slower, like ClojureScript.
Comment by Aachen 1 day ago
On https://wasm-feature-detect.surma.technology it shows that I don't have 3 of all these features but I'm not sure if Anubis needs any of them to not kick me back to the pure JS solution
Which would apparently be bad because
> The WebAssembly that's shipped with this flow is ridiculously performant. This may mean you need to adjust the difficulty [upward, to avoid that bots solve it trivially when they support wasm, I assume this means]
combined with
> The wasm2js flow doesn't currently have a way to update the progress bar [so you have no clue about remaining time]
(wouldn't be the first time that I gave up on a page because it was stuck on 0 hashes per second)
Comment by xena 1 day ago
Comment by Aachen 2 hours ago
Comment by adrian17 1 day ago
Fun fact, this _used_ to be the case - wasm32-unknown-unknown had extra non-mvp features added later, which in my eyes has been a breaking change on stable. You're not the first person to have been bitten by this, there's [1] and a similar story in Ruffle [2].
Weirdly, the response from the rustc side (IIRC we also talked with one of the devs of wasm component on discord a bit around 2024) has contained a lot of (paraphrasing) "in retrospect we think wasm32-unknown-unknown target was designed badly*, so we'd prefer if you either dealt with it or switched to another wasm target <with its different set of downsides> than us fixing it". (*I acknowledge that the way std was implemented on that target was unusual and "not clean", but it works _really well_ for a lot of people.)
> I looked into the process involved for rebuilding the standard library twice: once with only MVP wasm features enabled and once with an "all yes config" like usual. Based on some research I did this seemed like a massive pain.
That's what Ruffle does [3], it's a bit unfortunate but wouldn't call it a massive pain.
[1] https://internals.rust-lang.org/t/can-we-have-either-a-new-t...
[2] https://github.com/ruffle-rs/ruffle/pull/18397
[3] See lines 55 and 117-127 in https://github.com/ruffle-rs/ruffle/blob/6890c618daab3153343...
Comment by JoshTriplett 1 day ago
That's about right. Specifically, wasm32-unknown-unknown is serving multiple targets, which aren't very compatible, and it implements std by panicking in all the bits that can't work.
One target is "you truly have absolutely nothing, and don't really have much of `std` at all". Another target is "you're in a browser, and can do anything a typical browser can provide" (ideally targeting the future where wasm has full browser APIs without going through javascript). Another target is "hosted environment that isn't a browser, and which capabilities you have depends on the environment". Those are three very different things.
I would argue that we need at least two new targets, possibly three:
- `wasm32-none` or similar (by analogy with `x86_64-unknown-none`), a target where you don't have anything except for what you bring with you. The equivalent of writing kernel code.
- `wasm32-wasi-hosted` (or pick another name), where you the hoster of the wasm can supply whatever capabilities you have available.
- `wasm32-wasi-browser`.
It's possible that `none` could be a special case of `hosted`, where the services you provide are "none".
Comment by Georgelemental 1 day ago
Comment by 0x696C6961 1 day ago
Comment by xena 1 day ago
Comment by gruez 1 day ago
Comment by xena 1 day ago
Comment by kstrauser 1 day ago
And while I’m sympathetic to the idea of not wanting to run JS, to a first approximation modern browsers are JS engines that have graphical displays. How things should be vs how they are is a classic is/ought problem. The world took a vote on what a browser’s meant for and we lost. Fighting it today is rough; tomorrow, futile.
Comment by gruez 1 day ago
No, because there are technologies that don't have this issue, eg. privacy pass.
Comment by perching_aix 1 day ago
Whenever I hit Anubis, I simply go "keep your secrets then" and take my leave. The vast majority of the sites posted to HN (that catch my fancy) work fine or fine enough, and are better for it.
If I really, really desperately want to check something out, I can always just turn stuff back on. Turns out, I rarely do.
Shoutout to the particularly dogshit few that don't just require cookies and JS, but even third party JS. For reading a blogpost or a message thread!
Comment by bmacho 1 day ago
They probably meant 3rd party cookies. It's common to block those. 1st party cookies not so much.
Comment by nosioptar 17 hours ago
Comment by kstrauser 9 hours ago
Comment by gkbrk 1 day ago
Comment by anuthis 1 day ago
Comment by lxgr 1 day ago
I feel like Anubis is ironically speedrunning a lot of discoveries the crypto folks have already made several years ago...
Comment by Terr_ 1 day ago
Comment by xena 1 day ago
Comment by wolrah 17 hours ago
Comment by tomodachi94 1 day ago
Comment by packetlost 1 day ago
Comment by JsonCameron 1 day ago
Comment by packetlost 19 hours ago
Comment by apoorvkhanna88 1 day ago
Comment by dist-epoch 1 day ago
We could link it to a site, you generate for HN, I for Reddit, but it so happens that you visited Reddit more and I HN, so we depleted our Anubis POW, so we could exchange some Reddit Anubis with some HN Anubis.
Comment by ssl-3 1 day ago
Comment by kelvinjps10 1 day ago
Comment by omoikane 1 day ago
I don't understand the units here, wouldn't a bit versus nibble difference make the multiplier 16, instead of 1024?
Comment by xena 1 day ago
Comment by andai 1 day ago
Comment by JodieBenitez 1 day ago
Also, while some pages may look like static HTML pages, they may be generated on the fly by an expensive and/or slow backend, which adds to the cost. I happen to maintain servers for academics and some content management systems are slow and have an expensive CPU cost. While it's OK for the low number of humans interested in the subjects they deal with, it's definitely not fit for massive bot scrapping. And before you ask, no, it's not always practical to have cache upfront or to pre-generate all pages.
Comment by GuB-42 1 day ago
When I see LKML using Anubis when the pages it serves are tens of kB, all presumably static, I wonder if they do it out of spite rather than to protect their servers.
Comment by Gracana 1 day ago
As a user/reader/viewer I absolutely hate Anubis and usually turn around when I see it pop up (at least on my phone where it takes ages to compute), but with stats like that, I get why a site operator would resort to using it.
Comment by alexey-salmin 11 hours ago
> At any one time, across 5 geo-distributed nodes, there are 14 CPU cores doing nothing but rendering git commits as html.
14 CPU cores total for running a website like kernel.org is laughable. This is not worth burning cycles in Anubis on client's devices, this is not worth the time of the engineer who worked on it. Provisioning more hardware would have been literally better for everyone.
Comment by Gracana 10 hours ago
Comment by glub 23 hours ago
This drives me crazy with so-called SOTA LLMs that have "achieved AGI".
Fable, Sol, Astra, will start by trying to reverse engineer a binary to figure out how something works when software is open source and one search query away.
You let them know it's open source, and they will start using github API instead of just cloning and grepping.
Comment by arcfour 1 day ago
The situation you are in is far less dire sounding when you consider that you have these options available to you.
Comment by JodieBenitez 1 day ago
Comment by arcfour 22 hours ago
Well, sounds like it's not your problem then.
Comment by account42 21 hours ago
Yes and that should be fixed before you subject real users to resource-wasting scripts.
Comment by JodieBenitez 20 hours ago
Comment by bryan_w 7 hours ago
Comment by xena 17 hours ago
Comment by matkoniecz 17 hours ago
And to answer your intended demand: this is in some cases impossible or unreasonable. And things were working fine before LLM DDoS.
Comment by andai 22 hours ago
Comment by jeroenhd 1 day ago
It also depends on if you want your content to be scraped. Any bot ignoring robots.txt should be considered potentially malicious and worth considering such mechanisms for.
Comment by account42 21 hours ago
That's a trivially solved problem - have the web server refuse (or redirect if you're feeling nice) requests with unexpected query parameters. No reason to make things worse for real users before optimizing your site.
And even if there are actual parametric resources you want to serve, apply limits only to them and let users visit the rest without unnecessary bot checks.
Comment by jeroenhd 17 hours ago
I could probably also analyze all the paths across my servers and write some bespoke Nginx config files to filter out all requests with illegal queries, but that's harder, more fragile, and just leaves the servers open for the next time a scraper finds a new way to screw me over.
The bots I'm fighting have gone for the nuclear option, relying on botnets and spoofing to bypass basic filtering, so I don't see why I shouldn't do the same.
Comment by zamalek 19 hours ago
Comment by trickypr 1 day ago
Also, if you are not using a big CDN (e.g. Cloudflare), you still need to pay for the traffic (even if you don't pay as much for the CPU). This is doubly true for smaller CDNs like Bunny.
Comment by xena 1 day ago
Comment by account42 21 hours ago
Comment by Nnnes 1 day ago
Comment by andai 22 hours ago
Comment by account42 21 hours ago
Comment by tyre 1 day ago
Comment by kiicia 1 day ago
Comment by andai 22 hours ago
I only hear bad things about bots lately, are there any benevolent bots?
I've done a tiny bit of scraping myself (usually to archive old websites before they die), and I've gotten banned a few times even though I wasn't hammering anything.
Looks like it's getting harder and harder to do scraping for legitimate purposes. Although I suppose legitimate is subjective :) Everything becomes valuable when it's old enough...
Comment by keeda 10 hours ago
Comment by miraline 1 day ago
Comment by mitxela 1 day ago
Comment by XorNot 1 day ago
The git host example is probably the one which Anubis is the dumbest defense for: the main reason to have those links is for easy machine interaction. So that's dead when you implement it.
So why even host the links? It's a git repo: send them a local got client and let them clone the repo in browser or something.
Comment by mitxela 1 day ago
Comment by novafunc 1 day ago
Comment by cyphar 1 day ago
As you said, if you actually want to interact with a remote git repo you'd do so with packfiles not diffs.
Comment by utopiah 1 day ago
I document my code, in issue and elsewhere on the Web, by referring to specific commits so having a URL for each is useful to me at least.
Comment by worldsavior 1 day ago
Comment by raincole 1 day ago
Comment by solid_fuel 1 day ago
Personally I don’t understand where this confusion comes from - it’s a simple economic tactic. Yes the large scale scrapers won’t run out of compute but putting anubis in front of a website demonstrably reduces the amount of crawling and that is the entire goal.
Comment by Aachen 1 day ago
After 1 solve, you get a cookie and can load tons of pages with it. Scrapers and user agents alike will need to spend the compute only once to get a valid session for themselves
Seems to be working so far though. Fwiw, lots of silly things stop bots until someone puts their mind (or tokens) to bypassing it, and then the blocking mechanism has to adapt. We'll see how it plays out, for now it's a lot better than begging big brother (cloudflare, google, or amazon captcha) for access, so I'm quite appreciative of what Techaro is doing
Comment by jdlshore 1 day ago
Comment by Aachen 5 hours ago
Comment by gruez 1 day ago
Scrapers can't change their strategy? It's not hard to think of mitigations: keep on using a session until you're banned, and failing that rotate your IP. Nowadays you don't even need to think. You can probably tell a LLM "write me a scraper that has adaptive anti-anti-bot mechanism".
Comment by embedding-shape 1 day ago
Yes, but you normally don't try to fight all strategies up front, you add stuff on a need-to basis. Currently, lots of people are in the stage of "need to get this thing using bunch of IPs to stop hammering my servers", apparently Anubis helps them with that. If that stops working, other tactics are tried, and so it goes on for the life of your service. Hasn't stopped yet, doesn't seem to be stopped soon either.
Comment by gruez 1 day ago
Comment by xena 1 day ago
Turns out that in practice there's some bots that implement support for this but not JavaScript.
Comment by embedding-shape 1 day ago
Comment by well_ackshually 1 day ago
People have been sent to jail for participating in LOIC attacks which were less destructive that what these bots do on the daily.
Comment by bulder 1 day ago
Comment by __s 1 day ago
Comment by doc_ick 1 day ago
Comment by mitxela 1 day ago
Comment by drum55 1 day ago
last difficulty 5 nonce 645376 in 9 ms (101.6MH/s, avx512-x16)
This takes many minutes to solve on a cellphone, 9 milliseconds on a cheap VPS. It’s not stopping anyone.
Comment by bombela 1 day ago
Comment by xenafan1 1 day ago
Comment by Jtariiiii 1 day ago
You could just spend 30 seconds googling instead of confidently asserting nonsense. There are plenty of people demonstrating that Anubis reduces bot traffic.
Comment by drum55 1 day ago
Comment by yborg 1 day ago
Comment by gruez 1 day ago
"Anubis reduces bot traffic" and "[the proof of work] is not stopping anyone" isn't contradictory, especially if anubis isn't being benchmarked against non-POW alternatives like IP/ASN bans, or tls fingerprinting.
Comment by Jtariiiii 1 day ago
Comment by gruez 1 day ago
Comment by xboxnolifes 1 day ago
Comment by account42 21 hours ago
Comment by wiredfool 1 day ago
* Sometimes there's a pattern to the country. Oftentimes, not.
* User-agent, rotated between common, valid, current web browsers.
* Other headers, sec-*, accept, etc, generally valid and rotating.
* Bots will load the site to saturation in a denial of wallet attack.
The only thing that's specific is: * urls have a pattern.
* it's obviously invalid traffic.
(non-bot traffic on my sites does not go from 0 to 200r/sec on the search interface in seconds. It does not go away that fast either)Comment by gruez 1 day ago
Which doesn't hold. A 1s delay, despite being inperceptible is still a cost to human users. After all, 3600 x 1s delay adds up to an hour. Worse yet, the typical human visitor will always have to solve a challenge, because chances are it's the first time they're visiting your blog or whatever. Someone scraping reuse a valid session for at least a few more pages.
There's also the problem of time. It might be tempting to think the cost of a challenge is 1M cpu cycles or whatever, but the cost is better modeled as two parts, a time cost (for the human) and a cpu cost (for the computer). A scraper might have to pay the cpu cost, but not the time cost, because they can have their scraper solve challenges in their sleep. Unless the user is utterly destitute, their time is worth far more than whatever the compute cost is.
Comment by account42 21 hours ago
Comment by fc417fc802 1 day ago
If against all odds it turns out that skiddies (or agents or AI billionaires or what have you) are willing to burn inordinate amounts of RAM and CPU just to scrape autogenerated cgit pages that are of approximately zero value to them to begin with then I guess we'll just have to cross that bridge when we come to it.
Comment by XorNot 1 day ago
And then regular users: who now can't really browse your site.
And then smart bots - anyone with even a moderate amount of funding in the AI space, who aren't even slightly slowed down.
The solution basically makes the favored customer well funded AI scrapers, not users.
Comment by jeroenhd 1 day ago
Extreme configurations with high difficulty do make for a frustrating experience on very old devices, but in practice it rarely gets in the way.
Only the tail end of what one could consider normal users (those running custom browsers or having JS disabled or nonfunctional) run into issues here, but they'll have these issues with any other bot-blocking mechanism that still offers some protection these days.
Apple's "ask your vendor for tokens to exchange for access" web standard gets around this, assuming those bespoke and Javascript-less browsers implement PATs, but that standard seems to be completely dead in the water outside of Safari.
Comment by fc417fc802 1 day ago
That's entirely up to how the site operator configures the PoW challenge.
> anyone with even a moderate amount of funding in the AI space, who aren't even slightly slowed down
Do you have any evidence that it is the large well funded AI companies DoSing sites by (for example) scraping absurd numbers of permutations of cgit url parameters?
Even if it is (which I doubt), if all this accomplishes is getting them to spend 10 minutes optimizing their bots to not do that it will be a major win.
Comment by pelcg 1 day ago
Comment by zamalek 19 hours ago
Would there be any risk in making a dynamically built algorithm (i.e. the risk that we don't find N zero prefix bits)? Chain a set of transforms and build a unique WASM binary (including optimizations to deter pattern matching); possibly one a day or hour or something. That way you'd need to have Claude vibeslop the CUDA implementation at that cadence, per website.
Comment by arjie 1 day ago
Comment by mitxela 1 day ago
Comment by arjie 1 day ago
Comment by 9cb14c1ec0 1 day ago
Comment by pinocchioruns 1 day ago
Comment by xena 1 day ago
Comment by arjie 1 day ago
- https://techaro.lol/robots.txt
- https://anubis.techaro.lol/robots.txt
and the latter (at least) is Anubis protected. It could be just an omission. But if it's intentional, I am just curious why so that as a bot author I can be well-behaved.
Comment by dspillett 1 day ago
I assume that the previous challenges will still be available for circumstances where WASM is not available (unless we are just working on the basis that it is available if JS is?) or perhaps as a fallback. TFA explicitly mentions “smart” TVs, and I'm sure there are plenty of those out there that run browsers old enough to not know what WASM is. TBH these would not be a priority for me, but they obviously are for this project given they (well, TVs generally, not specifically elderly ones) get specific mention in this write-up.
If so, what is to stop scrapers from just forcing the fallback POW option instead of trying to run the new memory-hard algorithm at all?
Comment by Lyrex 1 day ago
Comment by dspillett 1 day ago
Comment by trickypr 1 day ago
Comment by xena 1 day ago
Comment by tyre 1 day ago
Comment by tefkah 1 day ago
Comment by evmar 1 day ago
Comment by jezek2 1 day ago
I've just finished creating a WASM 1.0 implementation (simple JIT on x86 and x86_64) for plugin usage and I'm looking on how to support more languages beyond C (for which I have "micro-libc" to create really small binaries). In particular C++ and Rust so the article contains useful info for that. C++ that would be more problematic I think, would have to resort to full Emscripten or something... I've tried to compile standalone C++ stdlib but wasn't much sucessful yet.
BTW, I see in the screenshots you also test Firefox, I think it would make sense to test the latest two ESR versions (these are often used by Linux distributions).
Comment by chews 1 day ago
Comment by ChocolateGod 1 day ago
There's probably an overlap with people who think anubis is a good idea and those who think we should be doing more to battle climate change.
The two views are not compatible though.
Comment by Levitating 1 day ago
That would defeat the purpose. The goal is to make scraping costly, not profitable.
Comment by articulatepang 1 day ago
But, in this world, the website owner would receive tokens that they can then use to do whatever they want, including paying for servers and bandwidth. This is the sense in which the cycles aren’t wasted: the website owner now has cash to spend.
Effectively, both scrapers and ordinary users would be paying for the privilege of getting website bytes.
This also solves the problem of having to wait for your phone to solve the challenge while you’re browsing: you can buy or mine some tokens ahead of time and pay them as soon as challenged. So can the scrapers, but because they’re accessing enormous numbers of pages it’s hopefully prohibitively expensive for them.
Comment by Levitating 22 hours ago
Comment by cozzyd 1 day ago
Comment by xosc 1 day ago
Comment by TacticalCoder 1 day ago
> This makes Anubis challenges use a memory-hard proof of work function (argon2id) instead of just a CPU hard one. It also means that the "hey Claude vibeslop me a CUDA Anubis solver" route is on its way to being fundamentally dead.
Nice.
Comment by ancientcatz 1 day ago
Comment by saagarjha 1 day ago
Comment by xena 1 day ago
Comment by YoshiRulz 1 day ago
Meanwhile BOINC is well-established as the platform for distributed computation. If you can figure out how to squeeze its work units into Wasm challenges, I'm sure a lot of researchers would thank you.
Comment by thunderfork 21 hours ago
Comment by keeda 10 hours ago
Might be worth chucking that thought into Astra, especially if someone springs the $$$ money for it?
Comment by brendoelfrendo 1 day ago
Comment by account42 21 hours ago
Comment by odo1242 1 day ago
Comment by CarVac 1 day ago
Comment by noobis_4433 6 hours ago
Comment by anthoniks 1 day ago
Comment by Retr0id 1 day ago
https://github.com/eternal-flame-AD/pow-buster - Browser extension that already used WASM to accelerate the anubis solver, among others.
https://github.com/kasper93/anubis_webgpu - Browser extension that uses webgpu, for another order-of-magnitude speedup (depending on your GPU of course).
Comment by throawayonthe 1 day ago
Comment by dist-epoch 1 day ago
Comment by stephenlf 1 day ago
…<img not found/>…
I don’t know what this picture was supposed to be, but a 404 demonstrates your point perfectly well.
Comment by xena 1 day ago
Comment by Dwedit 1 day ago
Comment by xena 1 day ago
Comment by rfgplk 23 hours ago
If they "vibeslopped" WebAssembly in Anubis they would have been done a year ago.
Comment by initramfs 1 day ago
Comment by yencabulator 18 hours ago
enum error {
no-error,
Huh? Isn't that covered by `result`? Sounds like you should take that out and return `result<_, error>` from `write-verification`.Comment by shevy-java 1 day ago
Comment by htl 13 hours ago
Comment by browserforest 1 day ago
Comment by tryka7966 18 hours ago
Comment by H3l0s_T3k 21 hours ago
Comment by kevinbaiv 1 day ago
Comment by kevinbaiv 1 day ago
Comment by greatgib 1 day ago
Comment by junon 1 day ago
Comment by account42 21 hours ago
Comment by greatgib 1 day ago
Comment by applfanboysbgon 1 day ago
You sound like a child throwing a tantrum. Before throwing around insults calling people post-teenager, you should maybe look at your own behavior. Is adult behavior getting angry to the point of swearing because you saw a cartoon character?
Comment by anuthis 1 day ago
Comment by brendoelfrendo 1 day ago
Comment by greatgib 1 day ago
Comment by howunfortunate 1 day ago
Comment by kingstnap 1 day ago
Lmao yeah no. I don't think a little argon2 is going to change shit all.
I mean the thesis of Anubis itself is "scrappers are compute limited (in ways that consumer devices are not)" which has its own massive flaws.
Comment by Jtariiiii 1 day ago
Comment by lxgr 1 day ago
Comment by fwip 1 day ago
Comment by mattstir 23 hours ago
Comment by bakugo 1 day ago
Comment by fwip 19 hours ago