My question is: In BTC ADRESS i put any adress that i choose from my bitcoin-qt wallet?
হ্যাঁ!! আপনি মূলত উত্পন্ন ব্যবহার করবেন গৃহীত আপনার বিটিসি ওয়ালেটের সাথে যুক্ত ঠিকানা এবং এটিকে আপনার মূল্য হিসাবে ব্যবহার করুন createrawtransaction
ঠিকানা পরামিতি ক্ষেত্র।
যদিও আপনাকে কল করতে হবে getnewaddress
আপনার কাছে উপলব্ধ যেকোনো মাধ্যমে অর্ডার করুন যার পরে আপনি এটি ব্যবহার করতে পারেন।
,
আপনার বিটকয়েন-ক্লি বা বিটকয়েন্ড এক্সিকিউটেবল ফাইলটি অবস্থিত যেখানে আপনি ইতিমধ্যেই ডিরেক্টরি পরিবর্তন করেছেন বলে ধরে নিচ্ছেন
সিএমডি পদ্ধতিটি এইরকম দেখতে হবে:
bitcoin-cli getnewaddress
যা cmd টার্মিনাল উইন্ডোতে নতুন তৈরি ঠিকানা প্রদর্শন করবে।
bitcoin-cli getnewaddress > newlygenerated_BTC_address.txt
যা একটি টেক্সট ফাইলে আউটপুট সংরক্ষণ করবে
জিনিসগুলিকে আরও গতিশীল করতে আপনাকে এমন দিকগুলি পরিচালনা করতে ব্যাচ স্ক্রিপ্ট লিখতে হবে যা আপনার প্রোগ্রামিং ভাষা পরিচালনা করতে সক্ষম নয়। তবে আশা করি আপনি ধারণা পেয়েছেন।
And if i double hash the given hex result returned to me, without adding any other transaction, this can be the merkleroot (with only the coinbase transaction) and use it to build the blockheader?
হ্যাঁ. আপনি MerkleRoot হিসাবে অদলবদল না করে কাঁচা লেনদেনের ডেটার ডবল হ্যাশ ফলাফল সন্নিবেশ করবেন (খনির জন্য ব্লকহেডার অদলবদল করার সময় এটি পরে করা হবে)। আপনি যদি দুবার অদলবদল করেন, তাহলে আপনি ভুল কয়েনবেস হ্যাশের সাথে শেষ হবেন।
উপরন্তু, আপনি কিছু জিনিস রাখা এবং সংশোধন করতে হবে.
এর হেক্স প্রতিক্রিয়া অনুমান createrawtransaction
আউটপুট -> 02000000010000000000000000000000000000000000000000000000000000000000000000ffffff7f00ffffffff0140be402500000000160014f68d712fa6f49cdfaaa1707a9d0234e2aabb3f1100000000
,
02000000010000000000000000000000000000000000000000000000000000000000000000ffffff7f00ffffffff0140be402500000000160014f68d712fa6f49cdfaaa1707a9d0234e2aabb3f1100000000
____________________________________________________________________
02000000 - Tx version -- 8 bytes
____________________________________________________________________
01 - input count -- 2 bytes
____________________________________________________________________
0000000000000000000000000000000000000000000000000000000000000000 - txid -- 64 bytes
____________________________________________________________________
ffffff7f - vout -- 8 bytes
____________________________________________________________________
00 - size of scriptsig -- MAX OF 100 bytes
____________________________________________________________________
- scriptsig size is missing - hexadecimal value
- byte push is missing - hexadecimal value
- block height (little endian) is missing - hexadecimal value
- arbitrary data(extranonce/message) is missing - hexadecimal value
____________________________________________________________________
ffffffff - input sequence -- 8 bytes
____________________________________________________________________
01- number of output -- 2 bytes
____________________________________________________________________
40be402500000000 - reward/Output Value -- 16 bytes
____________________________________________________________________
160014f68d712fa6f49cdfaaa1707a9d0234e2aabb3f11 - scriptPubkey -- 46 bytes (dynamic in length)
____________________________________________________________________
00000000 - locktime
____________________________________________________________________
আমার C++ সমাধান:
bHeight - Block height as given by **```getblocktemplate```** response
Headers needed - sstream, string, iostream.
Namespaces used - using std::stringstream, using std::string.
string SwapBlockHeight(string data)
{
string bits; // global return variable
if(data.size() == 5)
{
string byte1, byte2, byte3;
byte3 = data.substr(5, 2);
byte2 = data.substr(3, 2);
byte1 = data.substr(1, 2);
bits = byte3 + byte2 + byte1;
}
else if(data.size() == 6)
{
string byte1, byte2, byte3;
byte3 = data.substr(4, 2);
byte2 = data.substr(2, 2);
byte1 = data.substr(0, 2);
bits = byte3 + byte2 + byte1;
}
else if(data.size() == 8)
{
string byte1, byte2, byte3, byte4;
byte4 = data.substr(6, 2);
byte3 = data.substr(4, 2);
byte2 = data.substr(2, 2);
byte1 = data.substr(0, 2);
bits = byte4 + byte3 + byte2 + byte1;
}
return bits;
}
string GETLittleEndian_BlockHeight(uint32_t bHeight)
{
string reversedDATA;
char i[25];
sprintf(i, "%x", bHeight);
stringstream aa;
aa << i;
aa >> reversedDATA;
// reversedDATA = SwapBlockHeight(reversedDATA);
// Optimized approach of above function call is applied below
// Assuming hex conversion result is = "1d34f589"
string byte;
// Optimized approach
for (int i = 0, k = 0; i < reversedDATA.length()/2; i++)
{
byte += reversedDATA.substr(k, 2);
k+=2;
}
reversedDATA = byte; // or you could just return byte itself
// reversedDATA.length()/2 - because we will be done with our goal in half the total size.
return reversedDATA;
}
Bytepush = "03";
Blockheight_littleEndian = GETLittleEndian_BlockHeight(bHeight);
ArbitraryData = "abcdefgh"; // Anything within 100 bytes .. 1 char == 2 bytes
scriptsig_Size = Bytepush.length() + Blockheight_littleEndian.length() + ArbitraryData.length();
// ALL VALUES ARE HEXADECIMAL
JSON পার্সার/সিরিয়ালাইজেশন খুঁজছেন??
- পাওয়া লোহম্যান জসন লাইব্রেরি
- প্রকল্প ফোল্ডারে অন্তর্ভুক্ত করুন
একটি সামান্য ব্যাচ স্ক্রিপ্ট ব্যবহার করা হয়েছে কিন্তু কিছুই উন্নত.
#include "json.hpp" // for json serialization parser
#include <fstream> // for ifstream
#include <stdlib.h> // for system calls
#include "windows.h" // if on windows
using namespace nlohmann;
using std::ifstream;
inline void RunCommand_With_Output_Without_SYMBOL_Defined(string Command_To_Run, string Output_FileName)
{
string xx_combine = Command_To_Run + " >" + Output_FileName;
char run_command[xx_combine.length()];
strcpy(run_command, xx_combine.c_str());
system(run_command); // execute the command
// std::cout << ifstream(Output_FileName).rdbuf(); // print to console -- FOR DEBUGGING ONLY!!
} // Successfully compiled on 20/01/2022 10:20PM
void GETBLOCKTEMPLATE()
{
string getblocktemplate_syntax = "cd \"C:\\Users\\YOUR DESKTOP NAME\\Desktop\\Z Code\" && call gt.bat";
string filename = "getblocktemplate_Response.json"; // Create file Name
RunCommand_With_Output_Without_SYMBOL_Defined(getblocktemplate_syntax, filename); // create json file with getblockresponse output
} // Successfully compiled on 31/01/2022 11:30AM
uint32_t Get_BLOCK_HEIGHT_asInteger()
{
uint32_t f;
ifstream file_input("getblocktemplate_Response.json");
json object = json::parse(file_input); // Parse json data
file_input.close(); // close streamer
f = object.at("height");
return f;
}
ব্যাট ফাইলের ভিতরে কি আছে??
gt.bat
@echo off
cd "C:\Users\YOUR DESKTOP NAME\Desktop\Z Code" && bitcoin-cli getblocktemplate {\"rules\":[\"segwit\"]}
rem or
cd "C:\Users\YOUR DESKTOP NAME\Desktop\Z Code" && bitcoin-cli getblocktemplate {\"rules\":[\"segwit\"]}
Rem copy file created to destination folder
copy "C:\Users\YOUR DESKTOP NAME\Desktop\Z Code\getblocktemplate_Response.json" "C:\Users\YOUR DESKTOP NAME\Desktop\Z Code\COINBASE ONLY\BITCOIN_Miner"
মন্তব্য!! – json ফাইলটিকে এক পাথ থেকে অন্য পাথে কপি করা শুধুমাত্র তখনই প্রয়োজনীয় যদি আপনার gt.bat হেডার ফাইল সহ আপনার প্রোজেক্ট রুট ফোল্ডারে না থাকে। এটি পরবর্তীতে ত্রুটির কারণ হবে কারণ json ফাইলটি যতটা তৈরি করা হয়েছে এবং ব্লক টেমপ্লেট প্রতিক্রিয়াটি ধরে রেখেছে তা খুঁজে পাওয়া যাবে না যদি না আপনি json রিডারকে যে ফোল্ডার থেকে এটি তৈরি করা হবে সেখানে যেতে এবং এটিকে সেখানে রাখুন।
এটি অনুরোধের চেয়ে অনেক বেশি কিন্তু অন্যরা এই তথ্যটি দরকারী বলে মনে করতে পারে। আমি পরে Github এ একটি সংগ্রহস্থল তৈরি করব।
আপনার যা প্রয়োজন নেই তা উপেক্ষা করুন।
উত্সাহিত করা