Einige Teile von bitcoin tx Ex: Script haben eine variable Länge var_int . Kann jemand erklären, wie man seinen Wert aus dieser var_int- Tabelle berechnet.
Bsp.: Im folgenden TX ist der fettgedruckte Teil in Skriptlänge. seine Länge soll 349 Byte betragen. Wenn ich fd5d01
direkt in Dezimalzahlen umwandle, ist der Wert 16604417. Ich glaube, ich habe die var_int- Tabelle nicht richtig verstanden.
01000000013dcd7d87904c9cb7f4b79f36b5a03f96e2e729284c09856238d5353e1182b00200000000 fd5d01004730440220762ce7bca626942975bfd5b130ed3470b9f538eb2ac120c2043b445709369628022051d73c80328b543f744aa64b7e9ebefa7ade3e5c716eab4a09b408d2c307ccd701483045022100abf740b58d79cab000f8b0d328c2fff7eb88933971d1b63f8b99e89ca3f2dae602203354770db3cc2623349c87dea7a50cee1f78753141a5052b2d58aeb592bcf50f014cc9524104a882d414e478039cd5b52a92ffb13dd5e6bd4515497439dffd691a0f12af9575fa349b5694ed3155b136f09e63975a1700c9f4d4df849323dac06cf3bd6458cd41046ce31db9bdd543e72fe3039a1f1c047dab87037c36a669ff90e28da1848f640de68c2fe913d363a51154a0c62d7adea1b822d05035077418267b1a1379790187410411ffd36c70776538d079fbae117dc38effafb33304af83ce4894589747aee1ef992f63280567f52f5ba870678b4ab4ff6c8ea600bd217870a8b4f1f09f3a8e8353aeffffffff0130d90000000000001976a914569076ba39fc4ff6a2291d9ea9196d8c08f9c7ab88ac00000000
Kann mir jemand die Regeln aus dieser Tabelle erklären?
es ist viel einfacher, lass einfach das "fd" weg. Hier ist die Erklärung von den Webseiten der Bitcoin-Entwickler.
Angenommen, Sie haben den Wert in einem Array (tx_array) und einen Zeiger auf das Array (tx_array_ptr), hier ist ein (unixoides Shell-Skript) Codebeispiel:
# var_int is defined as:
# value size Format
# < 0xfd 1 uint8_t
# <= 0xffff 3 0xfd + uint16_t
# <= 0xffffffff 5 0xfe + uint32_t
# - 9 0xff + uint64_t
# if value <= 0xfd, Bytes = 1
# if value = 0xfd, Bytes = 2
# if value = 0xfe, Bytes = 4
# if value = 0xff, Bytes = 8
var_int=${tx_array[$tx_array_ptr]}
if [ "$var_int" == "FD" ] ; then
tx_array_ptr=$(( $tx_array_ptr + 1 ))
tx_array_bytes=2
var_int=$( get_TX_section )
elif [ "$var_int" == "FE" ] ; then
tx_array_ptr=$(( $tx_array_ptr + 1 ))
tx_array_bytes=4
var_int=$( get_TX_section )
elif [ "$var_int" == "FF" ] ; then
tx_array_ptr=$(( $tx_array_ptr + 1 ))
tx_array_bytes=8
else
var_int=${tx_array[$tx_array_ptr]}
fi
Wenn Sie Ihre var_int haben, vergessen Sie nicht, die Hex-Werte umzukehren (Big-Endian-Konvertierung)! Dann kannst du den Wert zB an deinen Dezimalkonverter schicken, also bekommst du für deinen Wert (fd5d01):
Verwendung von "bc", um den Wert in Dezimalzahlen umzuwandeln:
$ echo "ibase=16;015D" | bc
349