I've noticed some confusion about prefix searches for Bitcoin puzzles in this thread, so I thought I'd give a thorough breakdown of how they work and why, for those "lucky hunters", prefix searches are currently the best choice since they give a solid edge when luck is a factor.
In this thread, it’s been pointed out that comparing exhaustive searches to sequential ones shows no real statistical advantage. But this can trip up a lot of "treasure hunters" because many of them don't have access to powerful GPU or CPU farms, making that comparison pretty much irrelevant for those at home. They really need to shift their thinking from trying to find the key at all costs when testing their luck, since exhaustively searching the entire space is pointless in both scenarios. With limited home computing power, it's pretty much impossible to scan the whole range.
That's where a probabilistic search strategy comes into play, boosting your chances of hitting the jackpot, since the prefix method is quicker and uses fewer resources, giving you a better shot at success in this "lottery".
If you're stuck with just a home PC or a couple of GPUs, your aim can't be "brute force" or "sequential search". You gotta focus on probabilistic efficiency. It’s not just about finding the solution, but between going sequentially or using prefixes, prefixes are statistically better and the ONLY LOGICAL CHOICE.
When you zero in on a limited space like 71 bits, it would take a home setup many years to cover the whole range. "Sequ
BITCOIN PUZZLE: THE PREFIX ISSUE
19 replies 349 views
Let's assume for a second this theory works. I'm not gonna bring up the countless arguments on how backward you're using some basic principles, so let's assume it works.
Now, let's implement it, but not in silly Python, but on a GPU, because you claim it is the rational choice.
It would take around 5 seconds for ANY coder on this forum to unfortunately have to tell you the sad truth:
Your code can not be parallelized, hence your entire "rational choice" essay is missing its point.
GPUs run the same code for multiple blocks of data, hence your entire "sequential vs prefix" chaotic comparison cannot even exist in that context, since:
1. There's no more sequential run of the same blocks in the same order.
2. There is no possibility to "break" / "return" in the middle of doing stuff.
I'm really not understanding why you continue with these ideas...
For this part, there is only one answer: Fallacy of Contempt
I left the script for your verification; you don't need to assume anything.
It's not a matter of 'assumption', it's applied probability mathematics.
The Python script is a demonstration, not the final implementation. Judging the strategy by the demonstration language is like rejecting a physics equation because you wrote it on paper instead of a blackboard.
The evidence in this context is compelling.
The same answer as before, this is a technical area, are you aware of this? Here, arguments are used to refute claims, not fallacies.
This is completely false. You're confusing the specific implementation of my Python script (which is sequential and didactic) with the underlying algorithm, which is highly parallelizable.
The strategy is based on dividing the space into small independent blocks (e.g., N=4096) that maintain 16^L ≈ N. This is inherently parallelizable.
You're assuming that prefix search depends on sequential execution and early returns between blocks. That's not the case.
Prefix strategy is about probability and mathematical efficiency, not sequential implementation.
Dividing the total problem into multiple small, independent problems that maintain the relationship 16^L ≈ N completely resolves the doubt about GPU parallelization.
- Multiple warps process different blocks simultaneously
- Each thread within a warp checks individual keys
- Prefix verification allows for thread-level early exit
When programming, you think about solutions; the Python script is only to demonstrate the theory (which is completely correct).
Any competent GPU programmer would understand that:
-Kernels are designed for small, independent blocks.
-The relationship 16^L ≈ N optimizes the use of warps.
-Branch divergence is manageable when L is small.
-Throughput determines efficiency, not sequential order.
I don't believe you ever wrote a kernel, otherwise you'd know how wrong all of these statements are (except the last one).
For EC, kernels are optimized for very large blocks, the larger the better. This increases throughput.
The smaller the block = the worse the speed.
Use of warps? I don't think you understand what warps are used for, and why they have no relevance to any of your theory. Warps are useful if you want to exchange data between threads, so I have zero clues why you even bring them up.
Branch divergence? Your theory is based on the fact that "prefix probabilities" are better exactly because you break out of the loops, when compared to the exact sequential order of traversal. Good luck doing that in a kernel!!!!!
You seem to not understand that for GPU, all the blocks run in parallel. Your comparison cannot even exist on a GPU because there is no "order of traversal" when you implement your code on a GPU.
Throughput does indeed directly indicate efficiency, and this is exactly why a fast kernel runs huge amounts of data (not small blocks), and has zero divergences.
But then again, I feel like I'm writing this up for nothing, since I'm well aware you can never change your opinions even when presented with hard facts...
Although your interpretation is valid, the same thing happens as with your other posts: it's generic content that doesn't apply to what we're discussing here (GET TO THE POINT!) because:
1- You're confusing CUDA 'thread blocks' with the 'search blocks' of my algorithm.
2- Warps are fundamental.
3- Divergence occurs when there's a match (1/4096 probability). In 99.98% of warps, there's zero divergence because no threads match. In the remaining 0.02%, one thread diverges, resulting in a minimal penalty. Basic statistics.
4- For example, if we use Feistel permutation, each thread block gets a unique random range. There's no 'sequentiality' to break; there's uniform probabilistic coverage.
I think that makes it pretty clear.
Yeah, it makes it clear that you have no idea what I was talking about, and that you don't have the slightest clue on what a kernel is, or how CUDA "threads" operate. I'll give you a hint: definitely NOT like a supercharged CPU. It's a different paradigm, which clearly you wont bother to even investigate as a principle, you'll just stick to your continued non-sense.
ChatGPT will not save you when having actual serious discussion with real people who actually solve real problems, you know.
This is NOT something specific to CUDA. I am saying it clearly: you cannot parallelize, in principle, something that DEPENDS on a sequential mode of operation. This includes the entire algorithm itself, irrelevant of block sizes, number of threads, or other practical things.
Your entire breakthrough has no meaning once you remove the "sequential in same order" stupid limitation (which we discussed a billion times why it should not be part of the comparison itself).
Why? Because I just explained on why you cannot parallelize something that contains the word "sequential". So, once you do your comparison and randomize the order, anyone can quickly see how there is ZERO benefits to the prefix version, and only the management overhead of running it.
Which makes it futile to use, since the "benefits" do not exist any more (not that they ever existed, but that's another discussion).
Please don't make me bring up the Scooby Doo algorithms that prove these facts...
Regarding your "you can't parallelize something sequential":
You're making the logical error of confusing implementation with algorithm. The concept of prefixes is probabilistic, not sequential. The 'sequentiality' in my Python demonstration was pedagogical, not fundamental.
Regarding your technical objection:
You say 'you can't parallelize' but you don't show a single line of code, a mathematical proof, or a benchmark. You just repeat GPU dogmas as if they were immutable physical laws.
Regarding your debate arguments:
Your argument boils down to: 'Since your demonstration used sequentiality, the concept is inherently sequential.' That's like saying you can't parallelize a binary search because the initial explanation uses a sorted array.
Refutation:
1. Feistel + Prefixes = Natural Parallelization: Each thread processes a unique range and checks prefixes independently.
2. Zero Dependencies: There is no communication between threads, no shared state.
3. Early Exit at the Thread Level: Each thread can terminate after verifying its key.
Instead of being envious of my ideas, I invite you to answer:
-What technical impossibility do you see in launching 10,000 threads, each verifying a different range?
-Why is it statistically not advantageous to perform 4,096 quick checks (using the relationship 16^L ≈ N) versus 4,096 full checks?
Until you answer these specific technical questions, you are just repeating unsubstantiated mantras. The mathematical principles remain; your understanding of parallelization needs to delve deeper than typical GPU use cases.
Seriously, I can't believe you're going to refute my arguments in this thread by going down technical lines that, if you look at them objectively, are 100% reasonable and applicable. It's not about the implementation; once you have the concept, a good developer knows how to handle it. I'm just throwing the idea out there (by the way, it's my original idea, like the binary database; this isn't an AI response, in case you deny my intelligence).
Keep your derogatory nonsense out of the technical forum. This isn't the Bitcoin Discussion area. Here, in case you don't know the rules, you can't attack with fallacies and generalizations. An idea that is, in principle, 100% correct, let go of my arm.
My probabilistic proof remains unrefuted. You've moved from discussing mathematics to discussing GPUs, which confirms that you have no objections to the central concept.
The principle 16^L ≈ N holds true regardless of whether it's executed on a CPU, GPU, or paper and pencil. Until you refute the mathematics, the conceptual debate is closed.
LMFAO...
So, first, you accepted that when doing exhaustive search, there is no advantage to any of the methods. Right?
And this thread is your attempt to claim that, when not doing an exhaustive search, there might be some whatever advantage to doing prefix early exits. Right?
Then you blabber on how technicals don't matter, since it's all conceptual, right?
Well, technically speaking, you have a technical algorithm to do some technical work. Otherwise, I might as well come up with a cosmological neural metaphysics algorithm to solve some classical NP problems, and simply throw a "if you can't implement it, that's not my problem, it's your problem".
This is the kinda level you bring the discussion to. I'm basically drawing you on why conceptually you can't apply a sequential algorithm ("a loop that breaks and exits" IS an sequential algorithm) to practical reality in the parallel realm (neither in theory nor in practice), and you refuse to accept that the practical reality (that, e.g., GPUs don't work even remotely close to how you think they do) is the way it is.
That being said, it's not really my problem at all to open your eyes. But since we're not in the garbage thread here, you might have some hard time convincing anyone that I'm wrong with whatever I said so far.
No need to proof something that's obvious by definition. Code for what? It is impossible to parallelize a sequential code, so it is impossible for such code to exist. You're asking for something that cannot exist.
There is no technical impossibility to launch a billion threads if you want. However, you have to wait for all of them to finish, which is equivalent to having them do the same amount of work each, or simply having a single one do some work, while the rest waste cycles doing nothin' but waste cycles doing nothing, because they have nothing to do. This might be the central piece you're missing: all threads do the same job all the time. "Breaks" and "exits" and divergence simply means that all the threads do the exact same thing, and if they can't do anything at some time, its called "wasted cycles" because, you know, they could have been put to good use, by, for example, doing something. Like, anything except having to wait for the other 99.99% of the threads to finish.
So you statistical non-sense that 0.03% divergence or whatever has no effect, is in reality, an execution armaggeddon: Because there is no concept of "breaking" or "returning from the thread". All threads finish at once before you can start doing anything else, like continuing the conceptual "sequential" algorithm. But maybe after you actually try to implement your "concept" and quickly being bite by the fact that you cannot actually implement it, because, well, the damn technicals don't allow you to, you'd understand why the technicals do not allow you to - it's because the conceptuals do not allow you to.
This will be my last response to you. If you remain trapped in this cycle of splitting hairs, any message that doesn't get to the point or lacks technical validity will be ignored:
1. My answer to your silly question about "exhaustive vs. non-exhaustive search":
No, my point is exactly the opposite. In a non-exhaustive search (the only viable one with limited resources), the prefix strategy offers a statistical advantage. Your false dichotomy reveals that you didn't understand the fundamental concept, even though I clarified at the beginning of the thread that this is only valid for "those who try their luck," that is, the majority with limited resources.
2. You're back with the endless loop of mentioning "sequential algorithm", which I've refuted in all my previous responses:
You're making the same mistake for the third time: you're confusing the proof with the concept. 'Early exit' doesn't require sequentiality; it's a Boolean condition independent of each thread.
3. Regarding your thoughts on the "practical reality of GPUs"
You say that 'GPUs don't work the way you think,' but:
-Where is your evidence that memcmp() cannot be parallelized?
-Where is your benchmark showing that checking prefixes is slower?
-Where is your proof that the relationship 16^L ≈ N is mathematically incorrect?
So far, you have only presented dogma, not data.
4. Why is your rebuttal illogical here?: Your objection boils down to: 'Since I explained the concept with a sequential loop in Python, the concept is inherently sequential.'
That's like saying multiplication is inherently sequential because you learned it from tables.
Answer this directly:
-Why is it statistically inefficient to perform N quick checks versus N full checks, when N ≈ 16^L?
If you can't answer this mathematically, I'll acknowledge that you're avoiding the substantive debate.
I knew it was a very bad idea to get involved, it's getting worse just as I imagined.
Better idea is to to stop getting involved
Your main issue is that your crackheads fan base is in the trash-piling main thread, not on the dev board.
Here, we are talking about serious things. Otherwise, no one has time to deal with your total ignorance on so, so, many layers. It's come to the point where I don't even think you actually pass your eye balls over all the words people write (like maybe not seeing the "not doing" before of "exhaustive", instead of getting it in the opposite way that a normal reader would get it). Oh well.
Good luck and health.
Also, memcmp does not fucking exist on GPUs, just like the conceptual multi-threading loop-escaping return-based concurrent logic you're obsessing over does not exist in a parallel context. What kind of benchmark of things that don't exist, done on fictional hardware that only exists in your conceptual fantasies, do you want? Do your own instead of asking extremely stupid questions on and forth. We are not your teachers.
You've crossed the line from technical debate to personal attack. Memcmp does exist in CUDA (__device__ int memcmp()), and your denial of verifiable facts demonstrates technical bad faith. This debate ended when you chose insults over argument.
You spout nothing but technical nonsense, ask utterly stupid questions, and 90% of your posts are intended to be contemptuous. In short, your personal attacks against me continue. Even though I asked you in the past not to interfere with my posts, that's another verifiable fact.
This says more about you than about me. Have a nice day!
It's impossible to have a "technical debate" when someone asks something ridiculous like parallelizing memcmp (which is a function whose result solely relies on the first different bit, not whether some random whatever bit is different) and is curious why prefix matching isn't faster when we only care about the prefix (when in fact, the full hash is computed anyway by that point, which is 99.999999999% of the work). Never mind that the entire block (of data, not of threads) was most likely batch inverted anyway. The cherry on the cake is: let's skip the rest of the execution cycles and idle the thread in which the prefix matches, because it's useless to do more computing, even though it would be exactly the same thing whether we finish the entire block or not (again: idle threads = wasted cycles, not faster speed!)
And yeah, there's no memcmp on GPUs. The function you've discovered is simply a wrapper code in a helper library, implementing a C++ standard header: it runs a simple while loop. But nvcc boils it down to stack-based SASS instructions that read data from the two sources state spaces (global, constant, or shared) and diverges when the difference is found; besides requiring predicates for exiting the loop. So - there is no hardware acceleration to do memory comparisons, just a very slow emulation. Good luck parallelizing something as trivial as 3 lines of C that returns depending on the first different byte, or whatever it was you wanted to do. Any 1st year CS student will tell you it's faster to do it linearly, and likely a nightmare to parallelize (and while surely possible, it's an absurd thing to do given the synchronization overhead required).
You are confusing classical computing architectures (CPU, RAM, concurrency) with SIMT concepts, and regular programming with HPC paradigms.
I gave you the benefit of the doubt by pretending that "let's assume that the theory holds". It is irrelevant what I care about the theory itself. if you can't keep up with the actual tech issues, stop circling around the concept's correctness, which is not relevant at all ever since we were under the assumption we got over that.
Feels like I'm talking against a wall for some time now, so byez.
It's simple: your inability to implement my proposal doesn't invalidate its capacity or validity. I'm not going to get bogged down in technicalities with you any longer because you're acting from a blind, imprecise, and arrogant perspective. You firmly believe that since your brain isn't capable of implementing it, you assume it's impossible. Therefore, it's absurd for me to continue debating with someone who thinks they have the absolute truth about everything. Anyone who reads this with awareness will know that the theory is correct, and once they understand it, they'll know how to implement it. And I'll leave you with this phrase: "If you can imagine it, you can program it." But I bet you won't let the matter drop here because you don't accept genuine ideas, and that's sad because you could use your knowledge, which I admit you possess, on something productive. God bless you; may He watch over your soul. To be like this, your life surely hasn't been easy.
Here, Let Me Parallelize Your Proposal For You.
RESULTS
So, 63% success rate, just as you predicted. However: 63% of the range was scanned.
It doesn't take a degree in nuclear physics to understand what that means.
This is like saying: if I scan 0.1% of the range, and I force 0.1% success, then this is much better than scanning 100% of the range when I want 100% of success. Mind blowing all the way !!!!
Here's the Scooby Doo upgrade to your algorithm (no prefix check required!):
Simply swap
with
or
Oh, wow, the EXACT SAME RESULTS and NO PREFIX CHECK REQUIRED. G E N I U S ! ! !
You are hurting anyone's intelligence and common sense with your continued dementia regarding prefixes.
You wasted enough of my time this time around. See you in 3 months when you bring back the same topic again the 7th time, with the same script, and with the same absurdities and attitude.
LOL, my prefix algorithm is based on a discard logic using real (not random) data. The advantage of my algorithm is that the probability of a correct guess (the prefix) is used as an efficient cryptographic filter (not fantasy like you're suggesting).
You're trying to replace a data-based cryptographic filter with blind, random discard. WOW, your math is brilliant! That's obviously a sham test, since the relationship N ≈ 16^L is an unbeatable probabilistic detection mechanism. You're simply simulating the discard effect without performing the cryptographic check that justifies the discard, which automatically puts my detection system ahead. Haha, GENIUS.
Calm down, bro. The more you look for the "but," the deeper you sink.
Confusing a data-driven cryptographic filter with a blind randomizer demonstrates a fundamental misunderstanding. My algorithm detects real patterns in the key space; yours just rolls dice. It's the difference between searching for a needle in a haystack with a magnet (my method) versus closing your eyes and grabbing a random straw (your 'improvement').
Then why are you providing a demonstration that does not do what you just said? It means you are deriving all of those dozens of results from bad data, does it not?
The results are identical. The results are based off on whatever results you initially wanted, or had, or predicted, or whatever. The results are the same results that you are basing everything also upon. So, why are the results a sham, but your initial results (identical results, finding identical things and solving the same identical problem) not a sham?
Well then, present the demonstration that does what you are saying. Do not expect somebody random to simply test out the replacement of your target match from a hash of some string with a hash of some EC point just to prove something you failed to prove.
Don't forget to test it against the Scooby Doo methodology (discarding randomly instead of checking whatever criteria) before you push the same script ahead for the 1836th time as a new topic!
The theory behind 16^L ≈ N remains sound. You claim the results are identical, but you ignore the fundamental difference:
1- My prefixes: Based on actual cryptographic properties
2- Your randomness: Based on blind statistical noise
Your 'discard random' method is a straw man: you create a weakened version of my idea and then declare victory when it doesn't work.
Implement a system that uses the actual distribution of prefixes in the Bitcoin keyspace to dynamically optimize the search. Prefixes can do this; your randomness cannot.
It's like saying that a doctor who diagnoses with blood tests is the same as a faith healer who guesses with dice. Both can 'get it right,' but one uses science and the other superstition.
You want to invalidate the theory by attacking a basic proof. Is it so difficult to accept that the point is that the 16^L ≈ N theory works and that's the purpose of the post, or to refute it mathematically, not by juggling deviations to CUDA or biased implementations of your own?"
Are you blind? I am not claiming the results are identical. The results ARE identical, did you ever bother to actually check for yourself?
#1 and #2 above are equivalent, because the cryptographic properties are exactly what ensures the blind statistical noise. That's why they were engineered, by design, to have no pattern. This is why these two lines of code do exactly the same thing:
So your magic magnet has exactly the same ratio of success as rolling the dice has.
By nature.
Because hashes are uniform, and you're basically trying for the billionth time to showcase some system where you want to convince idiots that there is even the slightest 0.00000000000000000000000001% bias in their uniformity.
There isn't any. Run the Scooby Doo version. Results are identical. Results are the same.
Let me repeat: you get the same results, for the same problem, without having to check prefixes. Or you can check whatever other prefix you want - the results are identical for any prefix you ever choose, or for whatever value you ever choose to pick, which has the probability of occurrence 1 in 4096.
It doesn't even need to be part of the hash at all - the results are the same, because, well, this is how math works maybe?
This should tell you something about a few things, but I'm really knocking on a closed door here (if not a totally barricaded door).
Wow, you're making a beginner's mistake in cryptography, confusing statistical uniformity with a lack of information. Yes, hashes are uniform, but when you're searching for a specific target, its prefix contains information correlated with the search.
You say 'hashes are uniform' as if this invalidates the prefixes. But it's precisely uniformity that makes 16^L ≈ N work perfectly. Uniformity guarantees that the probability of a prefix match is exactly 1/16^L, not that the prefixes are 'useless' as you mistakenly want to suggest due to your personal envy of my idea.
Until you understand the difference between correlation and randomness, any technical discussion is pointless.
Oh wow. Did you make a script that automatically replies with replacing everything that you don't actually read with "~snip~" and then add some blabber on how everyone's so stupid and ignorant on your glorious discoveries on cryptographic hashes actually being uniform (and hence, basically equivalent to a random number generator)?
Maybe try running the Scooby Doo version. I'm sure you can get your hands on a non-rigged Python to be sure the results ain't a sham.
I'll check back in a week or so again, not sure what your excuse is anyway to never bother running it, instead of continuing with the metaphorical crap that nobody cares about anyway.
Related topics
- Bitcoin Core displaying coins (UTXOs) in a new tab 13
- Are you in favor of BIP-110? Let's get a Bitcoin poll going. 0
- Erlay seems to have some issues here’s a better proposal for a bitcoin protocol without invites 3
- Ways to earn some sats by contributing to bitcoin core development 5
- Exploring the Potential and Challenges of a Kardashev-Scale Bitcoin Network 3
- What can I do to fix this Bitcoin Core error? 8