Netidee Blog Bild
Daten in Blockchain "verstecken"
Daten in der Blockchain verewigen (10.07.2018)
Förderjahr 2017 / Project Call #12 / ProjektID: 2200 / Projekt: BlockNinjas

Jemand möchte z.B. den Hashwert einer Datei in der Blockchain verewigen oder ein Bild oder eine ganze Datei speichern. Wie bei WikiLeaks gesehen oder beim Ethereum Gründer Vitalik Buterin, der sich mit einem Bild zu einem gewissen Zeitpunkt in der Ethereum Blockchain verewigte um zu Beweisen, dass er noch lebe.

Um das ganze bei Bitcoin zu tun, sollte man sich den Bitcoin Core Client installieren und danach in die Debug Console wechseln. Wichtig: Die Bitcoin, die dafür ausgebracht werden, sind danach "burned", d.h. man kann diese NICHT WIEDER VERWENDEN und sind somit VERLOREN!

Um das ganze durchzuführen, listet man sich bei sich in der Console alle "UTXOs" (folgendes Beispiel wird in Testnet abgebildet):

> listunspent

[
  {
    "txid": "b17a5d2df8dcf3dd0e296230c869150fcce8c6fe05f2da8b4c2ee54a70ac9a1c",
    "vout": 1,
    "address": "2N8uH8n6MGno62hyDwisVZ7BHKvV3PDrQ4V",
    "account": "",
    "redeemScript": "00144b6e7efaee0a5f969edd19f3ee746672dea45e99",
    "scriptPubKey": "a914abbc51e081f0ed248ed41e53e2868180a3c9b82a87",
    "amount": 0.00100000,
    "confirmations": 5,
    "spendable": true,
    "solvable": true,
    "safe": true
  },
  {
    "txid": "4b79beab07ddea342a4343d31104bac9fcd94ecea5108667f677905d2cefe32b",
    "vout": 1,
    "address": "2N8Y9Xr87YXcjDv8DLwgJEDRJrB3G6Qw9pK",
    "redeemScript": "0014ad936949aef312fc00ab7adfce8085be254d9b41",
    "scriptPubKey": "a914a7bd3d1498a8d283840211216e085e8dc894261387",
    "amount": 2.02154396,
    "confirmations": 20,
    "spendable": true,
    "solvable": true,
    "safe": true
  }
]

Wir wollen nun den Amount von 0.001 BTC verwenden um eine Nachricht in die Testnet Blockchain zu schreiben. Wir schreiben "Erhard was here!" und müssen das vorher in eine Hex-Darstellung umwandeln. Das machen wir mithilfe: http://string-functions.com/string-hex.aspx. Das ergibt: "45726861726420776173206865726521". Davor stellen wir den OP-Code "OP_RETURN", der den wert 6A hat (siehe https://en.bitcoin.it/wiki/Script). Somit ergibt es "6A45726861726420776173206865726521". Dies verfassen wir in das Erstellen einer Transaktion für die Console mit folgendem Befehl und Ergebnis:

> createrawtransaction '[{"txid":"b17a5d2df8dcf3dd0e296230c869150fcce8c6fe05f2da8b4c2ee54a70ac9a1c", "vout":1}]' '{"data":"6a45726861726420776173206865726521"}'

02000000011c9aac704ae52e4c8bdaf205fec6e8cc0f1569c83062290eddf3dcf82d5d7ab10100000000ffffffff010000000000000000136a116a4572686172642077617320686572652100000000

Nun überprüfen wir diese Daten mit:

> decoderawtransaction 02000000011c9aac704ae52e4c8bdaf205fec6e8cc0f1569c83062290eddf3dcf82d5d7ab10100000000ffffffff010000000000000000136a116a4572686172642077617320686572652100000000

{
  "txid": "63c80a237313d5aa5a6ee597570056b275a5d2e1ed66a53b507de76dacbfb2e6",
  "hash": "63c80a237313d5aa5a6ee597570056b275a5d2e1ed66a53b507de76dacbfb2e6",
  "version": 2,
  "size": 79,
  "vsize": 79,
  "locktime": 0,
  "vin": [
    {
      "txid": "b17a5d2df8dcf3dd0e296230c869150fcce8c6fe05f2da8b4c2ee54a70ac9a1c",
      "vout": 1,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.00000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_RETURN 6a45726861726420776173206865726521",
        "hex": "6a116a45726861726420776173206865726521",
        "type": "nulldata"
      }
    }
  ]
}

Wie man sieht, sind die Daten die, welche wir eingegeben haben. Nun signieren wir die Transaktion mit dem gleichen Wert den wir an decoderawtransaction übergeben haben:

> signrawtransaction 02000000011c9aac704ae52e4c8bdaf205fec6e8cc0f1569c83062290eddf3dcf82d5d7ab10100000000ffffffff010000000000000000136a116a4572686172642077617320686572652100000000

Als Ergebnis erhalten wir:

'{"hex":"......", "complete": true}'

Nun müssen wir nur noch die Transaktion ins Netzwerk broadcasten. Dies geschieht mithilfe von dem Befehl "sendrawtransaction". Diesem Befehl übergeben wir lediglich den Wert, der im Wert "hex" steht. mit:

> sendrawtransaction '....'

88786231b1767f6e5fc021f7da90afe1d529ad6bbcb05adc543f5ee3704d8c30

Als Ergebnis erhalten wir die Transaktions ID bzw. Hash. Dieser kann nun eingesehen werden und man sieht unsere Nachricht: https://www.blocktrail.com/tBTC/tx/88786231b1767f6e5fc021f7da90afe1d529ad6bbcb05adc543f5ee3704d8c30

Tags:

blockchain Open Source Daten bitcoin

Erhard Dinhobl

Profile picture for user erhard.dinhobl

Skills:

Software Engineering
,
Machine Learning
,
blockchain
,
Bitcoin
,
C++
,
C
,
Python
,
Java
CAPTCHA
Diese Frage dient der Überprüfung, ob Sie ein menschlicher Besucher sind und um automatisierten SPAM zu verhindern.
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.
    Profile picture for user fabianekc
    10.07.2018
    So ein Zufall - genau heute habe ich ebenfalls einen Blogpost zu diesem Thema verfasst: https://www.netidee.at/ownyourdata-20/dokumente-versiegeln Wir verwenden allerdings die Ethereum Blockchain und bieten eine öffentliche API (https://blockchain.ownyourdata.eu) sowie eine Webseite zur einfachen Verwendung an: https://seal.ownyourdata.eu lG, Christoph von OwnYourData

    Weitere Blogbeiträge