読者です 読者をやめる 読者になる 読者になる

TXEDITORを使ってデータアウトプット(OP_RETURN)トランザクションを作る

今回はOP_RETURN

前回はトランザクション作成ツール「TXEDITOR」を使ってマルチシグネチャトランザクションを作成しました。今回はOP_RETURNトランザクションを作ります。

blog.yzono.com

OP_RETURNトランザクションのscript

OP_RETURN scriptはOP_RETURN <data>です。

TXEDITORによるトランザクション作成 (P2PKH to OP_RETURN)

1.事前準備

  • (1) bitcore-libインストール
  • (2) 新規アドレス作成JS作成
  • (3) 送信元アドレス作成
  • (4) 送信元アドレスにBitcoinを送付

(1) bitcore-libインストール

$ mkdir /tmp/txeditor
$ cd /tmp/txeditor
$ npm install bitcore-lib
$ vi new_address.js

(2) 新規アドレス作成JS作成 (new_address.js)

var bitcore = require('bitcore-lib');
var network = 'testnet';
var privateKey = new bitcore.PrivateKey(network);
console.log("Private Key : " + privateKey.toString());
console.log("Private Key (WIF) : " +privateKey.toWIF());
console.log("Public Key : " + privateKey.toPublicKey().toString());
console.log("Bitcoin Address : " + privateKey.toPublicKey().toAddress().toString());

(3) 送信元アドレス作成

$ node new_address.js 
Private Key : ad6d5e5d3026295a72278643216923eaab0fc15be9edff2bd0eb11191164a006
Private Key (WIF) : cTPpbmM8AgdnPa3LmjwgRaLKwFCy7HNSo5EgNikUKGRTeANcL3qD
Public Key : 02179153f2c204e1da5009d0a8fd5cc1b77d304c9f6baf78d46a5e5fdf719f9d5a
Bitcoin Address : msnignvjGzqWm4jGaQW6dBH2DuF7jCaMmi

(4) 送信元アドレスにBitcoinを送付

以下サイトから送信元アドレスを入力するとTestnetで使えるBitcoinがもらえます

http://tpfaucet.appspot.com/

2.送信元のUTXO取得

UTXOはIndieSquare APIを利用して取得します。

$ curl https://apitestnet.indiesquare.me/v2/addresses/msnignvjGzqWm4jGaQW6dBH2DuF7jCaMmi/utxos

[
   {
      "scriptPubKey":"76a914869cce31ac6d760840109da55bd1957c82fbb59588ac",
      "vout":1,
      "confirmations":0,
      "txid":"e0022d1916acad2115a9f087af767d1e1e29f3f33d74b8b44e7999f5c0c8e722",
      "amount":0.88
   }
]

3.TXEDITOR (Script)を入力

  • Script = Signature + Hash Type<改行>48656c6c6f⭐

#48656c6c6fはHelloです。http://string-functions.com/string-hex.aspx

スクリーンショット 2017-02-15 21.54.30.png

4.TXEDITOR (Transactionタブ)を入力

  • txins[0].outpoint.hash = utxoのtxid
  • txins[0].outpoint.index = utxoのvout
  • txins[0].signature_script = utxoのscriptPubKey
  • txouts[0].value = utxo.amount * 100000000 - 100000 = 87900000
  • txouts[0].pk_script = Script.hex

スクリーンショット 2017-02-15 21.54.51.png

5.TXEDITOR (Signature(HASHTYPE_ALL))を入力

  • Private key (WIF/HEX) = 送信元のPrivate Key (WIF)

スクリーンショット 2017-02-15 21.55.14.png

6.TXEDITOR (Script)を入力

  • Script = Signature + Hash Type<改行>送信元のPublic Key

スクリーンショット 2017-02-15 21.55.46.png

7.TXEDITOR (Transactionタブ)を入力

  • txins[0].signature_script = Script.Hex

スクリーンショット 2017-02-15 21.56.13.png

8.decodeRawTransaction実行

確認のために、decodeRawTransactionを実行

curl -H "Content-Type: application/json" -X POST -d '{"tx": "010000000122e7c8c0f599794eb4b8743df3f3291e1e7d76af87f0a91521adac16192d02e0010000006a473044022006d2c87e47c690b1a06b9ff5e47161f051289bb8247eb60d9c7af82471e26d20022059b5246b6c795914e25fbf7a95b8c4cc8584a791b1f1e4ec06fb6e0fdeb142ff012102179153f2c204e1da5009d0a8fd5cc1b77d304c9f6baf78d46a5e5fdf719f9d5affffffff01603f3d0500000000076a0548656c6c6f00000000"}' https://apitestnet.indiesquare.me/v2/transactions/decode

レスポンス

{
   "txid":"67ba9bcd714c07ca8d2355bf617bceefd5e89271c93ceab8c36707ae408d57b8",
   "size":173,
   "version":1,
   "locktime":0,
   "vin":[
      {
         "txid":"e0022d1916acad2115a9f087af767d1e1e29f3f33d74b8b44e7999f5c0c8e722",
         "vout":1,
         "scriptSig":{
            "asm":"3044022006d2c87e47c690b1a06b9ff5e47161f051289bb8247eb60d9c7af82471e26d20022059b5246b6c795914e25fbf7a95b8c4cc8584a791b1f1e4ec06fb6e0fdeb142ff[ALL] 02179153f2c204e1da5009d0a8fd5cc1b77d304c9f6baf78d46a5e5fdf719f9d5a",
            "hex":"473044022006d2c87e47c690b1a06b9ff5e47161f051289bb8247eb60d9c7af82471e26d20022059b5246b6c795914e25fbf7a95b8c4cc8584a791b1f1e4ec06fb6e0fdeb142ff012102179153f2c204e1da5009d0a8fd5cc1b77d304c9f6baf78d46a5e5fdf719f9d5a"
         },
         "sequence":4294967295
      }
   ],
   "vout":[
      {
         "value":0.879,
         "n":0,
         "scriptPubKey":{
            "asm":"OP_RETURN 48656c6c6f",
            "hex":"6a0548656c6c6f",
            "type":"nulldata"
         }
      }
   ]
}

9.broadcast実行

broadcast実行

curl -H "Content-Type: application/json" -X POST -d '{"tx": "010000000122e7c8c0f599794eb4b8743df3f3291e1e7d76af87f0a91521adac16192d02e0010000006a473044022006d2c87e47c690b1a06b9ff5e47161f051289bb8247eb60d9c7af82471e26d20022059b5246b6c795914e25fbf7a95b8c4cc8584a791b1f1e4ec06fb6e0fdeb142ff012102179153f2c204e1da5009d0a8fd5cc1b77d304c9f6baf78d46a5e5fdf719f9d5affffffff01603f3d0500000000076a0548656c6c6f00000000"}' https://apitestnet.indiesquare.me/v2/transactions/broadcast

レスポンス

{
   "txid":"67ba9bcd714c07ca8d2355bf617bceefd5e89271c93ceab8c36707ae408d57b8"
}

9.broadcast実行結果

送信できました。

https://www.blocktrail.com/tBTC/tx/67ba9bcd714c07ca8d2355bf617bceefd5e89271c93ceab8c36707ae408d57b8

メッセージ「Hello」も表示されています。

スクリーンショット 2017-02-15 22.21.03.png

OP_RETURNトランザクションはUTXOにならないので(消費できないので)、今回はこれでおしまいです。