Converting from Base64 PSBT Transaction to Raw/Serialized Hex
In this article, we will explore the process of converting a base64 encoded PSBT (binary script files) transaction to its raw and serialized (hex) format. We will use the Bitcoin Core CLI as a toolkit.
Prerequisites
- Familiarity with the basics of Bitcoin and its blockchain architecture.
- Understanding of the PSBT and Base64 encoding standards.
Step 1: Convert Base64 PSBT Transaction to Raw
To convert a base64 encoded PSBT transaction, we need to use the psbt
command line tool provided by Bitcoin Core. The converttopsbt
command is used for this purpose. Here is an example of how to use it:
bitcoincore-cli converttopsbt
Replace
with the actual base64-encoded PSBT transaction as seen in the Bitcoin Core output.
Step 2: Convert raw transaction to serialized hex
After converting the PSBT transaction from raw format, we need to convert it to its serialized (hex) format. We can again use a tool like psbt
or use the cointool
library for this purpose.
Here is an example of how to convert a raw transaction from the Bitcoin Core CLI:
bitcoincore-cli cointool -t raw2hex
Replace
with the actual raw transaction as seen in the Bitcoin Core output.
Step 3: Compare and Verify
To make sure your conversion process is correct, we can compare the base64-encoded PSBT transaction with its serialized (hex) equivalent:
bitcoincore-cli cointool -t hex2raw
This command will create a raw transaction from the original base64-encoded transaction.
Sample output
Here is a sample output for the above steps, using a fictional PSBT transaction as input:
Base64 encoded PSBT transactionPSBT("1.3.0", {
"encoding": "base64",
"scriptSig": ["01010100000000000000000000000000000000"],
"blocknumber": "100,000",
"transactionIndex": "500000"
})
Conversion code
Here is a simple Python script to convert from base64 to raw and then serialized hex:
import base64
import json
def base64_to_tsb(base64_transaction):
Use the command line tool psbt provided by Bitcoin Coreoutput = bitcoincore-cli converttopsbt(base64_transaction)
return json.loads(output)
def tsb_to_raw(tsb_json, encoding="base64"):
Use the cointool library to convert from raw to hexif encoding == "raw":
return cointool(tsb_json, "hex2raw")
elif encoding == "hex":
return cointool(tsb_json, "hex2raw")
Example usagebase64_transaction = "psbt(\"1.3.0\", {\"encoding\":\"base64\", \"scriptsig\":[\" 0101000000000000000000000000000000 \ ", \" Blocknumber \ ": \" 100000 \ ", \" TransactionIndex \ ": \"500000 \" })"
tsb_json = base64_to_tsb(base64_transaction)
raw_hex = tsb_to_raw(tsb_json, encoding="hex")
print(raw_hex)
Output:
In this code example, we first convert the base64-encoded PSBT transaction into a Python dictionary using json.loads()
. We then use the cointool
library to convert it from raw to hexadecimal. The result is printed as raw and serialized (hex) transactions.
Conclusion
Conversion between base64-encoded and raw/serialized (hex) formats in Bitcoin Core involves two steps: first, converting the PSBT transaction from base64 to raw; second, converting the raw transaction to its serialized (hex) equivalent. This process can be achieved using various tools and libraries provided by the Bitcoin Core CLI.