Bitcoin Forum
April 28, 2025, 12:17:19 PM *
News: Latest Bitcoin Core release: 29.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 »
1  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: Today at 09:31:32 AM

What does similar mean? Same random seed + "something"? Some algorithm? Tongue

I don't know exactly what it is. It could be something very simple, and I might be overcomplicating things with complex byte variants — for example, it could just be the Satoshipuzzle plus the puzzle number, or something like that. Anything. Grin That's why this is a brute-force puzzle Wink
2  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: Today at 09:12:09 AM
the Millisecond Puzzle 30 solver



So, you can solve any puzzle in less than a second if you have the correct random seed?   Tongue

That's right — and even more than that: with one and the same seed, multiple puzzles  Grin

How can that be? Tongue

Because all puzzles are created with one or similar random, seed - known to the creator.
errors = ZERO
3  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: Today at 08:59:24 AM
the Millisecond Puzzle 30 solver



So, you can solve any puzzle in less than a second if you have the correct random seed?   Tongue

That's right — and even more than that: with one and the same seed, multiple puzzles  Grin
4  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: Today at 08:46:11 AM
I'm not going to prove anything to anyone, but here is the Millisecond Puzzle 30 solver

Code:
import random
import os
import time
import secp256k1 as ice

puzzle = 30
target = "d39c4704664e1deb76c9331e637564c257d68a08"
lower_range_limit = 2 ** (puzzle - 1)
upper_range_limit = (2 ** puzzle) - 1

start_time = time.time()

for x in range(10000000):
    #Random seed Config
    #constant_prefix = b''  #back to no constant
    constant_prefix = b'yx\xcb\x08\xb70l'
    prefix_length = len(constant_prefix)
    length = 8
    ending_length = length - prefix_length
    ending_bytes = os.urandom(ending_length)
    random_bytes = constant_prefix + ending_bytes
    random.seed(random_bytes)
    dec = random.randint(lower_range_limit, upper_range_limit)
    h160 = ice.privatekey_to_h160(0, True, dec).hex()
    if h160 == target:
        HEX = "%064x" % dec
        caddr = ice.privatekey_to_address(0, True, dec)
        wifc = ice.btc_pvk_to_wif(HEX)
        print("Bitcoin address Compressed: " + caddr)
        print("Private Key (decimal): " + str(dec))
        print("Private key (wif) Compressed : " + wifc)
        print(f"Random seed: {random_bytes}")
        break

end_time = time.time()
execution_time_ms = (end_time - start_time) * 1000

print("Execution Time (ms):", execution_time_ms)

Bitcoin address Compressed: 1LHtnpd8nU5VHEMkG2TMYYNUjjLc992bps
Private Key (decimal): 1033162084
Private key (wif) Compressed : KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M8diLSC5MyERoW
Random seed: b'yx\xcb\x08\xb70l\xf1'
Execution Time (ms): 2.977609634399414


There are no rules for how any puzzle should be solved — the rule is that there are no rules Grin
5  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 27, 2025, 09:51:59 AM
But in C? Nah, you ain’t got that luxury. Or maybe you could, but the code would be so gnarly and huge it ain’t even worth it.  Embarrassed


This is just the beginning of the problem.   Grin

P.S. I just realized that 'Akito S. M. Hosana' is an anagram or deliberate variation of 'Satoshi Nakamoto.'  Wink
6  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 27, 2025, 09:12:53 AM
 I don’t even get how that Python script cracks it at 13 characters… seems straight-up impossible.

Yo, you believe me when I say I can’t even make a C++ function  that fails quickly enough on invalid checksums?  Grin
7  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 27, 2025, 08:28:42 AM
For similar prefixes - is there a constant number between private keys integers?

Just curious...

Anyone checked that?

You can easily check, the answer Is No, RIPEMD-160 generates uniformly distributed numbers.

Anyone saying otherwise, anyone who believes in the "prefix method" — is either messing with you or never finished mandatory schooling


The whole debate’s fueled by folks who either don’t get how cryptographic hashing works or are straight-up wishin’ for some ‘shortcut’ to crack these puzzles. Listen—uniform distributions don’t just spit out predictable prefixes unless the input’s rigged (and with random/pubkey data? Forget about it).

Bitcoin addresses? They’re just base58-encoded RIPEMD-160 hashes with checksums slapped on. The prefix—like ‘1,’ ‘3,’ or ‘bc1’—comes from the script type (P2PKH, P2SH, ya know?), not the private key.

The ‘puzzle’ hype? That’s ‘cause these private keys are generated randomly (think: 1, 2, … up to 2^160), and the game is brute-forcing the one that matches a funded address. It’s a grind, not some crypto voodoo.

For me, the real juice is in the private key structure (WIF)—that’s what matters in puzzles like the ‘Bitcoin Puzzle.’ When keys get searched incrementally, their WIFs all start with the same ol’ ‘KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3q…’   Grin
8  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 25, 2025, 07:44:15 PM
What do you mean? Do you think any part of the code is worth anything—the AVX part, maybe? A new page in the book?  Tongue

Well, you saw in the last few pages where my transition leads — into the research and generation of WIFs, filtering based on checksums, and warp-speeding SHA-256 and Base58. . I won’t even bother with secp256k1 anymore.

What do you need to succeed? Tongue

That script you saw in Python—you liked it—but imagine it (on steroids in C++) 100x or even 1000x faster, with a SOTA random generator and WIF filtration. Grin
9  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 25, 2025, 07:12:40 PM
What do you mean? Do you think any part of the code is worth anything—the AVX part, maybe? A new page in the book?  Tongue

Well, you saw in the last few pages where my transition leads — into the research and generation of WIFs, filtering based on checksums, and warp-speeding SHA-256 and Base58. . I won’t even bother with secp256k1 anymore.
10  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 25, 2025, 07:01:25 PM
This is based on Cyclone, with no mention of the original author, but it's also slower than Cyclone. What's the point of this? Is it some hidden gem or an encrypted result? I don't understand. Tongue

At least you can see the source code here. Take it or leave it. You have three versions now, so pick one — or none, like me, even though I modified the original myself. This is just one of the waystations to something… or nothing.  Grin
11  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 25, 2025, 02:48:03 PM
It's easier to go fishing. Or with a rope and a very strong magnet at the end. You can pull out anything. Even a safe with gold.  Grin
12  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 25, 2025, 02:07:29 PM
That's it, basically.
In the end, we came up with a sort of Frankenstein code together, and this is it:

Code:
#include <secp256k1.h>
#include "sha256_avx2.h"
#include "ripemd160_avx2.h"

static constexpr int HASH_BATCH_SIZE = 8;
static constexpr int POINTS_BATCH_SIZE = 256;


inline void prepareShaBlock(const uint8_t* dataSrc, __uint128_t dataLen, uint8_t* outBlock) {
    std::fill_n(outBlock, 64, 0);
    std::memcpy(outBlock, dataSrc, dataLen);
    outBlock[dataLen] = 0x80;
    const uint32_t bitLen = (uint32_t)(dataLen * 8);
    outBlock[60] = (uint8_t)((bitLen >> 24) & 0xFF);
    outBlock[61] = (uint8_t)((bitLen >> 16) & 0xFF);
    outBlock[62] = (uint8_t)((bitLen >>  8) & 0xFF);
    outBlock[63] = (uint8_t)( bitLen        & 0xFF);
}

inline void prepareRipemdBlock(const uint8_t* dataSrc, uint8_t* outBlock) {
    std::fill_n(outBlock, 64, 0);
    std::memcpy(outBlock, dataSrc, 32);
    outBlock[32] = 0x80;
    const uint32_t bitLen = 256;
    outBlock[60] = (uint8_t)((bitLen >> 24) & 0xFF);
    outBlock[61] = (uint8_t)((bitLen >> 16) & 0xFF);
    outBlock[62] = (uint8_t)((bitLen >>  8) & 0xFF);
    outBlock[63] = (uint8_t)( bitLen        & 0xFF);
}

static void computeHash160BatchBinSingle(int numKeys,
                                       uint8_t pubKeys[][33],
                                       uint8_t hashResults[][20])
{
    alignas(32) std::array<std::array<uint8_t, 64>, HASH_BATCH_SIZE> shaInputs;
    alignas(32) std::array<std::array<uint8_t, 32>, HASH_BATCH_SIZE> shaOutputs;
    alignas(32) std::array<std::array<uint8_t, 64>, HASH_BATCH_SIZE> ripemdInputs;
    alignas(32) std::array<std::array<uint8_t, 20>, HASH_BATCH_SIZE> ripemdOutputs;
    const __uint128_t totalBatches = (numKeys + (HASH_BATCH_SIZE - 1)) / HASH_BATCH_SIZE;
    for (__uint128_t batch = 0; batch < totalBatches; batch++) {
        const __uint128_t batchCount = std::min<__uint128_t>(HASH_BATCH_SIZE, numKeys - batch * HASH_BATCH_SIZE);

        for (__uint128_t i = 0; i < batchCount; i++) {
            prepareShaBlock(pubKeys[batch * HASH_BATCH_SIZE + i], 33, shaInputs[i].data());
        }

        if (batchCount < HASH_BATCH_SIZE) {
            static std::array<uint8_t, 64> shaPadding = {};
            prepareShaBlock(pubKeys[0], 33, shaPadding.data());
            for (__uint128_t i = batchCount; i < HASH_BATCH_SIZE; i++) {
                std::memcpy(shaInputs[i].data(), shaPadding.data(), 64);
            }
        }

        const uint8_t* inPtr[HASH_BATCH_SIZE];
        uint8_t* outPtr[HASH_BATCH_SIZE];
        for (int i = 0; i < HASH_BATCH_SIZE; i++) {
            inPtr[i]  = shaInputs[i].data();
            outPtr[i] = shaOutputs[i].data();
        }

        sha256avx2_8B(inPtr[0], inPtr[1], inPtr[2], inPtr[3],
                      inPtr[4], inPtr[5], inPtr[6], inPtr[7],
                      outPtr[0], outPtr[1], outPtr[2], outPtr[3],
                      outPtr[4], outPtr[5], outPtr[6], outPtr[7]);

        for (__uint128_t i = 0; i < batchCount; i++) {
            prepareRipemdBlock(shaOutputs[i].data(), ripemdInputs[i].data());
        }

        if (batchCount < HASH_BATCH_SIZE) {
            static std::array<uint8_t, 64> ripemdPadding = {};
            prepareRipemdBlock(shaOutputs[0].data(), ripemdPadding.data());
            for (__uint128_t i = batchCount; i < HASH_BATCH_SIZE; i++) {
                std::memcpy(ripemdInputs[i].data(), ripemdPadding.data(), 64);
            }
        }

        for (int i = 0; i < HASH_BATCH_SIZE; i++) {
            inPtr[i]  = ripemdInputs[i].data();
            outPtr[i] = ripemdOutputs[i].data();
        }

        ripemd160avx2::ripemd160avx2_32(
            (unsigned char*)inPtr[0], (unsigned char*)inPtr[1],
            (unsigned char*)inPtr[2], (unsigned char*)inPtr[3],
            (unsigned char*)inPtr[4], (unsigned char*)inPtr[5],
            (unsigned char*)inPtr[6], (unsigned char*)inPtr[7],
            outPtr[0], outPtr[1], outPtr[2], outPtr[3],
            outPtr[4], outPtr[5],
            outPtr[6], outPtr[7]
        );

        for (__uint128_t i = 0; i < batchCount; i++) {
            std::memcpy(hashResults[batch * HASH_BATCH_SIZE + i], ripemdOutputs[i].data(), 20);
        }
    }
}



void worker(int threadId, __uint128_t threadRangeStart, __uint128_t threadRangeEnd) {
    alignas(32) uint8_t localPubKeys[HASH_BATCH_SIZE][33];
    alignas(32) uint8_t localHashResults[HASH_BATCH_SIZE][20];

    __m256i target16 = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(TARGET_HASH160_RAW.data()));

    secp256k1_context* ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);

    // Precompute points for batch processing
    alignas(32) secp256k1_fe plusPointsX[POINTS_BATCH_SIZE];
    alignas(32) secp256k1_fe plusPointsY[POINTS_BATCH_SIZE];
    alignas(32) secp256k1_fe minusPointsY[POINTS_BATCH_SIZE];

    for (int i = 0; i < POINTS_BATCH_SIZE; i++) {
        secp256k1_scalar scalar;
        secp256k1_scalar_set_int(&scalar, i);
        secp256k1_gej pointJ;
        secp256k1_ecmult_gen(ctx->ecmult_gen_ctx, &pointJ, &scalar);

        secp256k1_ge point;
        secp256k1_ge_set_gej(&point, &pointJ);

        secp256k1_fe_normalize_var(&point.x);
        secp256k1_fe_normalize_var(&point.y);

        plusPointsX[i] = point.x;
        plusPointsY[i] = point.y;

        secp256k1_fe_negate(&minusPointsY[i], &point.y, 1);
    }

    __uint128_t currentKey = threadRangeStart;
    while (currentKey <= threadRangeEnd) {
        int localBatchCount = 0;

        // Generate public keys in batches
        for (; localBatchCount < HASH_BATCH_SIZE && currentKey <= threadRangeEnd; ++localBatchCount, ++currentKey) {
            uint8_t priv[32];
            uint128ToPrivKey(currentKey, priv);

            secp256k1_pubkey pubkey;
            if (!secp256k1_ec_pubkey_create(ctx, &pubkey, priv)) {
                std::cerr << "Failed to derive public key.\n";
                continue;
            }

            size_t len = 33;
            secp256k1_ec_pubkey_serialize(ctx, localPubKeys[localBatchCount], &len, &pubkey, SECP256K1_EC_COMPRESSED);
        }

        // Compute HASH160 for the batch
        computeHash160BatchBinSingle(localBatchCount, localPubKeys, localHashResults);

        // Compare HASH160 results with the target
        for (int j = 0; j < localBatchCount; ++j) {
            __m256i cand = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(localHashResults[j]));
            __m256i cmp = _mm256_cmpeq_epi8(cand, target16);
            int mask = _mm256_movemask_epi8(cmp);

            if ((mask & 0x0F) == 0x0F) {  
                bool fullMatch = true;
                for (int k = 0; k < 20; k++) {
                    if (localHashResults[j][k] != TARGET_HASH160_RAW[k]) {
                        fullMatch = false;
                        break;
                    }
                }
                if (fullMatch) {
                    auto tEndTime = std::chrono::high_resolution_clock::now();
                    double globalElapsedTime = std::chrono::duration<double>(tEndTime - tStart).count();

                    std::lock_guard<std::mutex> lock(progress_mutex);
                    globalComparedCount += actual_work_done;
                    mkeysPerSec = (double)globalComparedCount / globalElapsedTime / 1e6;

                    __uint128_t foundKey = currentKey - (localBatchCount - j);
                    std::string hexKey = uint128ToHex(foundKey);

                    std::lock_guard<std::mutex> resultLock(result_mutex);
                    results.push(std::make_tuple(hexKey, total_checked_avx.load(), flip_count));
                    stop_event.store(true);
                    return;
                }
            }
        }
    }

    secp256k1_context_destroy(ctx);
}


To use internal APIs like secp256k1_ecmult_gen, you must install secp256k1 form source:

Code:
git clone https://github.com/bitcoin-core/secp256k1.git
cd secp256k1
./autogen.sh
./configure --enable-module-ecmult-gen --enable-experimental --enable-module-recovery
make
sudo make install


And the problems don't end here.

That's why it's easier for me to use JLP  secp256k1  Grin
13  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 25, 2025, 11:16:49 AM
Bro, you don't even know what you're talkin' about. libsecp256k1 wasn't made for low-level batched optimizations like that. You gotta use JeanLucPons' SECP256K1 if you ever wanna hit 50M keys per second on any CPU.

Actually, JLP is the slow one here. Like, at least 50% slower.

libsecp256k1's primitives can be easily used to implement batched addition, or anything else. I already posted the code to do this a while ago.


Alright, can you hook this part up for me using libsecp256k1?

Code:
// Worker function
void worker(int threadId, __uint128_t threadRangeStart, __uint128_t threadRangeEnd) {
    alignas(32) uint8_t localPubKeys[HASH_BATCH_SIZE][33];
    alignas(32) uint8_t localHashResults[HASH_BATCH_SIZE][20];
    alignas(32) int pointIndices[HASH_BATCH_SIZE];

    __m256i target16 = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(TARGET_HASH160_RAW.data()));

    alignas(32) Point plusPoints[POINTS_BATCH_SIZE];
    alignas(32) Point minusPoints[POINTS_BATCH_SIZE];

    for (int i = 0; i < POINTS_BATCH_SIZE; i++) {
        Int tmp;
        tmp.SetInt32(i);
        plusPoints[i] = secp->ComputePublicKey(&tmp);
        minusPoints[i] = plusPoints[i];
        minusPoints[i].y.ModNeg();
    }

    alignas(32) Int deltaX[POINTS_BATCH_SIZE];
    IntGroup modGroup(POINTS_BATCH_SIZE);
    alignas(32) Int pointBatchX[fullBatchSize];
    alignas(32) Int pointBatchY[fullBatchSize];

    secp256k1_context* ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);

    __uint128_t currentKey = threadRangeStart;
    while (currentKey <= threadRangeEnd) {
        int localBatchCount = 0;

        // Generate public keys in batches
        for (; localBatchCount < HASH_BATCH_SIZE && currentKey <= threadRangeEnd; ++localBatchCount, ++currentKey) {
            uint8_t priv[32];
            uint128ToPrivKey(currentKey, priv);

            uint8_t startPoint[65];
            if (!derivePubkey(ctx, priv, startPoint, true)) {
                std::cerr << "Failed to derive public key.\n";
                continue;
            }

            // Use custom arithmetic for batch processing
            Point startPointObj;
            startPointObj.x.SetBytes(startPoint + 1, 32);
            startPointObj.y.SetBytes(startPoint + 1, 32);

            for (int i = 0; i < POINTS_BATCH_SIZE; i += 4) {
                deltaX[i].ModSub(&plusPoints[i].x, &startPointObj.x);
                deltaX[i+1].ModSub(&plusPoints[i+1].x, &startPointObj.x);
                deltaX[i+2].ModSub(&plusPoints[i+2].x, &startPointObj.x);
                deltaX[i+3].ModSub(&plusPoints[i+3].x, &startPointObj.x);
            }
            modGroup.Set(deltaX);
            modGroup.ModInv();

            for (int i = 0; i < POINTS_BATCH_SIZE; i++) {
                Int deltaY;
                deltaY.ModSub(&plusPoints[i].y, &startPointObj.y);

                Int slope;
                slope.ModMulK1(&deltaY, &deltaX[i]);

                Int slopeSq;
                slopeSq.ModSquareK1(&slope);

                pointBatchX[i].Set(&startPointObj.x);
                pointBatchX[i].ModAdd(&slopeSq);
                pointBatchX[i].ModSub(&plusPoints[i].x);

                Int diffX;
                diffX.Set(&startPointObj.x);
                diffX.ModSub(&pointBatchX[i]);
                diffX.ModMulK1(&slope);

                pointBatchY[i].Set(&startPointObj.y);
                pointBatchY[i].ModNeg();
                pointBatchY[i].ModAdd(&diffX);
            }

            for (int i = 0; i < POINTS_BATCH_SIZE; i++) {
                Int deltaY;
                deltaY.ModSub(&minusPoints[i].y, &startPointObj.y);

                Int slope;
                slope.ModMulK1(&deltaY, &deltaX[i]);

                Int slopeSq;
                slopeSq.ModSquareK1(&slope);

                pointBatchX[POINTS_BATCH_SIZE + i].Set(&startPointObj.x);
                pointBatchX[POINTS_BATCH_SIZE + i].ModAdd(&slopeSq);
                pointBatchX[POINTS_BATCH_SIZE + i].ModSub(&minusPoints[i].x);

                Int diffX;
                diffX.Set(&startPointObj.x);
                diffX.ModSub(&pointBatchX[POINTS_BATCH_SIZE + i]);
                diffX.ModMulK1(&slope);

                pointBatchY[POINTS_BATCH_SIZE + i].Set(&startPointObj.y);
                pointBatchY[POINTS_BATCH_SIZE + i].ModNeg();
                pointBatchY[POINTS_BATCH_SIZE + i].ModAdd(&diffX);
            }

            for (int i = 0; i < fullBatchSize && localBatchCount < HASH_BATCH_SIZE; i++) {
                Point tempPoint;
                tempPoint.x.Set(&pointBatchX[i]);
                tempPoint.y.Set(&pointBatchY[i]);

                localPubKeys[localBatchCount][0] = tempPoint.y.IsEven() ? 0x02 : 0x03;
                for (int j = 0; j < 32; j++) {
                    localPubKeys[localBatchCount][1 + j] = pointBatchX[i].GetByte(31 - j);
                }
                pointIndices[localBatchCount] = i;
                localBatchCount++;
            }
        }

I really did try to get it working… but yeah, I totally biffed it.  Grin
14  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 25, 2025, 10:58:20 AM
Got bored and trying to waste time.

Have no idea how to improve it!

Yo, ditch that OpenSSL SHA nonsense and hop on the AVX2 train—4x or 8x, baby!

Now, imagine this: you're forcing some idiotic AI bro to crunch 4x or 8x parallel SHA-256 and RIPEMD-160 computations.

At first, it's all chill, but then BAM! The AI starts glitchin' out like a caffeinated squirrel on a sugar rush.

It’s trying to compute so hard, it forgets its own name, starts speaking in binary gibberish, and accidentally sends you memes instead of results. True chaos, man. You just turned a high-tech algorithm into a hot mess!  Grin

Squirrel got speed loss and giving random shit after avx2.
OpenSSL SHA nonsense still gives valid values with 1.5G/s speed.

Bro, you don't even know what you're talkin' about. libsecp256k1 wasn't made for low-level batched optimizations like that. You gotta use JeanLucPons' SECP256K1 if you ever wanna hit 50M keys per second on any CPU.

15  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 25, 2025, 06:36:23 AM
Got bored and trying to waste time.

Have no idea how to improve it!

Yo, ditch that OpenSSL SHA nonsense and hop on the AVX2 train—4x or 8x, baby!

Now, imagine this: you're forcing some idiotic AI bro to crunch 4x or 8x parallel SHA-256 and RIPEMD-160 computations.

At first, it's all chill, but then BAM! The AI starts glitchin' out like a caffeinated squirrel on a sugar rush.

It’s trying to compute so hard, it forgets its own name, starts speaking in binary gibberish, and accidentally sends you memes instead of results. True chaos, man. You just turned a high-tech algorithm into a hot mess!  Grin
16  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 24, 2025, 07:40:47 PM
This script is really insane. I can't find 12 characters even after 5 hours on the WIF-Roulette C++ version, although it is 10 times faster. However, there is a bug: the counter and speed go into the negative after one or two hours. Also, if 15 characters are missing, the ranges overlap between one puzzle and another. Can this be fixed? Please upload it to GitHub.  Tongue


I have not yet managed to reproduce the Numba random method in a way that works as efficiently in C++ as it does in Python, including the same filtering functionality.

In reality, there are 12 missing Base58 characters, which results in 58¹² ≈ 1.4×10²¹ possible combinations.

At a speed of 300,812 keys per second, a full brute-force search would take:

1.4×10²¹ ÷ 300,812 ≈ 4.65×10¹⁵ seconds ≈ 147 million years.

However, in this case, a valid WIF (Wallet Import Format) has the following structure:

[Version Byte (1)][32-byte Key][4-byte Checksum].

The starting WIF string, START_WIF = "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qd7sDG4F", is almost complete. Only ~2-3 bytes are truly random , and the checksum helps filter out invalid keys early in the process.

The function ice.btc_wif_to_pvk_hex() fails quickly on invalid checksums. Most generated keys are discarded immediately, meaning you only test valid candidates. As a result, the speed you observe on the screen reflects only the processing of valid characters.

The actual entropy is MUCH lower than 12 characters!

I will upload the fixed Python script soon.  Grin

https://github.com/NoMachine1/WIF-Cracker
17  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 23, 2025, 06:46:55 PM
TNX for sharing,very well i look later what you have here  Smiley


We can review the code until the next New Year. Someone needs to convert it to C, and we have a couple of people here who can do it in two days  Tongue

https://github.com/NoMachine1/Kangaroo-Hops

 Wink
18  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 23, 2025, 09:51:06 AM
Hi NoMachine, I test your WIF roulette, but Wif speed key doesnt show up ? only spinning wheel animation

No, the output is filtered in the Python script to avoid potential errors when the subprocess writes to a pipe. You can test the speed directly by running ./WIFRoulette.
19  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 23, 2025, 07:24:05 AM
🔮 Curvature in Bitcoin's key space?
In physics, the curvature of space-time allows a ship (hypothetically) to take a shortcut, like in a warp drive. In Bitcoin's key space (a space of 2²⁵⁶ possible private keys), finding a specific key is like searching for a grain of sand in an entire universe. But... what if we could "curve" that space somehow? A lot of Netflix, right? Grin

You aren’t fighting the entire 2²⁵⁶ universe—just a 2⁶⁹ keyspace.

My approach:

Instead of using secp256k1 for key derivation, I propose:

Generating all possible uncompressed Wallet Import Formats (WIFs) within the 69-bit keyspace (specifically, from 0x10000000000000000 to 0x1FFFFFFFFFFFFFFFF).

Optimizing the process using warpseeding—a custom acceleration method combining SHA-256 hashing and Base58 encoding for faster WIF generation.

Checking each WIF against the Puzzle #69 address to identify the correct private key.

Bypassing curve operations entirely Grin

P.S. Converting each WIF to a Bitcoin address (which does require secp256k1, but only after filtering).

How do you filter characters after "5HpHagT65TZzG1PH3CSu63k8DbpvD8s5i" ?  Tongue

You just have to know everything, don’t you?   Grin
20  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 23, 2025, 07:02:28 AM
🔮 Curvature in Bitcoin's key space?
In physics, the curvature of space-time allows a ship (hypothetically) to take a shortcut, like in a warp drive. In Bitcoin's key space (a space of 2²⁵⁶ possible private keys), finding a specific key is like searching for a grain of sand in an entire universe. But... what if we could "curve" that space somehow? A lot of Netflix, right? Grin

You aren’t fighting the entire 2²⁵⁶ universe—just a 2⁶⁹ keyspace.

My approach:

Instead of using secp256k1 for key derivation, I propose:

Generating all possible uncompressed Wallet Import Formats (WIFs) within the 69-bit keyspace (specifically, from 0x10000000000000000 to 0x1FFFFFFFFFFFFFFFF).

Optimizing the process using warpseeding—a custom acceleration method combining SHA-256 hashing and Base58 encoding for faster WIF generation.

Checking each WIF against the Puzzle #69 address to identify the correct private key.

Bypassing curve operations entirely Grin

P.S. Converting each WIF to a Bitcoin address (which does require secp256k1, but only after filtering).
Pages: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!