Как белая бумага декодируется из блок-цепи (Tx с ~ 1000x м из n мультивыходных выходов)

Whitepaper, по-видимому кодируются на 54e48e5f5c656b26c3bca14a8c95aa583d07ebe84dde3b7dd4a78f4e4186e713 , который является м п multisig Ой с 947 выходов (как раз под пределом scriptsig 20kB!).

Используя Blocktrail Python SDK , я получаю список результатов как шестнадцатеричный, используя следующий Python (2.7 ) (NB, параметры APIKEY , APISECRET доступны, если требуется, из www.blocktrail.com ):

from blocktrail import APIClient
bt_client = APIClient(APIKEY, APISECRET, network='BTC')
txnObj = bt_client.transaction('54e48e5f5c656b26c3bca14a8c95aa583d07ebe84dde3b7dd4a78f4e4186e713')
hashes = [(t['script_hex']) for t in (txnObj)['outputs']]   

Полученный список доступен здесь полностью и, по сути, является всем Txns с платной подпиской. Выдержка:

[u'5141e4cf0200067daf13255044462d312e340a25c3a4c3bcc3b6c39f0a322030206f626a0a3c3c2f4c656e6774682033203020522f46696c7465722f466c617465446541636f64653e3e0a73747265616d0a789cad5c4b8b24b911becfafa8b3a1da292925654253d0d55373f06d61c007e39bbd061f0cde8bffbe25c55b5266f61ab3905d419ba54728e28bb76a963777fbcfb77fdf96db7d291f93f3e599f7fafcedefb73fffe1f6aff665fdefb77f7c7bfefce6c2fa166e695bdfd6dbcfbfddfef8c3dd5cf953ae',
.....
u'514130206e200a30303030313832353430203030303030206e200a747261696c65720a3c3c2f53697a652036382f526f6f74203636203020520a2f496e666f20363720413020520a2f4944205b203c43413142304134344244353432343533424546393138464643443436444330343e0a3c4341314230413434424435343234353342454641393138464643443436444330343e205d0a2f446f63436865636b73756d202f36463732454137353134444641443233464142434337413535303032314146370a3e53ae',
 u'51213e0a7374617274787265660a3138323732370a2525454f460a000000000000000051ae',
 u'76a91462e907b15cbf27d5425399ebf6f0fb50ebb88f1888ac',
 u'76a914031c79236ff3017496cf8d9a883f494458f245f288ac']

ВОПРОС: . Как этот массив шестнадцатеричных данных анализируется в bitcoin.pdf ? Конкретные ответы в стиле Python будут оценены!

22 голоса | спросил Wizard Of Ozzie 9 FebruaryEurope/MoscowbMon, 09 Feb 2015 11:51:45 +0300000000amMon, 09 Feb 2015 11:51:45 +030015 2015, 11:51:45

1 ответ


21

Это забавная маленькая головоломка на блокхейне, в основном. Во-первых, вам нужно немного узнать о pdf и о том, как они структурированы, что вы можете найти .

Во-вторых, вы заметите из раздела 3.4.1, что все файлы pdf начинаются с этой строки:

%PDF-

В шестнадцатеричном формате это 255044462d. И действительно, это самый первый выход в первой голой многоязычной панели:

<e4cf0200><067daf13>**255044462d**312e340a25c3a4c3bcc3b6c39f0a322030206f626a0a3c3c2f4c656e6774682033203020522f46696c7465722f466c6174654465

Я не понял, для чего нужны первые 8 байтов (â ™ | edit : e4cf0200067daf13 = 2x 4byte little Endian "checksums", see @WizardOfOzzie comment below), но остальные голые мультисимвольные ключи (все между 1 и 3 OP_CHECKMULTISIG в каждом выходе - обратите внимание, что последний из них один из 1, так что это 1 OP_CHECKMULTISIG) являются фрагментами данных для pdf, и они находятся в заказ. Если вы можете поместить все шестнадцатеричные цифры голых мультисимвольных ключей в один файл (без пробелов), называемый «fromblockchain.hex», вы можете запустить эту очень простую программу для извлечения pdf:

contents = open('fromblockchain.hex').read()
bytes = contents[16:].decode('hex')
f = open("bitcoin.pdf")
f.write(bytes)
f.close()

Это должно создать биткойн.pdf, который является фактическим документом сатоши. Я протестировал это, и действительно, это технический документ. Хорошо знать, что это буквально в блокчейне.

В качестве альтернативы, если у вас есть биткойны, запущенные на вашем компьютере, вы можете запустить этот сценарий python, чтобы захватить биткойновую техническую документацию:

import subprocess

# raw = full hex of raw Tx using Bitcoin-cli
raw = subprocess.check_output(["bitcoin-cli", "getrawtransaction", "54e48e5f5c656b26c3bca14a8c95aa583d07ebe84dde3b7dd4a78f4e4186e713"])

outputs = raw.split("0100000000000000")

pdf = ""
for output in outputs[1:-2]:
    # there are 3 65-byte parts in this that we need
    cur = 6
    pdf += output[cur:cur+130].decode('hex')
    cur += 132
    pdf += output[cur:cur+130].decode('hex')
    cur += 132
    pdf += output[cur:cur+130].decode('hex')

pdf += outputs[-2][6:-4].decode("hex")
f = open("bitcoin.pdf", "wb")
f.write(pdf[8:])
f.close()
ответил Jimmy Song 9 FebruaryEurope/MoscowbMon, 09 Feb 2015 23:21:40 +0300000000pmMon, 09 Feb 2015 23:21:40 +030015 2015, 23:21:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132