Bitcoin Forum
August 25, 2025, 07:41:27 PM *
News: Latest Bitcoin Core release: 29.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 ... 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 [366] 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 ... 578 »
  Print  
Author Topic: Bitcoin puzzle transaction ~32 BTC prize to who solves it  (Read 332282 times)
m1k1
Newbie
*
Offline Offline

Activity: 1
Merit: 0


View Profile
February 04, 2025, 04:36:07 PM
 #7301

I have been scalping this forum for 2 weeks now. I made an account just to tell ALL of you that there is no need to "out-math" one-another. Just do your way of finding the keys. Once you find them, brag about how you are the superior mega-mind that rules all of BTC. Just do the puzzles and don't trashtalk each other in the process. -M1
madogss
Newbie
*
Offline Offline

Activity: 53
Merit: 0


View Profile
February 04, 2025, 06:14:20 PM
 #7302


Thank you for the clarification. I wanted to understand the difference between a keyhant and a kangaroo. as for the fastest algorithm, I meant which is the fastest at the moment, not in theory.
 I have an idea and I would really like someone to tell me about kangaroo's work. need the core of the algorithm and not much information to change the jumping mechanics.  also need an algorithm for calculating the bitcoin address.
 Can you help me ?

How are the kangaroo starting points calculated? what data (values) does the program use? what value is the public key converted from?

You will want to look at papers published for a deeper understanding or look at the kangaroo discussions on here but for basic understanding kangaroo has 2 types tames and wilds together they are a herd usually 1 tame and 2 wilds you can look at jeanlucpons or retiredC's readme for what they chose, tames jump to a random point then increment sequentially recording every point they land on while wilds jump from random point to random point not recording anything until they run into a tame then they hash and if the public key matches wow you found the key but if not then you get a dead kangaroo.
albert0bsd
Hero Member
*****
Offline Offline

Activity: 1120
Merit: 718



View Profile
February 04, 2025, 06:53:04 PM
 #7303

How are the kangaroo starting points calculated? what data (values) does the program use? what value is the public key converted from?

Kangaroo is faster trustme, algorithm is difficult to explain at first glance.

As some other users explain before

Tame kangaroos jumps pseudo-random but deterministic from a know point like Start Base range (0x7......) or any other know value near our target publick key, so each time that a DP point (Distinguished Point with some amount of bits in ZERO in the X coordinate) is found we know its exact value.

In the other hand Wild kangaroos jumps pseudo-random but deterministic from an UN-know point like the target key, so each DP value that we found we only knows its relative value to our target key.

So the bigger dataset for tame or wild DP we have more probabilities that one item in one dataset is found in the another dataset, one that you found a match you automatically can translate all the Unknown DP into its real value this include the TARGET UNKNOWN PUBLIC KEY.

According to the birthday paradox such collision must occur soon of later so you with math/statics can calculate what are those odds for each new found value. Those odds grown exponentially.

Remember in the original birthday paradox in a room with 25 random people the probabilities that two of them have the same day of birthday are near 50%.
Geshma
Newbie
*
Offline Offline

Activity: 18
Merit: 0


View Profile
February 05, 2025, 12:01:02 AM
 #7304

Therefore, due to the uniform distribution of hashes, it is less likely that we will find a prefix close to another one.

A probabilistic software using a previous prefix as a reference point, where you skip millions of keys and where a coincidence or collision is less likely, is not a waste of time as you suggest. Instead, it would be another probabilistic option. In this case, where sequential brute force is exponentially demanding, a probabilistic search suggests a better strategy.

I'm not preaching anything that's not in a 9th grade high school math book where I live.

Did you read the definition of a uniform distribution? It's a random oracle where anything can happen (with an equal chance of course, which is all I'm bragging about for the last 10 posts here), not something that will ever follow any kind of even-spaced value-to-slot allocations, no matter how you look at it, analyze it, or whatever you want to do with it. The "margin of error" when trying to predict anything about it is simply equal to keeping track of skipped key ranges, which is where everyone that attempts to use this "theory" will end up to, once they find that they either have too many or too few prefixes found.

Just because the probabilities are all equal, does not mean that you will end up with an equal amount of same values over some microscopic sample size (like any 2**66 sample out of comb(2**160, 2**66), or rather, out of (2**160) ** (2**66) possibilities, since any hash has an equal probability to occur).

It is exactly the same principle why, if you throw a coin 100 times, the chances to get a 50/50 is extremely unlikely, even if it has the highest chances. Or isn't a coin flip an uniform distribution of 50/50? Why wouldn't RIPEMD-160 be the same, if you scan some range, and only count how many times the first bit is 1, there's basically 0% chances to have anywhere near the same amount of hashes that start with a 0 (the difference will be a really really big number, not close to zero, and there's a 99.9% confidence for this really big difference to occur). Only when the number of flips (number of hashes) goes to infinity, will you ever have an exact ratio of 50% 0s (heads) and 50% 1s (tails). Up to that  point, the difference (in absolute value) will almost certainly increase further and further, perhaps at some times swapping whether the 0s or the 1s start to go ahead. It's all a probability race based on equal chances of possible occurrences.

Thanks for the lesson that 2 bytes can hold 65536 distinct values.

Bitcoin block 756951 has the lowest SHA256 hash to date: 0000000000000000000000005d6f06154c8685146aa7bc3dc9843876c9cefd0f. Generating a hash this low has the same likelihood as flipping a coin 97 times in a row and it landing on tails every time.
karrask
Newbie
*
Offline Offline

Activity: 38
Merit: 0


View Profile
February 05, 2025, 03:05:06 AM
 #7305

How are the kangaroo starting points calculated? what data (values) does the program use? what value is the public key converted from?

Kangaroo is faster trustme, algorithm is difficult to explain at first glance.

As some other users explain before

Tame kangaroos jumps pseudo-random but deterministic from a know point like Start Base range (0x7......) or any other know value near our target publick key, so each time that a DP point (Distinguished Point with some amount of bits in ZERO in the X coordinate) is found we know its exact value.

In the other hand Wild kangaroos jumps pseudo-random but deterministic from an UN-know point like the target key, so each DP value that we found we only knows its relative value to our target key.

So the bigger dataset for tame or wild DP we have more probabilities that one item in one dataset is found in the another dataset, one that you found a match you automatically can translate all the Unknown DP into its real value this include the TARGET UNKNOWN PUBLIC KEY.

According to the birthday paradox such collision must occur soon of later so you with math/statics can calculate what are those odds for each new found value. Those odds grown exponentially.

Remember in the original birthday paradox in a room with 25 random people the probabilities that two of them have the same day of birthday are near 50%.
Thank you for your reply.
 several more questions immediately arise - is it possible to write an algorithm so that only tamed kangaroos participate in the process?(maybe someone has such a version? Can you share it?) and jumped only at the set points?
 immediately checking for a match.
WanderingPhilospher
Sr. Member
****
Offline Offline

Activity: 1400
Merit: 271

Shooters Shoot...


View Profile
February 05, 2025, 03:11:39 AM
 #7306

How are the kangaroo starting points calculated? what data (values) does the program use? what value is the public key converted from?

Kangaroo is faster trustme, algorithm is difficult to explain at first glance.

As some other users explain before

Tame kangaroos jumps pseudo-random but deterministic from a know point like Start Base range (0x7......) or any other know value near our target publick key, so each time that a DP point (Distinguished Point with some amount of bits in ZERO in the X coordinate) is found we know its exact value.

In the other hand Wild kangaroos jumps pseudo-random but deterministic from an UN-know point like the target key, so each DP value that we found we only knows its relative value to our target key.

So the bigger dataset for tame or wild DP we have more probabilities that one item in one dataset is found in the another dataset, one that you found a match you automatically can translate all the Unknown DP into its real value this include the TARGET UNKNOWN PUBLIC KEY.

According to the birthday paradox such collision must occur soon of later so you with math/statics can calculate what are those odds for each new found value. Those odds grown exponentially.

Remember in the original birthday paradox in a room with 25 random people the probabilities that two of them have the same day of birthday are near 50%.
Thank you for your reply.
 several more questions immediately arise - is it possible to write an algorithm so that only tamed kangaroos participate in the process?(maybe someone has such a version? Can you share it?) and jumped only at the set points?
 immediately checking for a match.
You can run tames, by themselves, to "prebuild" your hashtable or whatever is collecting and storing your points and distances. However, eventually you have to run wilds and check for a collision. A tame and wild point must match, to solve the key. And in some variants, a wild and wild points can match and you can solve the key. But running tames only is just taking any private key and multiplying it by G. So if you find a match, it means you landed on the same point twice, but you already knew the distance, so it doesn't help you any for solving the key.
karrask
Newbie
*
Offline Offline

Activity: 38
Merit: 0


View Profile
February 05, 2025, 03:35:52 AM
Last edit: February 05, 2025, 08:41:00 PM by Mr. Big
 #7307


Thank you for the clarification. I wanted to understand the difference between a keyhant and a kangaroo. as for the fastest algorithm, I meant which is the fastest at the moment, not in theory.
 I have an idea and I would really like someone to tell me about kangaroo's work. need the core of the algorithm and not much information to change the jumping mechanics.  also need an algorithm for calculating the bitcoin address.
 Can you help me ?

How are the kangaroo starting points calculated? what data (values) does the program use? what value is the public key converted from?

You will want to look at papers published for a deeper understanding or look at the kangaroo discussions on here but for basic understanding kangaroo has 2 types tames and wilds together they are a herd usually 1 tame and 2 wilds you can look at jeanlucpons or retiredC's readme for what they chose, tames jump to a random point then increment sequentially recording every point they land on while wilds jump from random point to random point not recording anything until they run into a tame then they hash and if the public key matches wow you found the key but if not then you get a dead kangaroo.
thanks for your reply. in my opinion, this is not a very reasonable approach. I wrote the code about two weeks ago. I looked at it and didn't like something about it, so I abandoned it. and a couple of days ago I remembered about him and came up with an idea. I didn't refine much, I checked on small ranges (up to 40 bits, since the speed is very low) - the result surprised me. if I tell you about the values I received, none of you will believe it. and it doesn't make sense yet. I'm currently looking for someone to help me write or give a kangaroo version so that I can modify the jumping math.



How are the kangaroo starting points calculated? what data (values) does the program use? what value is the public key converted from?

Kangaroo is faster trustme, algorithm is difficult to explain at first glance.

As some other users explain before

Tame kangaroos jumps pseudo-random but deterministic from a know point like Start Base range (0x7......) or any other know value near our target publick key, so each time that a DP point (Distinguished Point with some amount of bits in ZERO in the X coordinate) is found we know its exact value.

In the other hand Wild kangaroos jumps pseudo-random but deterministic from an UN-know point like the target key, so each DP value that we found we only knows its relative value to our target key.

So the bigger dataset for tame or wild DP we have more probabilities that one item in one dataset is found in the another dataset, one that you found a match you automatically can translate all the Unknown DP into its real value this include the TARGET UNKNOWN PUBLIC KEY.

According to the birthday paradox such collision must occur soon of later so you with math/statics can calculate what are those odds for each new found value. Those odds grown exponentially.

Remember in the original birthday paradox in a room with 25 random people the probabilities that two of them have the same day of birthday are near 50%.
Thank you for your reply.
 several more questions immediately arise - is it possible to write an algorithm so that only tamed kangaroos participate in the process?(maybe someone has such a version? Can you share it?) and jumped only at the set points?
 immediately checking for a match.
You can run tames, by themselves, to "prebuild" your hashtable or whatever is collecting and storing your points and distances. However, eventually you have to run wilds and check for a collision. A tame and wild point must match, to solve the key. And in some variants, a wild and wild points can match and you can solve the key. But running tames only is just taking any private key and multiplying it by G. So if you find a match, it means you landed on the same point twice, but you already knew the distance, so it doesn't help you any for solving the key.
need a kangaroo that will receive a public key and compare it with each jump. don't need tables, DP, etc.
albert0bsd
Hero Member
*****
Offline Offline

Activity: 1120
Merit: 718



View Profile
February 05, 2025, 03:51:48 AM
Merited by WanderingPhilospher (1)
 #7308

need a kangaroo that will receive a public key and compare it with each jump. don't need tables, DP, etc.

what you described it isn't kangaroo it i just regular cracking search and it doesn't have the square root of N benefit of birthday paradox.

You need tables full of DP to make it more efficient and to be able to use the square root of N that bring the Kangaroo algorithm by the birthday paradox.
karrask
Newbie
*
Offline Offline

Activity: 38
Merit: 0


View Profile
February 05, 2025, 04:12:08 AM
 #7309

need a kangaroo that will receive a public key and compare it with each jump. don't need tables, DP, etc.

what you described it isn't kangaroo it i just regular cracking search and it doesn't have the square root of N benefit of birthday paradox.

You need tables full of DP to make it more efficient and to be able to use the square root of N that bring the Kangaroo algorithm by the birthday paradox.
yes, you are right (with some caveat). probably, the easiest option would be to upgrade the keyhant (I thought about it but came to the conclusion that kangaroo is a more interesting option). could you tell me where in the code to upgrade the random to suit my mathematics, so as not to touch the basic logic of the program in any way?
cctv5go
Newbie
*
Offline Offline

Activity: 47
Merit: 0


View Profile
February 05, 2025, 09:08:05 AM
 #7310

#67 You can solve puzzles using mathematical methods, only requiring 58 to the power of 7 Calculation.
WanderingPhilospher
Sr. Member
****
Offline Offline

Activity: 1400
Merit: 271

Shooters Shoot...


View Profile
February 05, 2025, 02:37:14 PM
Merited by kTimesG (1)
 #7311

#67 You can solve puzzles using mathematical methods, only requiring 58 to the power of 7 Calculation.

Go get it!
bibilgin
Newbie
*
Offline Offline

Activity: 249
Merit: 0


View Profile
February 06, 2025, 07:41:34 AM
 #7312

Yes friends, CREATOR last entered the forum on January 26, 2025 and continues only as a spectator.

Good work to everyone, good luck.
Small Wink
Akito S. M. Hosana
Jr. Member
*
Offline Offline

Activity: 392
Merit: 8


View Profile
February 06, 2025, 09:59:34 AM
 #7313

#67 You can solve puzzles using mathematical methods


Theoretically, if someone could successfully use remote viewing to perceive hidden information (such as a private key range), they could unlock Bitcoin puzzles.  . Grin
mochi86_
Member
**
Offline Offline

Activity: 67
Merit: 10

,':D PERSONAL TEXT!!


View Profile
February 06, 2025, 03:53:23 PM
 #7314

Hello guys, for serious and interested people only, I found the private key for wallet number 68, but I cannot withdraw the coins due to fear of them being stolen. I want to sell the private key to the highest bidder and I am ready for any proof that I own the key. My English is not good Cheesy
Ahhh, we got another scammer out in the open... What to do with scums like you...

1BNQgpD9bWPeP2Sg3Nc6uHfqRUCfLidiya

Dono would def be generous Cheesy
Geshma
Newbie
*
Offline Offline

Activity: 18
Merit: 0


View Profile
February 06, 2025, 09:54:26 PM
 #7315

#67 You can solve puzzles using mathematical methods, only requiring 58 to the power of 7 Calculation.

Go get it!

its a bit mumbled up , wanted your perspective  , and not working also as intended , be gentle:

import os
import math
import time
import bisect
from gmpy2 import gmpy2

# --------------------------
# Field and Group Operations (unchanged)
# --------------------------

class S:  # Scalar field (secp256k1 order)
    N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
    gmp_N = gmpy2.mpz(N)

    @staticmethod
    def add(a, b):
        return gmpy2.mod(gmpy2.add(a, b), S.gmp_N)

    @staticmethod
    def sub(a, b):
        return gmpy2.mod(gmpy2.sub(a, b), S.gmp_N)

    @staticmethod
    def mul(a, b):
        return gmpy2.mod(gmpy2.mul(a, b), S.gmp_N)

class F:  # Prime field (secp256k1 field)
    P = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
    gmp_P = gmpy2.mpz(P)
    gmp_P4 = gmpy2.mpz((P + 1) // 4)

    @staticmethod
    def add(a, b):
        return gmpy2.mod(gmpy2.add(a, b), F.gmp_P)

    @staticmethod
    def sub(a, b):
        return gmpy2.mod(gmpy2.sub(a, b), F.gmp_P)

    @staticmethod
    def mul(a, b):
        return gmpy2.mod(gmpy2.mul(a, b), F.gmp_P)

    @staticmethod
    def pow(b, e):
        return gmpy2.powmod(b, e, F.gmp_P)

    @staticmethod
    def sqrt(a):
        return gmpy2.powmod(a, F.gmp_P4, F.gmp_P)

    @staticmethod
    def inv(a):
        return gmpy2.invert(a, F.gmp_P)

# -----------------
# Point Operations (unchanged)
# -----------------

class Point:
    def __init__(self, x, y, parity=-1):
        self.x = x
        self.y = y if parity == -1 else self.calc_y(x, parity)

    def __eq__(self, other):
        return self.x == other.x and self.y == other.y       

    @classmethod
    def uncompress(cls, s):
        parity, xh = int(s[:2], 16), s[2:]
        if parity not in [2, 3]:
            raise ValueError("Invalid parity byte")
        return Point(int(xh, 16), 0, parity % 2)

    @staticmethod
    def calc_y(x, parity):
        y_sq = F.add(F.pow(x, 3), 7)
        y = F.sqrt(y_sq)
        return y if (y % 2) == parity else F.P - y

class JPoint:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

    def affine(self):
        iz = F.inv(self.z)
        iz2 = F.mul(iz, iz)
        return Point(F.mul(self.x, iz2), F.mul(self.y, F.mul(iz, iz2)))

    def double(self):
        if self.y == 0:
            return JPoint(0, 0, 0)
       
        y2 = F.mul(self.y, self.y)
        s = F.mul(4 * self.x, y2)
        m = F.mul(3 * F.mul(self.x, self.x), F.mul(self.z, F.mul(self.z, self.z)))
       
        x = F.sub(F.mul(m, m), F.mul(2, s))
        y = F.sub(F.mul(m, F.sub(s, x)), F.mul(8, F.mul(y2, y2)))
        z = F.mul(2 * self.y, self.z)
        return JPoint(x, y, z)

    def add(self, q):
        if self.y == 0:
            return q
        if q.y == 0:
            return self

        z1z1 = F.mul(self.z, self.z)
        z2z2 = F.mul(q.z, q.z)
        u1 = F.mul(self.x, z2z2)
        u2 = F.mul(q.x, z1z1)
        s1 = F.mul(self.y, F.mul(q.z, z2z2))
        s2 = F.mul(q.y, F.mul(self.z, z1z1))

        if u1 == u2:
            return self.double() if s1 == s2 else JPoint(0, 0, 1)
           
        h = F.sub(u2, u1)
        r = F.sub(s2, s1)
        h2 = F.mul(h, h)
        h3 = F.mul(h, h2)
       
        x = F.sub(F.sub(F.mul(r, r), h3), F.mul(2, F.mul(u1, h2)))
        y = F.sub(F.mul(r, F.sub(F.mul(u1, h2), x)), F.mul(s1, h3))
        z = F.mul(h, F.mul(self.z, q.z))
        return JPoint(x, y, z)

    def mul(self, n):
        result = JPoint(0, 0, 1)
        current = self
       
        while n > 0:
            if n % 2 == 1:
                result = result.add(current)
            current = current.double()
            n //= 2
        return result

class Group:
    G = Point(
        0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,
        0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
    )

    @staticmethod
    def mul(p: Point, k):
        return JPoint(p.x, p.y, 1).mul(k).affine()

    @staticmethod
    def add(p: Point, q: Point):
        if p.x == q.x:
            raise ValueError("Points with same x-coordinate")
        m = F.mul(F.sub(p.y, q.y), F.inv(F.sub(p.x, q.x)))
        x = F.sub(F.sub(F.mul(m, m), p.x), q.x)
        y = F.sub(F.mul(m, F.sub(p.x, x)), p.y)
        return Point(x, y)

# ------------------
# Enhanced Kangaroo Algorithm with Adjustments
# ------------------

class Kangaroo:
    def __init__(self, start, end, dp_bits=14, herd_size=1024):
        # 1. Initialize critical range parameters FIRST
        self.start = start
        self.end = end
        self.range = end - start + 1
        self.interval_size = self.range  # Key parameter
        self.max_intervals = 1  # Now properly defined

        # 2. Store target reference for herd initialization
        self.target = None  # Will be set in solve()

        # 3. Configure jumps and DPs
        self.dp_mask = (1 << dp_bits) - 1
        self.herd_size = herd_size

        self.tame_points = []  # Initialize tame_points here
        self.wild_points = []  # Initialize wild_points here

        # 4. Initialize jump parameters. This is the code change.
        self.base_alpha = self.herd_size * math.sqrt(self.range) / 2
        self.current_alpha = self.base_alpha
        self.adaptation_interval = 1000  # How often to adjust alpha
        self.jump_history = []  # To track jumps

        self._update_jump_table()  # Initialize jumps

    def _update_jump_table(self):
        """Generate geometrically increasing jumps"""
        self.jump_dists = []
        max_step = int(self.current_alpha)
        step = 1
        while len(self.jump_dists) < 12 and step <= max_step:
            self.jump_dists.append(step)
            step *= 4
        # Add final large step to prevent stagnation
        self.jump_dists.append(max_step)
        self.jump_points = [Group.mul(Group.G, d) for d in self.jump_dists]

    def _search_interval(self, interval):
        """Fixed initialization using stored target"""
        # Tame kangaroos spread through range
        step_size = self.range // self.herd_size
        tame = [Group.mul(Group.G, self.start + i*step_size)
               for i in range(self.herd_size)]
        t_dist = [self.start + i*step_size for i in range(self.herd_size)]
       
        # Wild kangaroos start from TARGET + offsets
        wild = [Group.add(self.target, Group.mul(Group.G, i))
               for i in range(self.herd_size)]
        w_dist = [i for i in range(self.herd_size)]
       
        return tame, t_dist, wild, w_dist

    def _adapt_jump_strategy(self):
        if len(self.jump_history) >= self.adaptation_interval:
            avg_jump = sum(self.jump_history[-self.adaptation_interval:]) / self.adaptation_interval
            if avg_jump < self.current_alpha / 4:
                self.current_alpha = max(self.base_alpha / 4, self.current_alpha * 0.9)
            else:
                self.current_alpha = min(self.base_alpha * 4, self.current_alpha * 1.1)
            self._update_jump_table()
            self.jump_history = []

    def _update_jump_table(self):
        self.jump_dists = []
        max_step = max(1, int(self.current_alpha))
        # Generate jumps optimized for small steps
        a, b = 1, 1
        while len(self.jump_dists) < 8 and a <= max_step:
            self.jump_dists.append(a)
            a, b = b, a + b
        # Fill remaining with 1s to ensure coverage
        while len(self.jump_dists) < 8:
            self.jump_dists.append(1)
        self.jump_points = [Group.mul(Group.G, d) for d in self.jump_dists]

    def _search_interval(self, interval):
        offset = self.start + interval * self.interval_size
        P = Group.mul(Group.G, offset)
        v = max(1, self.interval_size // self.herd_size)
       
        tame = []
        wild = []
        t_dist = []
        w_dist = []
        for i in range(self.herd_size):
            tame_pos = offset + i * v
            tame.append(Group.mul(Group.G, tame_pos))
            t_dist.append(tame_pos)
            wild_pos = (tame_pos + (self.range // 2)) % S.N  # Wild starts offset by half range
            wild.append(Group.mul(Group.G, wild_pos))
            w_dist.append(wild_pos)
        return tame, t_dist, wild, w_dist

    def solve(self, target):
        self.target = target  # Critical: store target reference
        try:
            for interval in range(self.max_intervals):  # Now works
                tame, t_dist, wild, w_dist = self._search_interval(interval)
                ops = 0
                start_time = time.time()
               
                while True:
                    # Process tame herd
                    for i in range(self.herd_size):
                        if (tame.x & self.dp_mask) == 0:
                            parity = tame.y % 2
                            entry = (tame.x, parity)
                            idx = bisect.bisect_left(self.tame_points, entry)
                            if idx < len(self.tame_points) and self.tame_points[idx][:2] == entry:
                                candidate = S.sub(t_dist, self.tame_points[idx][2])
                                if Group.mul(Group.G, candidate) == target:
                                    return candidate
                            bisect.insort(self.tame_points, (tame.x, parity, t_dist))
                       
                        j = tame.x % len(self.jump_dists)
                        tame = Group.add(tame, self.jump_points[j])
                        t_dist = S.add(t_dist, self.jump_dists[j])
                        self.jump_history.append(self.jump_dists[j])

                    # Process wild herd
                    for i in range(self.herd_size):
                        if (wild.x & self.dp_mask) == 0:
                            parity = wild.y % 2
                            entry = (wild.x, parity)
                            idx = bisect.bisect_left(self.wild_points, entry)
                            if idx < len(self.wild_points) and self.wild_points[idx][:2] == entry:
                                candidate = S.sub(w_dist, self.wild_points[idx][2])
                                if Group.mul(Group.G, candidate) == target:
                                    return candidate
                            bisect.insort(self.wild_points, (wild.x, parity, w_dist))
                       
                        j = wild.x % len(self.jump_dists)
                        wild = Group.add(wild, self.jump_points[j])
                        w_dist = S.add(w_dist, self.jump_dists[j])
                        self.jump_history.append(self.jump_dists[j])

                    ops += 2 * self.herd_size
                    self._adapt_jump_strategy()
                   
                    if time.time() - start_time > 2:
                        print(f"Interval {interval} | Ops: {ops:,} | Tame: {len(self.tame_points)} | Wild: {len(self.wild_points)}")
                        start_time = time.time()
       
        except KeyboardInterrupt:
            print("\nSearch halted by user")
            return None

# ----------
# Interface
# ----------

def run_puzzle(start, end, pubkey_hex):
    try:
        target = Point.uncompress(pubkey_hex)
        kang = Kangaroo(start, end)
       
        print(f"Searching range {hex(start)}-{hex(end)} ({(end-start+1):,} keys)")
        start_time = time.time()
        result = kang.solve(target)
       
        if result is not None:
            calc_point = Group.mul(Group.G, result)
            print(f"\nFound candidate: {hex(result)}")
            print(f"Target X:   {target.x:064x}")
            print(f"Calculated X: {calc_point.x:064x}")
            print(f"Y Parity Match: {calc_point.y%2 == target.y%2}")
            if calc_point.x == target.x:
                print("Full Verification:", calc_point.y == target.y)
            else:
                print("Warning: False positive detected")
        else:
            print("\nNo valid solution found")
       
        print(f"Time elapsed: {time.time()-start_time:.2f}s")
   
    except KeyboardInterrupt:
        print("\nOperation cancelled by user")

if __name__ == "__main__":
    run_puzzle(0x1000000, 0x1ffffff, "03057fbea3a2623382628dde556b2a0698e32428d3cd225f3bd034dca82dd7455a")
jmr270492
Newbie
*
Offline Offline

Activity: 4
Merit: 0


View Profile
February 06, 2025, 09:59:07 PM
 #7316

Code:
1BY8GQbnu1DPVT6c66yLZRvMRcugu41i4v 0000000000000000000000000000000000000000000000062AD2731CC3285DB2 02c61aaba6f00abaf9f6e81980854e431cb151b62cfb18a6451bac0425536583f8
1BY8GQbnu6v7Ux8krR8URwodBWm1SawLnr 0000000000000000000000000000000000000000000000062A9AA2EB577A9FF8 02ffe1a9833ba7f64449c9867523c3604f1cffb94d92ae9431960750976b391277
1BY8GQbnu8jSXMYE4o2ZfzFSv3D7fX7BGC 000000000000000000000000000000000000000000000005DA0791C09C3BBAC4 03d2bc63c43f738f037ca8909e4c56af9dbb9a74b1b87aca7b24673513e4bb49ef
1BY8GQbnu9Pr3u4dLhGZo2vCrQswS8fZTz 0000000000000000000000000000000000000000000000050EF4226B89DF60AA 03b5694a18d5062ef993d4d2fde1a04d7de88444577a20ebe63444adfbb5bb3c67
1BY8GQbnub1JKjz49sq9NhHUXVjujDNXFp 000000000000000000000000000000000000000000000005FF9A24218EA189F4 0265d1cf27d8c5beaf6ed7500dd4b99cda9925c4138d0319f99f33823a527bbbaf
1BY8GQbnucXmpBfXmSaqrYfmyE8v2dh2uA 0000000000000000000000000000000000000000000000051BC8D6E6A141E38D 037f23d18e52e5318384001f775a8d9f92653c52998312f708306e6273c7f81a87
1BY8GQbnue3etZWtCGRAq2sNxb1oKc7xfg 000000000000000000000000000000000000000000000006C6E4771CADA99067 027760bd1a5af21305e9f51e56df7af4061cd22ed7d08c59de1ccdc57c5777bd9e
1BY8GQbnue434d7cijyPdiWLDamPoyi1yK 000000000000000000000000000000000000000000000006A7CCAFDBC7A995E4 02451008796460eef7c4172cbb5caffa95ed45b8560c016a758ee287249387c814
1BY8GQbnue6NCadU8vgWREVG1Gf1MM7eCF 000000000000000000000000000000000000000000000007C17E67184115DCEE 0207680c9dacc3de3810afe8d80a2a567c5fe579e31d6ce48707bf5dff6299adac
1BY8GQbnue8fiqpmW1mqG41erPtc5XjMAc 000000000000000000000000000000000000000000000007D5333D01A24D9BA9 033c95c14e56020dbbcacb61af076ce917a3f24f8ff6842e9178aade583bd807b9
1BY8GQbnue9Yaz5TGy6emmdVaxxYZyddRs 000000000000000000000000000000000000000000000006D37D8C32C3209F74 037dcf4167e3e78874bb9c2e711f473877a19ddaf245b9abf02b0b6a00910fadfb
1BY8GQbnueaZQ76t2p3popYQf4rNZjfSFj 000000000000000000000000000000000000000000000006F4827B94832CCF61 03c8151b7bb0ea4dd0c09a40d41f4bf97856099673bf026f30b7cdfeeb9fba75a1
1BY8GQbnuebKeVxroLmTf3m8yoaoQoUWvj 000000000000000000000000000000000000000000000006A27D573DC79B987B 02ad90f77ff75e8ad32bf8d68d5b9a689c2d9f06e41dd349ed8cef566589b66692
1BY8GQbnueCM6F1GudPP2PKTjX69VuQye4 000000000000000000000000000000000000000000000006CA44581386C205C0 0375576b39d4d2a25ac5f29394f261b360b459fbc8b3d794ad5f68c5466a3bff82
1BY8GQbnuedFpHKVZGpp39JZHHJai1qsgv 000000000000000000000000000000000000000000000006F478EFE60D572639 0217d05e732951afdbd0d7c137a3956930874a984abf21414bb2678ea794d8352d
1BY8GQbnueFiSxP1ephNt5cbvoe1vV52Hc 000000000000000000000000000000000000000000000006E29F8EB6D9946E10 023bf07862101341bbdc5a36f8c63b8ae941d2b4b9544278d6a753471462315353
1BY8GQbnuefqJQFDwrUY8pgs2JL2gzoQTY 00000000000000000000000000000000000000000000000774B84F0CF16827E8 02923b77b7f3390542b79a50e91f669c1132cf7cb829694af32c6f2bf01ed94311
1BY8GQbnueH6GRnHuR6T5Vui7F4cWtNDsi 000000000000000000000000000000000000000000000006E69B16156DE1522F 035d175816b836e21f615cd63fe2f0a5358a408a500131ffe0f5b203c69ce6e419
1BY8GQbnuehm3JqjMvwApGCCYCdm4SbHYG 000000000000000000000000000000000000000000000006F82ECCA251ACF143 03e8d65a493e96d796d8d7b8871040ecc6edb5111c522c8bdb207564612a7ae503
1BY8GQbnuehTBbfGuPMdJmLLgmsGC4Waz8 000000000000000000000000000000000000000000000006E712ABE58B3CE66E 0227aca285de44363b791df1aedeebd9b4fac3e50148de1fc3bef4fad99a5fff8f
1BY8GQbnuejxhriX1t7ejzrx9aY4eHUmaB 00000000000000000000000000000000000000000000000690CF1E19D4583D30 02014df132c5e06e589feb122ca4db019599aa670b7650cc04c2de198862b4dbdb
1BY8GQbnuek1vkFNHgPEzdvGhnJoCFL55W 000000000000000000000000000000000000000000000006BAD029572FA842A2 03be753cc0e6fe19a4fe669549525814a1afca2abbdb652bcc394a815c458fae48
1BY8GQbnuem9nt4b6zSWBS78hcSnXR1o1p 00000000000000000000000000000000000000000000000761B81E071E3601A0 03f7e5ef56235e5578ee4b66123144c753a92c204a958acb5b7a4df5407efb3af0
1BY8GQbnuenHKWLRyy3bZHRYnn61rdqbUN 000000000000000000000000000000000000000000000007DECC503A34D2978F 03eec6c349627375b2e9c649237d2df36eeb21fe2aedc31465e0b546c1873a9c03
1BY8GQbnuePchH7LDNaw1kNkKk4i9pQXVv 000000000000000000000000000000000000000000000006B53C05BD7685B3F7 034266a3e427da38c3690b5f6868a1fa36dce49e2c34d3e57e2f362548a6ec11cd
1BY8GQbnueQwVVPk62BeQbHSTFMMJZggVr 000000000000000000000000000000000000000000000006F417C81458DE32C0 03885feaa0b784648a0dbc6a9a1235cf3d6cbbb92cc94c71c19ede2dc8081218b3
1BY8GQbnueRbgSZN9KRxAyXV8fQAkkBjiv 000000000000000000000000000000000000000000000007C15B3E7D40AD18A2 02823071f0593d197f8f1b9e25ff826d4f5c8299c4f415375df4b4476f36ff3b29
1BY8GQbnuerWk6NNNA6bf3SZpXoskjDewX 000000000000000000000000000000000000000000000006239B08D55C0C51B8 0250d6c41f1eaff2c4e77bf3faf7c1c89e0b1c8c6b4b03926093747281f19dea5c
1BY8GQbnueUAXpFh7rEp1QfWRQXdbPBgXQ 000000000000000000000000000000000000000000000006CD053767784C37F6 02518fe93aaf266ea9002b582027825380347a2facc1ad14a548aa1fafabcf5f05
1BY8GQbnueUMG1vCafLpYrP8dqevBV29DZ 0000000000000000000000000000000000000000000000067ACAA2072F0B8323 034de4f0c5c568a9a57566036ea7585cf66ffcf8a1183c55c7265c0a305ec38d7d
1BY8GQbnuewAjHWYH7QSc8e3uBK6d7reZT 000000000000000000000000000000000000000000000006F83E14DED2761731 020a971a7dec6ff5a6998a209663f3a86e0e59725aa751f354564f87d35edc9f69
1BY8GQbnuexpoCrfqC3ztptgc1CzFZceEb 000000000000000000000000000000000000000000000005CE52F20795B79814 03671f9e6b6e30fdb6ba138aecd8def2233cff29b313b6ef71bb5a29c931015c15
1BY8GQbnueYebq5d6CE1wDfbdAWWy33ZyW 000000000000000000000000000000000000000000000007545bf10859946eca 0244f37b861fe56975fff38a9b81158127214346402bae27edf7e75246cc94095c
1BY8GQbnueyjTRBwVf4aTYocU2TmFzuhMH 0000000000000000000000000000000000000000000000059CECCF4F9369CB79 02d77da1cb7b2afce4b24c5f974b0b8292d9d7f2dc592544296215d79e05310b40
1BY8GQbnueykaHFzbhAFTmJwzn1k63uhSB 000000000000000000000000000000000000000000000006D56D89328480D4AA 029cc87d364974a74963f69c9e58ffa3140041895ff11f3f88d5778cd15b7944a9
1BY8GQbnueZi4mSgQg13Y3tuRiTZhwHkBK 00000000000000000000000000000000000000000000000761F27470F01230F9 02a05f7afd41438caa60e525d7a71073716c260a182626ce4a61f5ef80b3779aaf
1BY8GQbnuGbW7BppF1HchbeneV2gG1Gh7B 00000000000000000000000000000000000000000000000579E96EC070A54893 02fa40d17611c5f88bc04378a22301f010bee86574b04dff49d493c0c55f578b01
1BY8GQbnugVjgeL43mD1SqXpAFU8mqSE5R 000000000000000000000000000000000000000000000004AD6304048C00378A 0251060673c9da28e9f6dc25a1f71a2e1d91b39350238388deb02ae03f3d981b23
1BY8GQbnujgvke9PYWMpNbwTs9Jdvv7KTe 000000000000000000000000000000000000000000000004F14B15F5AE4EF20A 02bb9b15408a72a8f17240eb274c7088003be5c2a272a9364ac93e90873fdfc8d6
1BY8GQbnuy3wbCC9Gorrhi6PijfdRjtQXT 0000000000000000000000000000000000000000000000055DE3B4E1A5DEFA73 026299b426a09407475af5acc2d0bce3455816790dd4c08c5e53a23e1b8ed8692b


Progress so far searching for prefixes
bibilgin
Newbie
*
Offline Offline

Activity: 249
Merit: 0


View Profile
February 06, 2025, 11:23:20 PM
 #7317

Code:
1BY8GQbnue6NCadU8vgWREVG1Gf1MM7eCF 000000000000000000000000000000000000000000000007C17E67184115DCEE 0207680c9dacc3de3810afe8d80a2a567c5fe579e31d6ce48707bf5dff6299adac
1BY8GQbnue8fiqpmW1mqG41erPtc5XjMAc 000000000000000000000000000000000000000000000007D5333D01A24D9BA9 033c95c14e56020dbbcacb61af076ce917a3f24f8ff6842e9178aade583bd807b9
...


Progress so far searching for prefixes


Aren't these the examples I offered? Smiley They are long gone. Smiley
mjojo
Newbie
*
Online Online

Activity: 77
Merit: 0


View Profile
February 07, 2025, 02:43:06 AM
 #7318

Code:
1BY8GQbnu1DPVT6c66yLZRvMRcugu41i4v 0000000000000000000000000000000000000000000000062AD2731CC3285DB2 02c61aaba6f00abaf9f6e81980854e431cb151b62cfb18a6451bac0425536583f8
1BY8GQbnu6v7Ux8krR8URwodBWm1SawLnr 0000000000000000000000000000000000000000000000062A9AA2EB577A9FF8 02ffe1a9833ba7f64449c9867523c3604f1cffb94d92ae9431960750976b391277
1BY8GQbnu8jSXMYE4o2ZfzFSv3D7fX7BGC 000000000000000000000000000000000000000000000005DA0791C09C3BBAC4 03d2bc63c43f738f037ca8909e4c56af9dbb9a74b1b87aca7b24673513e4bb49ef
1BY8GQbnu9Pr3u4dLhGZo2vCrQswS8fZTz 0000000000000000000000000000000000000000000000050EF4226B89DF60AA 03b5694a18d5062ef993d4d2fde1a04d7de88444577a20ebe63444adfbb5bb3c67
1BY8GQbnub1JKjz49sq9NhHUXVjujDNXFp 000000000000000000000000000000000000000000000005FF9A24218EA189F4 0265d1cf27d8c5beaf6ed7500dd4b99cda9925c4138d0319f99f33823a527bbbaf
1BY8GQbnucXmpBfXmSaqrYfmyE8v2dh2uA 0000000000000000000000000000000000000000000000051BC8D6E6A141E38D 037f23d18e52e5318384001f775a8d9f92653c52998312f708306e6273c7f81a87
1BY8GQbnue3etZWtCGRAq2sNxb1oKc7xfg 000000000000000000000000000000000000000000000006C6E4771CADA99067 027760bd1a5af21305e9f51e56df7af4061cd22ed7d08c59de1ccdc57c5777bd9e
1BY8GQbnue434d7cijyPdiWLDamPoyi1yK 000000000000000000000000000000000000000000000006A7CCAFDBC7A995E4 02451008796460eef7c4172cbb5caffa95ed45b8560c016a758ee287249387c814
1BY8GQbnue6NCadU8vgWREVG1Gf1MM7eCF 000000000000000000000000000000000000000000000007C17E67184115DCEE 0207680c9dacc3de3810afe8d80a2a567c5fe579e31d6ce48707bf5dff6299adac
1BY8GQbnue8fiqpmW1mqG41erPtc5XjMAc 000000000000000000000000000000000000000000000007D5333D01A24D9BA9 033c95c14e56020dbbcacb61af076ce917a3f24f8ff6842e9178aade583bd807b9
1BY8GQbnue9Yaz5TGy6emmdVaxxYZyddRs 000000000000000000000000000000000000000000000006D37D8C32C3209F74 037dcf4167e3e78874bb9c2e711f473877a19ddaf245b9abf02b0b6a00910fadfb
1BY8GQbnueaZQ76t2p3popYQf4rNZjfSFj 000000000000000000000000000000000000000000000006F4827B94832CCF61 03c8151b7bb0ea4dd0c09a40d41f4bf97856099673bf026f30b7cdfeeb9fba75a1
1BY8GQbnuebKeVxroLmTf3m8yoaoQoUWvj 000000000000000000000000000000000000000000000006A27D573DC79B987B 02ad90f77ff75e8ad32bf8d68d5b9a689c2d9f06e41dd349ed8cef566589b66692
1BY8GQbnueCM6F1GudPP2PKTjX69VuQye4 000000000000000000000000000000000000000000000006CA44581386C205C0 0375576b39d4d2a25ac5f29394f261b360b459fbc8b3d794ad5f68c5466a3bff82
1BY8GQbnuedFpHKVZGpp39JZHHJai1qsgv 000000000000000000000000000000000000000000000006F478EFE60D572639 0217d05e732951afdbd0d7c137a3956930874a984abf21414bb2678ea794d8352d
1BY8GQbnueFiSxP1ephNt5cbvoe1vV52Hc 000000000000000000000000000000000000000000000006E29F8EB6D9946E10 023bf07862101341bbdc5a36f8c63b8ae941d2b4b9544278d6a753471462315353
1BY8GQbnuefqJQFDwrUY8pgs2JL2gzoQTY 00000000000000000000000000000000000000000000000774B84F0CF16827E8 02923b77b7f3390542b79a50e91f669c1132cf7cb829694af32c6f2bf01ed94311
1BY8GQbnueH6GRnHuR6T5Vui7F4cWtNDsi 000000000000000000000000000000000000000000000006E69B16156DE1522F 035d175816b836e21f615cd63fe2f0a5358a408a500131ffe0f5b203c69ce6e419
1BY8GQbnuehm3JqjMvwApGCCYCdm4SbHYG 000000000000000000000000000000000000000000000006F82ECCA251ACF143 03e8d65a493e96d796d8d7b8871040ecc6edb5111c522c8bdb207564612a7ae503
1BY8GQbnuehTBbfGuPMdJmLLgmsGC4Waz8 000000000000000000000000000000000000000000000006E712ABE58B3CE66E 0227aca285de44363b791df1aedeebd9b4fac3e50148de1fc3bef4fad99a5fff8f
1BY8GQbnuejxhriX1t7ejzrx9aY4eHUmaB 00000000000000000000000000000000000000000000000690CF1E19D4583D30 02014df132c5e06e589feb122ca4db019599aa670b7650cc04c2de198862b4dbdb
1BY8GQbnuek1vkFNHgPEzdvGhnJoCFL55W 000000000000000000000000000000000000000000000006BAD029572FA842A2 03be753cc0e6fe19a4fe669549525814a1afca2abbdb652bcc394a815c458fae48
1BY8GQbnuem9nt4b6zSWBS78hcSnXR1o1p 00000000000000000000000000000000000000000000000761B81E071E3601A0 03f7e5ef56235e5578ee4b66123144c753a92c204a958acb5b7a4df5407efb3af0
1BY8GQbnuenHKWLRyy3bZHRYnn61rdqbUN 000000000000000000000000000000000000000000000007DECC503A34D2978F 03eec6c349627375b2e9c649237d2df36eeb21fe2aedc31465e0b546c1873a9c03
1BY8GQbnuePchH7LDNaw1kNkKk4i9pQXVv 000000000000000000000000000000000000000000000006B53C05BD7685B3F7 034266a3e427da38c3690b5f6868a1fa36dce49e2c34d3e57e2f362548a6ec11cd
1BY8GQbnueQwVVPk62BeQbHSTFMMJZggVr 000000000000000000000000000000000000000000000006F417C81458DE32C0 03885feaa0b784648a0dbc6a9a1235cf3d6cbbb92cc94c71c19ede2dc8081218b3
1BY8GQbnueRbgSZN9KRxAyXV8fQAkkBjiv 000000000000000000000000000000000000000000000007C15B3E7D40AD18A2 02823071f0593d197f8f1b9e25ff826d4f5c8299c4f415375df4b4476f36ff3b29
1BY8GQbnuerWk6NNNA6bf3SZpXoskjDewX 000000000000000000000000000000000000000000000006239B08D55C0C51B8 0250d6c41f1eaff2c4e77bf3faf7c1c89e0b1c8c6b4b03926093747281f19dea5c
1BY8GQbnueUAXpFh7rEp1QfWRQXdbPBgXQ 000000000000000000000000000000000000000000000006CD053767784C37F6 02518fe93aaf266ea9002b582027825380347a2facc1ad14a548aa1fafabcf5f05
1BY8GQbnueUMG1vCafLpYrP8dqevBV29DZ 0000000000000000000000000000000000000000000000067ACAA2072F0B8323 034de4f0c5c568a9a57566036ea7585cf66ffcf8a1183c55c7265c0a305ec38d7d
1BY8GQbnuewAjHWYH7QSc8e3uBK6d7reZT 000000000000000000000000000000000000000000000006F83E14DED2761731 020a971a7dec6ff5a6998a209663f3a86e0e59725aa751f354564f87d35edc9f69
1BY8GQbnuexpoCrfqC3ztptgc1CzFZceEb 000000000000000000000000000000000000000000000005CE52F20795B79814 03671f9e6b6e30fdb6ba138aecd8def2233cff29b313b6ef71bb5a29c931015c15
1BY8GQbnueYebq5d6CE1wDfbdAWWy33ZyW 000000000000000000000000000000000000000000000007545bf10859946eca 0244f37b861fe56975fff38a9b81158127214346402bae27edf7e75246cc94095c
1BY8GQbnueyjTRBwVf4aTYocU2TmFzuhMH 0000000000000000000000000000000000000000000000059CECCF4F9369CB79 02d77da1cb7b2afce4b24c5f974b0b8292d9d7f2dc592544296215d79e05310b40
1BY8GQbnueykaHFzbhAFTmJwzn1k63uhSB 000000000000000000000000000000000000000000000006D56D89328480D4AA 029cc87d364974a74963f69c9e58ffa3140041895ff11f3f88d5778cd15b7944a9
1BY8GQbnueZi4mSgQg13Y3tuRiTZhwHkBK 00000000000000000000000000000000000000000000000761F27470F01230F9 02a05f7afd41438caa60e525d7a71073716c260a182626ce4a61f5ef80b3779aaf
1BY8GQbnuGbW7BppF1HchbeneV2gG1Gh7B 00000000000000000000000000000000000000000000000579E96EC070A54893 02fa40d17611c5f88bc04378a22301f010bee86574b04dff49d493c0c55f578b01
1BY8GQbnugVjgeL43mD1SqXpAFU8mqSE5R 000000000000000000000000000000000000000000000004AD6304048C00378A 0251060673c9da28e9f6dc25a1f71a2e1d91b39350238388deb02ae03f3d981b23
1BY8GQbnujgvke9PYWMpNbwTs9Jdvv7KTe 000000000000000000000000000000000000000000000004F14B15F5AE4EF20A 02bb9b15408a72a8f17240eb274c7088003be5c2a272a9364ac93e90873fdfc8d6
1BY8GQbnuy3wbCC9Gorrhi6PijfdRjtQXT 0000000000000000000000000000000000000000000000055DE3B4E1A5DEFA73 026299b426a09407475af5acc2d0bce3455816790dd4c08c5e53a23e1b8ed8692b


Progress so far searching for prefixes

Which from above is sequentialy private key, just wonder average distance between prefixs 1BY8GQbnue on your shearching.
kTimesG
Full Member
***
Offline Offline

Activity: 574
Merit: 198


View Profile
February 07, 2025, 09:42:25 AM
Last edit: February 07, 2025, 11:08:29 AM by kTimesG
 #7319

its a bit mumbled up , wanted your perspective  , and not working also as intended , be gentle:

maybe speed up your Python.

What are you trying to do? It looks like you made some changes to the Python Kangaroo I posted 4 months ago that worked fine (sort of). What are the theoretical bases for your changes though? Some things to consider:

1. I stated several times the code is just for learning purposes. It has its own limitations and had some bugs as well, in edge-cases.
2. Python is very slow, even when using GMP.
3. Kangaroo with only 2 kang types takes longer to solve.
4. Kangaroo that doesn't take advantage of curve symmetry takes longer to solve.
5. Once you change jump tables, alpha, etc. you should really, really know what you're doing, and why. Point doublings (kang == jump_point) are not supported, for private reasons (that code was shrinked down from a larger implementation, I never need to bother with point doublings in any of my algorithms).

Off the grid, training pigeons to broadcast signed messages.
Geshma
Newbie
*
Offline Offline

Activity: 18
Merit: 0


View Profile
February 07, 2025, 05:27:57 PM
 #7320

its a bit mumbled up , wanted your perspective  , and not working also as intended , be gentle:

maybe speed up your Python.

What are you trying to do? It looks like you made some changes to the Python Kangaroo I posted 4 months ago that worked fine (sort of). What are the theoretical bases for your changes though? Some things to consider:

1. I stated several times the code is just for learning purposes. It has its own limitations and had some bugs as well, in edge-cases.
2. Python is very slow, even when using GMP.
3. Kangaroo with only 2 kang types takes longer to solve.
4. Kangaroo that doesn't take advantage of curve symmetry takes longer to solve.
5. Once you change jump tables, alpha, etc. you should really, really know what you're doing, and why. Point doublings (kang == jump_point) are not supported, for private reasons (that code was shrinked down from a larger implementation, I never need to bother with point doublings in any of my algorithms).

Thanks for the input and insight , kang == jump point , enlighten me please.
Pages: « 1 ... 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 [366] 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 ... 578 »
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!