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