7 ms·
It took a year to ship WebAssembly in Anubis
- tefkah 27d agothanks for trying to make the web suck a little less these days xena!
- chews 27d agoIt's wild to me that PoW systems are how we sort the bot problem... the bummer is that all this "work" is just wasted cycles, at least in crypto there is a token you can sell.
- Levitating 27d ago> at least in crypto there is a token you can sell That would defeat the purpose. The goal is to make scraping costly, not profitable.
- cozzyd 27d agoI guess it could in principle be profitable for the website, not the client?
- TacticalCoder 27d agoYup was thinking the same: make honest people pay $0.00001 when they visit the site (in electricity/compute), have the challenge made so that only the website wins a tiny something. Bleed the bots dry. > 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.
- ancientcatz 27d ago[dead]
- xosc 27d agounfortunately at that point it would be indistinguishable from running cryptojacking on your website
- articulatepang 27d agoScraping would be costly in this world: scrapers would have to spend tokens in order to get the webpage. 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.
- Levitating 26d agoI am convinced. Is there any project implementing or proposing this?
- saagarjha 27d agoSure, then just replace it with something that is useful to society but not immediately profitable to a scraper, like science research
- xena 27d agoI want to do this eventually, but it's hard to split things into the micro-tasks that would be required to make this work on Anubis. One of the ideas I'm throwing around is a world where Anubis helps fuzz old games to find timesaves in tool-assisted speedruns. It's harder than you think.
- brendoelfrendo 27d agoThis would be rad.
- YoshiRulz 27d agoThe tools that exist for fuzzing speedruns (TASers call it "botting") are fairly primitive, excluding a few game-specific ones. Because of that, there really aren't that many TASes where a distributed randomised search could make improvements which don't get immediately overshadowed within a day of human attention. Improving botting tools and increasing their adoption would be more effective IMO. (Incidentally, TASVideos.org recently banned one of the people pioneering bot development.) 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.
- thunderfork 26d agoBOINC isn't really built for "small tasks", afaik. Once you get small enough, the work the server is doing to manage the tasks gets to be around the same cost as the server just doing the tasks itself.
- keeda 26d agoYeah, I'm using PoW-based "DDOS defense mechanism" for a current project and had this thought too. I briefly looked into what it would take to exploit PoW to do something economically valuable like folding@home, and it looked a bit tricky. At first glance, these sort of projects seem a bit unsuitable for real-time PoW because they were designed to be run on desktops and so tend to do things in large batches. There probably are other use-cases that could be more suitable though. Might be worth chucking that thought into Astra, especially if someone springs the $$$ money for it?
- CarVac 27d agoPoW was originally anti-spam technology.
- odo1242 27d agoWell, there was CoinHive which did this exact thing 6-7 years ago, but that system got abused a bit much
- ChocolateGod 26d ago> the bummer is that all this "work" is just wasted cycles 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.
- account42 26d agoIt's wild how many people happily jump on this DRM train now that they are hoping to gain from it.
- greatgib 27d ago[flagged]
- junon 27d agoPerhaps understanding why it exists is a good start, as opposed to flinging childish language around.
- greatgib 27d ago[flagged]
- bitwize 27d ago[flagged]
- deleted 27d ago[deleted]
- account42 26d agoTypical "we get to be assholes to people as long as we call them assholes first" logic.
- applfanboysbgon 27d agoAnubis is significantly better than Cloudfare from a ux perspective because it doesn't require interacting with the page. Being gated by turnstiles and having to stop what youre doing while you're waiting is infuriating. To say nothing of Google hard blocking people it doesn't like out of websites and alluding to moving towards ID verification for its captchas. 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?
- anuthis 27d ago
- Retr0id 27d agoSee also: https://github.com/eternal-flame-AD/pow-buster 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 https://github.com/kasper93/anubis_webgpu - Browser extension that uses webgpu, for another order-of-magnitude speedup (depending on your GPU of course).
- throawayonthe 27d agoafaik argon2 should make the GPU less helpful
- dist-epoch 27d agoArgon2 is already GPU-accelerated.
- 0x696C6961 27d agoIt would be cool if the POW could be done ahead of time. That way I don't get stuck waiting while I'm working. Some type of credit/tokens that my browser could then spend.
- xena 27d agoI'm working on this with a private prototype. I'm probably going to lean towards using a Service Worker (https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers https://developer.mozilla.org/en-US/docs/Web/API/Service_Wor...) to renew challenges at a reduced difficulty. Stay tuned!
- gruez 27d agoThat just creates another problem: if you're taking any measures to reduce tracking (ie. clearing cookies on shutdown or using temporary containers), this won't work. If anubis was being deployed on a site that a user visits often (eg. HN), the user might be convinced to whitelist it, but most anubis deployments are on random blogs or fediverse instances that I might not visit again in months. I'm certainly am not going to whitelist those sites, nor am I going to enable cookies wholesale just to avoid solving challenges.
- xena 27d agoLook, if you're going out of your way to break expected behaviour on websites you shouldn't be surprised when people code to the most common denominator and then you have weird subtle breakage as a result.
- anuthis 27d ago[flagged]
- kstrauser 27d agoGotta agree. Turning tracking cookies off? Sure! Turning session cookies off and then complaining that the server doesn’t remember you? Uhhh… 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.
- kingstnap 27d ago> hey Claude vibeslop me a CUDA Anubis solver" route is on its way to being fundamentally dead. 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.
- lxgr 27d agoYes, I also strongly suspect that this is only going to move more parts of scrapers onto consumer devices. The egress proxies are already there, why not use a little bit of the compute as well?
- fwip 27d agoWhen you force a low end device to burn CPU or fill ram constantly, the owner throws it out and buys a new one.
- bakugo 27d agoHaha, no. The average tech illiterate person tolerates a LOT when it comes to bad performance on low end devices.
- fwip 26d agoThe malware already results in noticeable slowdown just running the scraper. Solving anubis challenges is significantly more difficult than simply requesting the page, so it is not feasible on-device without making the device totally unusable.
- mattstir 26d agoThat's just not possible in many parts of the world.
- Jtariiiii 27d agoThe goal isn't to eliminate scrapers, its to prevent a distributed scraping network from requesting 10000 pages a second each from 10000 different websites.
- raincole 27d agoIt's still very unclear to me how Anubis is supposed to work in the long term or even the medium term. The assumption is that scrappers, a.k.a. AI companies, a.k.a. those who hog all the RAM, are short of memory...?
- fc417fc802 27d agoThe assumption is that there will always be some population distribution in terms of effort expended as well as in terms of problems caused. At present it's the lowest effort actors that are causing the highest number of problems. So an 80% (or even just a 20%) solution largely solves the practical problem faced by site operators. 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.
- XorNot 27d agoOkay but it's like no RAM at all. Thats the problem: you've got stupid bots causing a bunch of issues - these can be stopped. 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.
- fc417fc802 27d ago> And then regular users: who now can't really browse your site. 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.
- 27d ago
- vintagedave 27d ago> In my experience the kinds of people who run this exact combination of circumstances also tend to be the kind of people that have a wide variance in the level of kindness they display to the authors of open source programs that happen to be in their way. 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.
- skrebbel 27d agoCan you translate the American for me? “Wide variance”, does that they’re being assholes?
- afavour 27d agoWell a little translation would be that some are very kind, some are total assholes, and everything in between. But your reading is probably more accurate.
- strken 27d agoI think the literal interpretation is correct here. It's a way of saying "you, dear reader who runs this combination of things, might be very kind, but some of your compatriots will be unusually unkind and will turn up in my issue tracker and on my socials to complain".
- deleted 27d ago[deleted]
- skrebbel 27d agoThanks!
- st_goliath 26d ago> Can you translate the American for me? 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.
- arjie 27d agoAnubis is fine if you want to block bots that are bothering you, but I never understood why they don't have robots.txt at the root level too. I happily obey that for my private crawler. I suppose you don't want to duplicate implementations. Fair enough. I guess I should add an Anubis detector so I can just blacklist because that person clearly doesn't want bots.
- xena 27d agoOne of the standard library rules enables robots.txt passthrough by default. I can't control people not choosing to use it.
- arjie 27d agoThat makes sense, Xe, but you don't enable it at: - https://techaro.lol/robots.txt https://techaro.lol/robots.txt - https://anubis.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.
- deleted 27d ago[deleted]
- mitxela 27d agoIn this day and age, only good bots, the ones you actually want, obey robots.txt. You obtain no benefit by having a restrictive one.
- arjie 27d agoThat is true, but if you have Anubis you presumably do intend to `Disallow` all bots.
- 9cb14c1ec0 26d agoNot necessarily. You might want to rate limit bots instead of disallowing them.
- Aachen 27d agoIs there a place where I can try out if my browser is compatible? Easier to find out now than when I'm trying to get work done and a million websites now have it deployed On https://wasm-feature-detect.surma.technology 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)
- xena 26d agoIf you don't disable browser features for fun and/or sport, Chrome as of version 120 or later (or another browser of that vintage) will use the optimized flow.
- Aachen 25d agoBit sad that the default assumption is that everyone should use Google Chrome, even when explicitly asking for a compatibility tester. I'm asking because I don't use Google's browser
- stephenlf 27d agoComparatively, this is what it's like getting all of this working across browser versions, platforms, and so many other things: …<img not found/>… I don’t know what this picture was supposed to be, but a 404 demonstrates your point perfectly well.
- xena 27d agoRefresh, the Anubis docs site regenerates its cookie secret on every deploy as part of the "holy shit did I break everything?" verification step.
- kccqzy 27d agoHats off to Xe for spending so much time on backwards compatibility, especially the tidbit about targeting Chrome 66. 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.
- omoikane 27d ago> This means that adding one (1) to the difficulty of a challenge makes it 1024 (one thousand twenty-four) times as hard to solve in the worst case. I don't understand the units here, wouldn't a bit versus nibble difference make the multiplier 16, instead of 1024?
- xena 27d agoOops, there's your proof I didn't write this with AI! Fixing, sorry.
- miraline 27d agoThe interesting part is that bots mitigation is actually an economic problem. You don't need to make scraping impossible, you only need to just make it expensive enough so that abusive traffic stops being worth it.
- mitxela 27d agoScrapers scrape all sorts of nonsense, notably every possible git diff from git hosts. They clearly aren't concerned with rationality.
- XorNot 27d agoScrapers scrape every link they can find. 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.
- mitxela 27d agoThe main reason to have those links is for people to click on them. No sensibly programmed machine is scraping diffs from a git web front end.
- cyphar 27d agoNot to mention it is the least efficient representation of git commits. It seems a lot of people are unaware that git generates the diff representation you see with "git show" on the fly -- internally, commits are Merkle trees representing a snapshot of the repo file contents. As you said, if you actually want to interact with a remote git repo you'd do so with packfiles not diffs.
- novafunc 26d agoThat's exactly what's happening to the Linux git repository. The server constantly has mutltiple CPU cores dedicated to rendering git of various old, dead branches in html for scrapers.
- evmar 27d agoI think the Rust feature you’re looking for regarding recompiling the standard library is called “build-std”, that should be enough for you to search for it. (For similar reasons you also need that flag if you are trying to use Rust to build multithreaded wasm binaries, so it might come up for you!)
- anthoniks 27d ago[flagged]
- kevinbaiv 27d ago[flagged]
- kevinbaiv 27d ago[flagged]
- jezek2 27d agoGreat article, WebAssembly is such a good technology when you have use case for it. 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).
- initramfs 27d agothe enemy of my phone's temperature is my friend.
- Georgelemental 27d agoYou can use Rust's `wasm32v1-none` target to get baseline WASM with no extra target features. (This restricts you to `#[no_std]`, however.) https://doc.rust-lang.org/rustc/platform-support/wasm32v1-none.html https://doc.rust-lang.org/rustc/platform-support/wasm32v1-no...
- dspillett 27d ago> It also means that the "hey Claude vibeslop me a CUDA Anubis solver" route is on its way to being fundamentally dead. 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?
- Lyrex 27d agothe answer to this is in the post: where wasm is not available, he transpiles the wasm binary back to Javascript
- dspillett 27d agoAh I must have skipped by that bit. And presumably the memory-hard algorithm is CPU-easy enough that this won't be a problem. That leaves me wondering "why not just use a JS memory-hard routine in the first place, but maybe I've shouted over that too. I'll give TFA a reread later.
- trickypr 27d agoI think it is still compute-heavy if not compute-hard, and stuff like WASM SIMD makes it less compute heavy (not really available in JS). And also, for memory bound problems, you probably don't want the JS GC needing to clean up afterwards when WASM gives you that control.
- xena 27d agoI assume that SIMD acceleration is usable with WebCrypto, but I have no evidence either way. It's also not part of WebAssembly so there's that to consider too lol
- doctor_radium 27d agoI have every copy of Firefox here configured with webassembly disabled...because I don't tend to do what Webassembly was designed for, i.e. online games, video/audio editing, emulation, etc. [1] and because I dislike things running in the background without my knowledge. 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. [1] https://webassembly.org/docs/use-cases/ https://webassembly.org/docs/use-cases/
- xenafan1 27d ago[flagged]
- deleted 27d ago[deleted]
- adrianN 27d agoCustomizing the experience is what the web is all about. The browser is a user agent not an advertising platform for the corporate overlords.
- gavinsyancey 27d ago> You should really be running the most popular browser 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.
- evnp 27d agoThe second half of this post chronicles the author's Herculean efforts to make everything work well in the cases you describe. > 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.
- andai 27d agoTangential but all the pages I see protected by Anubis are just static HTML. But bot traffic is only harmful on dynamic pages right?
- tyre 27d agosome people don't want to be scrapped at all, and most bots ignore `robots.txt`
- trickypr 27d agoThe anubis docs website is used as an example of how anubis works. 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.
- xena 27d agoNot only is it an example, it specifically is one of the first things I use to test experimental features so I get data back instantly.
- account42 26d agoYou also need to pay for the traffic it takes to server you bot check scripts. And outside of big cloud companies, traffic is actually dirt cheap.
- JodieBenitez 27d agoI'm not a fan of Anubis for various reasons but the idea that bot traffic in only harmful with dynamic pages must die. CPU (yes, even to serve static pages) is not free, bandwidth is definitely not free. There's an idea that serving a static page to a bot has a marginal cost tending to zero, but it's never really zero and serving them by millions definitely has a cost. 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.
- browserforest 27d ago[flagged]
- Dwedit 27d agoHow much data does it download off the server to run the challenge? I've made some tiny webassembly binaries before, but I've never seen Rust generate something tiny.
- xena 27d agoIt's in the range of 32-40Ki before compression. After compression it gets to be completely negligible.
- shevy-java 27d agoSomehow WebAssembly does not want to become as popular as HTML, CSS or JavaScript. Very disappointing to see.
- adrian17 26d ago> something I was doing with my "strict MVP" build of Anubis' WASM wasn't in fact sticking to just the MVP features of WebAssembly 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-target-wasm32v1-unknown-unknown-or-a-set-of-new-targets-wasm32-v1-web-bindgen/22041 https://internals.rust-lang.org/t/can-we-have-either-a-new-t... [2] https://github.com/ruffle-rs/ruffle/pull/18397 https://github.com/ruffle-rs/ruffle/pull/18397 [3] See lines 55 and 117-127 in https://github.com/ruffle-rs/ruffle/blob/6890c618daab31533437e8c5cd5a5cb6e1ae5d6c/web/packages/core/tools/build_wasm.ts https://github.com/ruffle-rs/ruffle/blob/6890c618daab3153343...
- JoshTriplett 26d ago> Weirdly, the response from the rustc side (IIRC we also talked with one of the devs of wasm component on discord a bit) 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.) 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".
- rfgplk 26d ago> It also means that the "hey Claude vibeslop me a CUDA Anubis solver" route is on its way to being fundamentally dead. If they "vibeslopped" WebAssembly in Anubis they would have been done a year ago.
- H3l0s_T3k 26d ago[flagged]
- zamalek 26d ago> It also means that the "hey Claude vibeslop me a CUDA Anubis solver" route is on its way to being fundamentally dead. 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.
- yencabulator 26d agoenum error { no-error, Huh? Isn't that covered by `result`? Sounds like you should take that out and return `result<_, error>` from `write-verification`.
- tryka7966 26d ago[dead]
- htl 26d ago[flagged]
- keeda 26d agoI completely understand this change (esp. with regards to the change in type of problem) but I must appreciate the irony that this is essentially making it more efficent -- i.e. reducing costs -- to do a proof of work task, which aims to increase costs ;-)
- noobis_4433 26d agoGetting "double_spend" error while trying to access the blog. Anyone else?