Bitcrackrandomiser is a solo pool project for Bitcoin puzzle 66, 67 and 68. (Technically supports up to Puzzle 100). It works with Bitcrack and VanitySearch.
Supports Windows, Linux and MacOS.
Supports NVIDIA / AMD devices and CPU. (AMD Bitcrack v0.30 only, CPU VanitySearch only)
Website | Link | Name |
---|---|---|
Pool website | btcpuzzle.info | |
Support | t.me/bitcrackrandomiser | |
Github repo | github.com/bitcrackrandomiser | - |
Docker images | hub.docker.com/u/ilkercndk | - |
API Documentation | API-DOCUMENTATION.MD | - |
You can build the client and all the applications used yourself. %100 open-source client & apps.
Endless thanks to everyone involved in the development of Bitcrack and VanitySearch applications.
It only works with BTC Puzzle 66, 67 and 68 (You can change the puzzle number from the [target_puzzle] variable in the settings.txt file.).
When requesting a range from the pool, three wallet addresses are also returned. The private key of these addresses is scanned simultaneously. To ensure that a range is scanned, the private key of three wallet addresses must be found. The private keys of the found addresses are hashed with SHA256. In this way, "Proof Key" is created. This is to make sure your program is working correctly. I also want to make sure you have a really healthy scan.
Example; pool returns 3E2ECB0
HEX range to scan. The pool randomly generates extra three private keys within the returned HEX range. 3E2ECB00000000000
and 3E2ECB0FFFFFFFFFF
.
Marking is done with SHA256(PROOFKEY1+PROOFKEY2+PROOFKEY3)
Note: The number of proof keys can be increased/decreased dynamically by the API. By standard the total number is 3.
If you want to scan all private keys in puzzle 66; you need to do 36 quintillion scans in total. In case you do a random scan; previously generated private keys will be regenerated (random problem). This extends the scan time by x10. Puzzle 66 HEX ranges as follows. It starts with 2 or 3. Any private key in this range is 17 characters long.
20000000000000000 to 3ffffffffffffffff
We take the first 7 characters and delete the rest for now. The result will be as follows.
2000000 to 3ffffff
We now have about 33 million possible ranges to search. All possible ranges are stored in the database. A random value will come up each time a scan job is called and will be marked as scanned when the scan is complete. Note: Each range contains 1,1 trillion private keys.
I can scan each range in about 10 minutes on NVIDIA 3090. This actually means about 1,1 trillion private keys. When the range is scanned, it is marked as scanned. So it won't show up anymore.
For Puzzle 66: 2000000-2050000 (First ~%0.98) ranges and 3FAF000-3FFFFFF (Last ~%0.98) manually defeated in this pool. If you rescan a defeated range, it will now be marked as scanned normal.
Random range from database: 326FB80
The program tells Bitcrack/VanitySearch to scan the following range: 326FB800000000000 / 326FB80FFFFFFFFFF (Contains 1,1 trillion private keys)
When the range is scanned, a new range is requested and the process proceeds in this way.
You can read detailed How To Use Guide
1 - Create an account on BTCPuzzle.info website and obtain your user token.
2 - Download latest released Bitcrackrandomiser or build it yourself.
3 - Download .NET 6.0 runtimes from Microsoft
4 - Edit the settings.txt file according to you.
5 - Run the application.
If you're looking for the easiest way to join the pool, you're in the right place. Rent the graphics card you want at hourly rates and chase the reward. Go to CloudSearch by btcpuzzle.info.
1 - Create an account on BTCPuzzle.info website and activate your CloudSearch account.
2 - Top up balance (USD) using Polygon, Base, ETH and many other networks.
3 - Create a template and rent the instance you want. That is all!
You can use docker image for a faster experience. You can also create your own docker image. "Dockerfile" is available in the repo. Visit the Bitcrackrandomiser Docker Images
What needs to be done above is ready in the Docker image. All you have to do is run the application.
Everything is ready! Edit the settings.txt file and run the app!
$ docker run -it ilkercndk/bitcrackrandomiser:latest
... edit settings file ...
$ dotnet BitcrackRandomiser.dll
Don't forget to add the --gpus all
flag when running on your local computer.
$ docker run --gpus all -it ilkercndk/bitcrackrandomiser:latest
Everything is ready! When you run the image, bitcrackrandomiser starts automatically. You can see the Docker create/run settings in the example below. Does not need interactive console.
$ docker run -e BC_WALLET=xxxx -e BC_USERTOKEN=xxxx ilkercndk/bitcrackrandomiser:autorun
Example run Bitcrack on Vast.ai;
$ docker run -e BC_APP_TYPE=bitcrack ilkercndk/bitcrackrandomiser:autorun
Example run VanitySearch on Vast.ai;
$ docker run -e BC_APP_TYPE=vanitysearch ilkercndk/bitcrackrandomiser:autorun
If you do not send the BC_APP_TYPE
value, "vanitysearch" will run by default. You do not need to send the BC_GPUCOUNT
value. The number of GPUs will automatically calculate the total number of graphics cards on the instance and the application will be run.
BC_PUZZLE=66
BC_USERTOKEN="0"
BC_WALLET="1eosEvvesKV6C2ka4RDNZhmepm1TLFBtw"
BC_APP_TYPE="vanitysearch"
BC_APP="/app/VanitySearch/./vanitysearch"
BC_APP_ARGS=""
BC_GPUCOUNT="1"
BC_GPUINDEX="0"
BC_SCAN_TYPE="includeDefeatedRanges"
BC_SCAN_REWARDS="true"
BC_CUSTOM_RANGE="none"
BC_API_SHARE="none"
BC_TELEGRAM_SHARE="false"
BC_TELEGRAM_ACCESS_TOKEN="0"
BC_TELEGRAM_CHAT_ID="0"
BC_TELEGRAM_SHARE_EACHKEY="false"
BC_UNTRUSTED_COMPUTER="false"
BC_FORCE_CONTINUE="false"
BC_PRIVATEPOOL="none"
You can update the application settings via the "settings.txt" file or in app. You can create your settings file on btcpuzzle.info dashboard.
Also, You can pass arguments to the application as in the example below.
dotnet BitcrackRandomiser.dll target_puzzle=66 user_token=xxxx wallet_address=1eosEvvesKV6C2ka4RDNZhmepm1TLFBtw ...any other settings
Select the puzzle you want to scan. Default: 66
66
or 67
or 68
You can use 38
for test pool. There are 32 possible ranges in the test pool. You can find the test pool data on the website. Test pool data is reset every 30 minutes.
Currently only bitcrack
and vanitysearch
is available.
Possible Value | Description |
---|---|
bitcrack |
Scan with Bitcrack |
vanitysearch |
Scan with VanitySearch |
cpu |
Scan with CPU only |
Possible Value | Description |
---|---|
cuBitcrack |
For NVidia Cuda devices |
clBitcrack |
For AMD devices |
vanitysearch |
For VanitySearch and CPU support |
C:\{BITCRACK_PATH}\cuBitCrack.exe |
Example custom path on Windows |
{BITCRACK_PATH}/./cuBitCrack |
Example custom path on Linux |
NOTE: You can use OpenCL "clBitCrack.exe" for AMD devices on Bitcrack v0.30 only
You can write the arguments for Bitcrack or VanitySearch. For default settings leave blank.
-b 896 -t 256 -p 256
or -t 128
or you can leave blank.
Note: Do not use -o --keyspace
parameters.
You can create user token value by logging into your account at btcpuzzle.info. If you do not have an account, you can create a new account using your wallet address.
You can revoke the user token value at any time. However, when you do this, you must also enter the new value from the workers settings file.
Example user token value;
VDGcruTrDZ62EuJsE9IQUCiRIKRhZpXw6RPtcnk1jBxbROn1nxZixBMql8L2zxKwD9QXb1UZoWgrDf8IwciRDUHxHzwkNrDzNBpio2UdAx4rLYsjMnI887eqWGauszBl
Enter the BTC wallet address here.
1eosEvvesKV6C2ka4RDNZhmepm1TLFBtw
or 1eosEvvesKV6C2ka4RDNZhmepm1TLFBtw.worker1
You can specify a worker name like {wallet}.{worker}
Only alphanumeric is accepted. Max 16 characters. Do not use special characters. If you do not enter a worker name, it will be created automatically.
If you enter an invalid BTC address, it will show as "Unknown" in the system and you cannot follow your workers on your dashboard.
Note: You can only enter your wallet address registered to your membership account. If you enter any other address, you will get an error.
Specify the number of GPUs to use. Default: 1.
Each GPU performs a separate range scan.
If you are using more than one GPU, GPU indexes will be automatically added to the end of your worker address. Example: {worker}_0
or {worker}_1
Index number of the graphics card to be used. Use only if you are going to scan with a single graphics card.
If you have a single video card, use the value "0". If you are scanning with more than one graphics card, this field is disabled.
Only valid for VanitySearch. By default, VanitySearch uses 1 range to scan all graphics cards. If you set this setting to "true", each GPU scans different ranges.
In some systems with multi GPU, it works slightly better than the default setting.
You must have at least 2 GPUs to use this setting. You also need to update the "gpu_count" setting according to the number of graphics cards you have.
Select a scan type.
Possible Value | Description |
---|---|
default |
Scan anything that isn't scanned. |
includeDefeatedRanges |
Include defeated ranges. This does not scan ranges that have already been scanned! |
excludeIterated2 |
Exclude iterated ranges (2 iterated and more). Not good choice. Example: 1AFF1B3 |
excludeIterated3 |
Exclude iterated ranges (3 iterated and more). May be good choice. Example: 1AFFFB3 |
excludeIterated4 |
Exclude iterated ranges (4 iterated and more). Good choice. Example: 1AFFFF3 |
excludeContains3 |
Exclude contains ranges (3 and more). Not good choice. Example: 1FA1FF3 |
excludeContains4 |
Exclude contains ranges (4 and more). May be good choice. Example: 1FAFCFF |
excludeAlphanumericLoop |
Exclude if HEX contains only numbers or only letters. Example: 2572441 or BCAFFEB |
excludeEven / excludeOdd |
Exclude the even or odd numbered HEX range. You can only choose one. When you select any of them, the number of keys to be scanned decreases by 1/2. |
excludeStartsWith{XX} |
Exclude ranges that starts with. [Min 1, max 2 chars]. Example [1]: excludeStartsWith2 The range starting with 2 will not return.Example [2]: excludeStartsWith2A The range starting with 2A will not return.If you enter a value that you entered in the "custom_range" field, you will get a "reached of keyspace" error and the application will be stopped. |
You can make multiple settings using commas.
...
scan_type=excludeIterated3,excludeStartsWith2A,excludeStartsWith2B,excludeStartsWith3F
...
true
or false
It scans "pool rewards" addresses in addition to the target wallet address. If it finds the reward key it just creates a new text file and sends notification via telegram or api_share.
Even if the reward is found, the application continues to operate normally. The reward found can only be claimed by the person who scans the range where the private key is located.
Click for detailed "reward creation and claiming" diagram in PDF.
Scan custom range
none
Scan all of ranges.
2D
or 3BA
or 3FF1
Enter the first [2-5] characters of the range you want to scan. Only one value.
You can use specify ranges like 3400000:38FFFFF
. Incoming keys will be selected from this range. You must write the range in full length. Make sure you enter the correct range.
You can use percentiles like %5:%20
. In the example, only HEX values between 5% and 20% will be scanned.
Note: You can specify only one setting for the custom range field.
none
or https://{your_api_url}
Receive the all actions as a POST request to your own server. All values are requested as "header". Below you can see what data is coming.
IMPORTANT: If the key is found and an unsuccessful result is received from the API (body), it makes a unlimited attempts.
status // [workerStarted, workerExited, rangeScanned, reachedOfKeySpace, keyFound]
hex // Scanned HEX value
privatekey // Private key if that found
targetpuzzle // Which puzzle is being scanned [66,67,68 or 38]
workeraddress // Worker wallet address [1eosEvvesKV6C2ka4RDNZhmepm1TLFBtw]
workername // Worker name [worker1039]
scantype // Current scan type [default, includeDefeatedRanges]
I wrote a sample PHP script to get the data. It sends info to Telegram.
<?php
$headers = getallheaders();
$status = $headers['Status'];
$hex = $headers['Hex'];
$workeraddress = $headers['Workeraddress'];
$workername = $headers['Workername'];
$privatekey = $headers['Privatekey'];
$scantype = $headers['Scantype'];
$targetpuzzle = $headers['Targetpuzzle'];
if($status == "workerStarted"){
shareTelegram($workeraddress.$workername." started job!");
}
else if($status == "workerExited"){
shareTelegram($workeraddress.$workername." goes offline!");
}
else if($status == "rangeScanned"){
shareTelegram($hex." scanned by ".$workeraddress.$workername);
}
else if($status == "reachedOfKeySpace"){
shareTelegram($workeraddress.$workername." reached of keyspace!");
}
else if($status == "keyFound"){
shareTelegram("Congratulations! ".$workeraddress.$workername." found the key! Key is: ".$privatekey);
}
function shareTelegram($message){
$apiToken = "{telegram_api_token}";
$chatId= "{telegram_chat_id}";
$data = [
"chat_id" => $chatId,
"text" => $message
];
$response = file_get_contents("http://api.telegram.org/bot$apiToken/sendMessage?" . http_build_query($data) );
}
echo 'true';
?>
You must return true
as a result from the API. The returned value is checked only when the key is found and new requests are sent until it receives a 'true' response from the API (Unlimited attempts).
Share progress to Telegram
true
Share progress to Telegram.
false
If false, it does not send notification.
It sends a notification to Telegram when the private key is found. If you set "telegram_share_eachkey" to "true", it will send notification every time the scan is finished.
If your Telegram settings are correct, you will receive a notification that the worker has started working.
Suggestion: If you are on an untrusted computer, make the settings via the console and proceed without saving.
IMPORTANT: If the key is found and Telegram cannot transmit the key to you, it will make unlimited attempts.
Enter Telegram BOT access token
Example: 6331494066:ABEfv4cF3dbc3mA8qGLDlEp2uxzgYESIa_w
Enter Telegram chat id
Example: -9334716240
true
Send notification each key scanned.
false
It only sends a notification when the private key is found.
Leave true if you are working on an untrusted computer
true
When private key is found, it only sends it via Telegram or API share. Make sure your Telegram settings are correct. Otherwise, when the key is found, you will not be able to see it anywhere.
false
When private key is found, The private key will be saved in a new text file and it appears on console screen. If Telegram share is active, notification will be sent.
Start app in test mode if true
. You can test with custom parameters by creating a "customtest.txt" file in the app root folder.
1Cnrx6rxiGvVNw1UroYM5hRjVvqPnWC7fR // [TargetAddress]
2012E83 // [HexStart]
2012E84 // [HexEnd]
[TargetAddress] The private key you want to find
[HexStart] HEX range to start scanning
[HexEnd] HEX range to stop scanning
true
If the private key is found, the scan will continue until it is finished. The related range is marked as "scanned" (like others). The scanned range will never be scanned by another user again. Telegram or api share feature must be active or insecure computer feature must be false. Because the scan will continue, the private key will not appear on the console screen.
false
If the private key is found, the scanning process is terminated. No data is sent to the pool. It can be scanned again by another user after 12 hours (even with very low probability).
none
or {private_pool_id}
You can create your own pool for Puzzle 66, 67 and 68. Only the user who created this pool can use it and no other user can join.
Private pools use a database other than the main pool. That's why it's completely empty. Ranges scanned in the private pool just stay there. It is not transferred to another pool.
Private pools can be created. You can reach me via Telegram for create your own puzzle pool.
true
or false
.
Stores error and information messages in a text file. Logging is disabled by default.
- If you are working on someone else's computer, set "untrusted_computer" to "true". However, you need to change either "api_share" or "telegram_share" to "true".
- If possible, use "api_share" instead of "telegram_share". So you can save the private key in a file, send it via SMS or send it as mail.
- Set "app_arguments" according to GPU model. This will give you higher performance.
- I recommend using at least the "excludeIterated4" type in the scan type. It is very unlikely that such a private key will occur with hierarchically generated private keys.
- If you are scanning with more than one video card, you can split the ranges. Even with two graphics cards, you can easily double your chances.
- "DO NOT USE" closed-source bitcrack/vanitysearch app. Use only the one in the original repo or a open sourced bitcrack application. Make sure you're really working for yourself or someone else.
untrusted_computer=false
If the private key is found, it will appear on the console screen. Also, a new text file will be created in the folder where the application is run. (in the name of the target wallet address.)
untrusted_computer=true
If the private key is found, it will send your Telegram channel/group only.
[NOTE] => force_continue=true
and untrusted_computer=true
and if Telegram and APi share feature is turned off, you will never get the key! Use the force_continue feature with caution and do not use it if you are not sure what it does.
You can easily create your own image with the Dockerfile Docker image in the repo. With the Docker image, Bitcrackrandomiser, Bitcrack and VanitySearch will be pulled and built from the original github repos.
1 - Build docker file.
$ docker build -t bitcrackrandomiser .
2 - Tag the image (for push to hub). With your {username}/{image_name}:{tag}.
$ docker tag bitcrackrandomiser ilkercndk/bitcrackrandomiser:autorun
3 - Push image to docker hub or use it local!
- This is not a shared pool.
- If the private key is found, only you can see it. No one else can see!
- If the private key is found, it is not shared.
- Once a private key is scanned, it is not scanned again.
- Your luck; 1 in 33 million.
1eosEvvesKV6C2ka4RDNZhmepm1TLFBtw