send-raw-transaction

Raw Transaction

단순히 bitcoin-cli로 transaction을 보내기 위해선 sendtoaddress를 사용해서 원하는 주소로 bitcoin을 보낼 수 있다. 하지만 data를 담는등 raw transaction로 다루기 위해선, createrawtransaction, signrawtransactionwithwallet, sendrawtransaction을 사용해서 생성, 서명, 전송의 과정을 해줘야한다.

생성

  • createrawtransaction 메서드를 사용해서 raw transaction을 생성할 수 있다.
  • 2개의 필수적인 JSON 인자를 필요로한다. 순서대로 사용할 UTXO, 보낼 정보나 bitcoin이다.
bitcoin-cli createrawtransaction "[{\"txid\":\"f8cbd46d943758b620f305bd426c80eddb93058b596e5ddd93a60f983dad2710\",\"vout\":0}]" "[{\"bcrt1qcs2msk2xmpuv5stwgr85tlmc3uazcuamtuazve\":48},{\"data\":\"48454c4c4f203535363034\"}]"
# Result: 02000000011027ad3d980fa693dd5d6e598b0593dbed806c42bd05f320b65837946dd4cbf80000000000fdffffff0200301a1e01000000160014c415b85946d878ca416e40cf45ff788f3a2c73bb00000000000000000d6a0b48454c4c4f20353536303400000000
  • 아래는 위 명령어의 인자를 보기 좋게 바꾼 것이다.
// 사용할 UTXO
[
  {
    "txid": "f8cbd46d943758b620f305bd426c80eddb93058b596e5ddd93a60f983dad2710",
    "vout": 0
  }
]
// 보낼 주소 & bitcoin 양, 데이터
[
  {
    "bcrt1qcs2msk2xmpuv5stwgr85tlmc3uazcuamtuazve": 28
  },
  {
    "data": "48454c4c4f203535363034"
  }
]
  • 생성된 raw transaction을 다음과 같이 보기 좋게 출력할 수 있다.
bitcoin-cli decoderawtransaction 02000000011027ad3d980fa693dd5d6e598b0593dbed806c42bd05f320b65837946dd4cbf80000000000fdffffff0200301a1e01000000160014c415b85946d878ca416e40cf45ff788f3a2c73bb00000000000000000d6a0b48454c4c4f20353536303400000000
// Result: 
{
  "txid": "2629cfe5770f9bbcafc7986f854a9229dfcacb9d27653e86c3114764907b209f",
  "hash": "354f9cefa04083180f6d4865c8fd150a41c4790d1dccc4aae87685be7878a88a",
  "version": 2,
  "size": 213,
  "vsize": 132,
  "weight": 525,
  "locktime": 0,
  "vin": [
    {
      "txid": "f8cbd46d943758b620f305bd426c80eddb93058b596e5ddd93a60f983dad2710",
      "vout": 0,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "txinwitness": [
        "304402203ba419bf80438f9c0ae99961c986f94d6beb8de2d53bf57c323b40fdc7d4c07902202df151e7ac4f16007847151afda00cdea142a98020be54bb40b3fd8a706ed1a301",
        "02614742f3b7af24b2323947c65e6252cbea3bb5e3c2e53524f7a60813d173e2ba"
      ],
      "sequence": 4294967293
    }
  ],
  "vout": [
    {
      "value": 48.00000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "0 c415b85946d878ca416e40cf45ff788f3a2c73bb",
        "desc": "addr(bcrt1qcs2msk2xmpuv5stwgr85tlmc3uazcuamtuazve)#cjf0f8mh",
        "hex": "0014c415b85946d878ca416e40cf45ff788f3a2c73bb",
        "address": "bcrt1qcs2msk2xmpuv5stwgr85tlmc3uazcuamtuazve",
        "type": "witness_v0_keyhash"
      }
    },
    {
      "value": 0.00000000,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_RETURN 48454c4c4f203535363034",
        "desc": "raw(6a0b48454c4c4f203535363034)#zh7ur9l5",
        "hex": "6a0b48454c4c4f203535363034",
        "type": "nulldata"
      }
    }
  ]
}

서명

  • raw transaction을 사용하기 위해선 private key로 서명을 진행해야한다. bitcoin-cli에선 wallet이 관리하는 private key로 서명을 진행할 수 있다.
bitcoin-cli signrawtransactionwithwallet 02000000011027ad3d980fa693dd5d6e598b0593dbed806c42bd05f320b65837946dd4cbf80000000000fdffffff0200301a1e01000000160014c415b85946d878ca416e40cf45ff788f3a2c73bb00000000000000000d6a0b48454c4c4f20353536303400000000
# Result: 
# {
#   "hex": "020000000001011027ad3d980fa693dd5d6e598b0593dbed806c42bd05f320b65837946dd4cbf80000000000fdffffff0200301a1e01000000160014c415b85946d878ca416e40cf45ff788f3a2c73bb00000000000000000d6a0b48454c4c4f2035353630340247304402203ba419bf80438f9c0ae99961c986f94d6beb8de2d53bf57c323b40fdc7d4c07902202df151e7ac4f16007847151afda00cdea142a98020be54bb40b3fd8a706ed1a3012102614742f3b7af24b2323947c65e6252cbea3bb5e3c2e53524f7a60813d173e2ba00000000",
#   "complete": true
# }

전송

  • 서명된 transaction은 Bitcoin network에 보낼 수 있다.
  • 첫번째 인자는 서명된 transaction 문자열이다.
  • 두번째 인자는 최대 비용 비율이다. (비용을 너무 많이 내지 않도록 제한해준다.)
bitcoin-cli sendrawtransaction "020000000001011027ad3d980fa693dd5d6e598b0593dbed806c42bd05f320b65837946dd4cbf80000000000fdffffff0200301a1e01000000160014c415b85946d878ca416e40cf45ff788f3a2c73bb00000000000000000d6a0b48454c4c4f2035353630340247304402203ba419bf80438f9c0ae99961c986f94d6beb8de2d53bf57c323b40fdc7d4c07902202df151e7ac4f16007847151afda00cdea142a98020be54bb40b3fd8a706ed1a3012102614742f3b7af24b2323947c65e6252cbea3bb5e3c2e53524f7a60813d173e2ba00000000" 0