アルゴリズムとかオーダーとか

仕事で勉強したことなどをまとめてます

segwitのtransactionを作ってみる

0bin.net
にmulti-sigでのsegwit transactionの作り方は乗ってたけど、普通のアドレスでの作り方が調べてもなかったのでいろいろ試してみた結果を載せておきます。

結論としては、signrawtransactionがうまく作れなくて頓挫してます・・・。

とりま、発行したコマンドのログを載せておきます。


1. unspentの確認

< listunspent
>
[
  {
    "txid": "d1002f69e5cf73de303ba94eddd4cd82eecb925504f3ea0f336d47371c49eac5",
    "vout": 1,
    "address": "mhug1wyHQaoovW1nQJ1oixTPgucvYUaJRQ",
    "account": "nakajo_test1",
    "scriptPubKey": "76a9141a3c3b1376b5579493d29ed855ec51bb3a7c833388ac",
    "amount": 0.28000000,
    "confirmations": 11,
    "spendable": true,
    "solvable": true
  }
]

2. witnessaddressを作る

< addwitnessaddress mvYhu2m52jPhKCAGidbyWy96xqgYMYkYdu
> 2MwG6NHNiZ9M8FmST93E8aLsxxXoxahEe3A

< addwitnessaddress mfsymqZpwRYokNbRFW1bswCHBSxoqvf4Ck
> 2NEwHgunmeraQysM1cyS9Rr3952tzwyA6UM

3. witnessaddress宛てに送る

< createrawtransaction "[{\"txid\":\"d1002f69e5cf73de303ba94eddd4cd82eecb925504f3ea0f336d47371c49eac5\",\"vout\":1}]" "{\"2NEwHgunmeraQysM1cyS9Rr3952tzwyA6UM\":0.1, \"2MwG6NHNiZ9M8FmST93E8aLsxxXoxahEe3A\":0.1799}"

> 0100000001c5ea491c37476d330feaf3045592cbee82cdd4dd4ea93b30de73cfe5692f00d10100000000ffffffff02809698000000000017a914edee5e71d224f09b83ea4ef8f26ca21a9a3affbb87708112010000000017a9142c0a8ec2659cdbcb7563a7fc244f475537c053d48700000000

< signrawtransaction 0100000001c5ea491c37476d330feaf3045592cbee82cdd4dd4ea93b30de73cfe5692f00d10100000000ffffffff02809698000000000017a914edee5e71d224f09b83ea4ef8f26ca21a9a3affbb87708112010000000017a9142c0a8ec2659cdbcb7563a7fc244f475537c053d48700000000

> 
{
  "hex": "0100000001c5ea491c37476d330feaf3045592cbee82cdd4dd4ea93b30de73cfe5692f00d1010000006b483045022100a8feaa61c8fd8f0ff5b4c011aad3875c4a26979f00df0c3f6c53cde5c95748540220601d79b7e06ea8d766b417f547f3bcbd6a48b49c19934bc57c53fce7ed637a490121029f44a0c0096a62240f9c6b8bc1e74e844ef5ffa6e2167abf2f5d0cdc80a2e6b3ffffffff02809698000000000017a914edee5e71d224f09b83ea4ef8f26ca21a9a3affbb87708112010000000017a9142c0a8ec2659cdbcb7563a7fc244f475537c053d48700000000",
  "complete": true
}

< sendrawtransaction 0100000001c5ea491c37476d330feaf3045592cbee82cdd4dd4ea93b30de73cfe5692f00d1010000006b483045022100a8feaa61c8fd8f0ff5b4c011aad3875c4a26979f00df0c3f6c53cde5c95748540220601d79b7e06ea8d766b417f547f3bcbd6a48b49c19934bc57c53fce7ed637a490121029f44a0c0096a62240f9c6b8bc1e74e844ef5ffa6e2167abf2f5d0cdc80a2e6b3ffffffff02809698000000000017a914edee5e71d224f09b83ea4ef8f26ca21a9a3affbb87708112010000000017a9142c0a8ec2659cdbcb7563a7fc244f475537c053d48700000000

> d38d37b523e1b94c40ca7a9d5c42d19bbf2437476105e36ea9599240a2bd55d7

4. unspentを確認するとredeemscriptが作られてた

< listunspent
> 
[
  {
    "txid": "d38d37b523e1b94c40ca7a9d5c42d19bbf2437476105e36ea9599240a2bd55d7",
    "vout": 0,
    "address": "2NEwHgunmeraQysM1cyS9Rr3952tzwyA6UM",
    "redeemScript": "001403f9f84721fe9c8411971992c41b5a0eaad2aba9",
    "scriptPubKey": "a914edee5e71d224f09b83ea4ef8f26ca21a9a3affbb87",
    "amount": 0.10000000,
    "confirmations": 2,
    "spendable": true,
    "solvable": true
  }, 
  {
    "txid": "d38d37b523e1b94c40ca7a9d5c42d19bbf2437476105e36ea9599240a2bd55d7",
    "vout": 1,
    "address": "2MwG6NHNiZ9M8FmST93E8aLsxxXoxahEe3A",
    "redeemScript": "0014a4deb3620f3b7a0c380aa5585cb33c1c95703ef5",
    "scriptPubKey": "a9142c0a8ec2659cdbcb7563a7fc244f475537c053d487",
    "amount": 0.17990000,
    "confirmations": 2,
    "spendable": true,
    "solvable": true
  }
]

5. redeemScriptのhexを元にcreatewitnessaddressする

< createwitnessaddress 001403f9f84721fe9c8411971992c41b5a0eaad2aba9
> 
{
  "address": "2NFDcVic5YgJDYSeVraSczchmzBmceZ21U2",
  "witnessScript": "00207f1984af9d290f0678ea2cdb127346aac2a36ebfb0d93f11f890904fcbb13ed3"
}

6. 5で作ったアドレスに送ってみる

< sendmany nakajo_test2 "{\"2NFDcVic5YgJDYSeVraSczchmzBmceZ21U2\":0.05}"
> 86bdc49eb30ec3a1e0f5a6ae1f141588782cf71f2be1f0de2a03e70983dcd248

7. 6で送ったwitnessaddressから別のアドレスに送るためのrawtransactionを作成する

< createrawtransaction "[{\"txid\":\"86bdc49eb30ec3a1e0f5a6ae1f141588782cf71f2be1f0de2a03e70983dcd248\",\"vout\":1}]" "{\"mvYhu2m52jPhKCAGidbyWy96xqgYMYkYdu\":0.0499}"

> 010000000148d2dc8309e7032adef0e12b1ff72c788815141faea6f5e0a1c30eb39ec4bd860100000000ffffffff0130244c00000000001976a914a4deb3620f3b7a0c380aa5585cb33c1c95703ef588ac00000000

8. 7で作ったtransactionにsignしてみる

< dumpprivkey mfsymqZpwRYokNbRFW1bswCHBSxoqvf4Ck
> private_key

< signrawtransaction 010000000148d2dc8309e7032adef0e12b1ff72c788815141faea6f5e0a1c30eb39ec4bd860100000000ffffffff0130244c00000000001976a914a4deb3620f3b7a0c380aa5585cb33c1c95703ef588ac00000000 '[{"txid":"86bdc49eb30ec3a1e0f5a6ae1f141588782cf71f2be1f0de2a03e70983dcd248","vout":1,"scriptPubKey":"a914f104b93f55f2c7a7807c7eee781dba0fc8d8786487","redeemScript":"00207f1984af9d290f0678ea2cdb127346aac2a36ebfb0d93f11f890904fcbb13ed3","amount":0.05}]' '["private_key"]' ALL

>
{
  "hex": "010000000148d2dc8309e7032adef0e12b1ff72c788815141faea6f5e0a1c30eb39ec4bd8601000000232200207f1984af9d290f0678ea2cdb127346aac2a36ebfb0d93f11f890904fcbb13ed3ffffffff0130244c00000000001976a914a4deb3620f3b7a0c380aa5585cb33c1c95703ef588ac00000000",
  "complete": false,
  "errors": [
    {
      "txid": "86bdc49eb30ec3a1e0f5a6ae1f141588782cf71f2be1f0de2a03e70983dcd248",
      "vout": 1,
      "scriptSig": "2200207f1984af9d290f0678ea2cdb127346aac2a36ebfb0d93f11f890904fcbb13ed3",
      "sequence": 4294967295,
      "error": "Witness program was passed an empty witness"
    }
  ]
}

普通にwitnessaddressからwitnessaddressに送ればいいのかな?でもそれっぽいtransactionはすでに記録されてて、そこにはwitnessブロックがなかったしなぁ・・・。

また後日試してみます。