বিটকয়েন কোর থেকে কয়েনবেস লেনদেন কিভাবে তৈরি করবেন?

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 পার্সার/সিরিয়ালাইজেশন খুঁজছেন??

  1. পাওয়া লোহম্যান জসন লাইব্রেরি
  2. প্রকল্প ফোল্ডারে অন্তর্ভুক্ত করুন

একটি সামান্য ব্যাচ স্ক্রিপ্ট ব্যবহার করা হয়েছে কিন্তু কিছুই উন্নত.

#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 এ একটি সংগ্রহস্থল তৈরি করব।

আপনার যা প্রয়োজন নেই তা উপেক্ষা করুন।

উত্সাহিত করা

Source link

Leave a Comment