Legacy + Segwit Transaction Serialization
아래는 Legacy Transaction과 Segwit Transaction이 혼합되어 있는 트랜잭션을 Serialization 하여 Binary 레벨의 Raw Data를 분석한 예이다.
Serialized Raw Data: 02000000000102e8f2c6239fce39bab19c17c3f46f8e0d0fada5b59429cd2339e3573be9efa901010000006b483045022100d8c95e75d77e1cb2c42d98a8d7d678b677bb0a16bc95cb428c9f66fc5081362102202af52593e2fffc9baecc920e9744b6e9f814454e2321fb3005b17e8f88f7a39c0121032e0ba6520d9874454e6f93cb8e0a7a88d235c1cc893260b840eb21dc6308cca5fdffffff625269071d3af9e1a97d0be7f082ff344ea0ea61a444d5f90680f8bcf12b78c30000000000fdffffff0200b70400000000001976a914eef735390f1e2a980763ca619b4ba327c626887688acd06c0400000000001600140162edc36c8f40c8c3d3b5e014cb525eaefe9b5e0002483045022100e21fa153074ba3715cb38b3bf56cd1fadfd271e23bc203484e5968240f76bf2a02207f4cdf0a4cb0c22072d1de5e56088b2a9ee17b16353bb8a5c381534f72bfb557012103e9f6f8060c67c98bfefc84e6ec4eb97378ac9d44d57b2f5276862eb63c53b2cf3c472500
Raw Data 분석: 02000000 (Version) 00 (Segwit Marker) 01 (Segwit Flag) -- Inputs 02 (# of inputs) e8f2c6239fce39bab19c17c3f46f8e0d0fada5b59429cd2339e3573be9efa901 (txid) 01000000 (vout) 6b (scriptSigSize) 483045022100d8c95e75d77e1cb2c42d98a8d7d678b677bb0a16bc95cb428c9f66fc5081362102202af52593e2fffc9baecc920e9744b6e9f814454e2321fb3005b17e8f88f7a39c0121032e0ba6520d9874454e6f93cb8e0a7a88d235c1cc893260b840eb21dc6308cca5 (scriptSig) fdffffff (sequence) 625269071d3af9e1a97d0be7f082ff344ea0ea61a444d5f90680f8bcf12b78c3 (txid) 00000000 (vout) 00 (scriptSig/segwit) fdffffff (sequence) -- Outputs 02 (# of outputs) 00b7040000000000 (amount) 1976a914eef735390f1e2a980763ca619b4ba327c626887688ac (scriptpubkey) d06c040000000000 (amount) 1600140162edc36c8f40c8c3d3b5e014cb525eaefe9b5e (scriptpubkey) -- Witnesses 00 (len/ empty for legacy tx) 02 48 3045022100e21fa153074ba3715cb38b3bf56cd1fadfd271e23bc203484e5968240f76bf2a02207f4cdf0a4cb0c22072d1de5e56088b2a9ee17b16353bb8a5c381534f72bfb557 (DER(sig)) 01 (sighash) 21 03e9f6f8060c67c98bfefc84e6ec4eb97378ac9d44d57b2f5276862eb63c53b2cf (pubkey) -- locktime 3c472500
위의 Raw Binary 데이타를 Decode하면 아래와 같이 된다.
$ bitcoin-cli decoderawtransaction 02000000000102e8f2c6239fce39bab19c17c3f46f8e0d0fada5b59429cd2339e3573be9efa901010000006b483045022100d8c95e75d77e1cb2c42d98a8d7d678b677bb0a16bc95cb428c9f66fc5081362102202af52593e2fffc9baecc920e9744b6e9f814454e2321fb3005b17e8f88f7a39c0121032e0ba6520d9874454e6f93cb8e0a7a88d235c1cc893260b840eb21dc6308cca5fdffffff625269071d3af9e1a97d0be7f082ff344ea0ea61a444d5f90680f8bcf12b78c30000000000fdffffff0200b70400000000001976a914eef735390f1e2a980763ca619b4ba327c626887688acd06c0400000000001600140162edc36c8f40c8c3d3b5e014cb525eaefe9b5e0002483045022100e21fa153074ba3715cb38b3bf56cd1fadfd271e23bc203484e5968240f76bf2a02207f4cdf0a4cb0c22072d1de5e56088b2a9ee17b16353bb8a5c381534f72bfb557012103e9f6f8060c67c98bfefc84e6ec4eb97378ac9d44d57b2f5276862eb63c53b2cf3c472500 { "txid": "c5ddd8288a994996e3454074c67a092f65c0c8108e7c9571e3fa18314fb214f8", "hash": "e51db0ff6372afa57f2502bc66d1b701fa193d8f4e82bc048e320970a4d37499", "version": 2, "size": 375, "vsize": 292, "weight": 1167, "locktime": 2443068, "vin": [ { "txid": "01a9efe93b57e33923cd2994b5a5ad0f0d8e6ff4c3179cb1ba39ce9f23c6f2e8", "vout": 1, "scriptSig": { "asm": "3045022100d8c95e75d77e1cb2c42d98a8d7d678b677bb0a16bc95cb428c9f66fc5081362102202af52593e2fffc9baecc920e9744b6e9f814454e2321fb3005b17e8f88f7a39c[ALL] 032e0ba6520d9874454e6f93cb8e0a7a88d235c1cc893260b840eb21dc6308cca5", "hex": "483045022100d8c95e75d77e1cb2c42d98a8d7d678b677bb0a16bc95cb428c9f66fc5081362102202af52593e2fffc9baecc920e9744b6e9f814454e2321fb3005b17e8f88f7a39c0121032e0ba6520d9874454e6f93cb8e0a7a88d235c1cc893260b840eb21dc6308cca5" }, "sequence": 4294967293 }, { "txid": "c3782bf1bcf88006f9d544a461eaa04e34ff82f0e70b7da9e1f93a1d07695262", "vout": 0, "scriptSig": { "asm": "", "hex": "" }, "txinwitness": [ "3045022100e21fa153074ba3715cb38b3bf56cd1fadfd271e23bc203484e5968240f76bf2a02207f4cdf0a4cb0c22072d1de5e56088b2a9ee17b16353bb8a5c381534f72bfb55701", "03e9f6f8060c67c98bfefc84e6ec4eb97378ac9d44d57b2f5276862eb63c53b2cf" ], "sequence": 4294967293 } ], "vout": [ { "value": 0.00308992, "n": 0, "scriptPubKey": { "asm": "OP_DUP OP_HASH160 eef735390f1e2a980763ca619b4ba327c6268876 OP_EQUALVERIFY OP_CHECKSIG", "hex": "76a914eef735390f1e2a980763ca619b4ba327c626887688ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ "n3JVG1sRb34x4mux1a3MQiMBRME1DPjA22" ] } }, { "value": 0.00290000, "n": 1, "scriptPubKey": { "asm": "0 0162edc36c8f40c8c3d3b5e014cb525eaefe9b5e", "hex": "00140162edc36c8f40c8c3d3b5e014cb525eaefe9b5e", "reqSigs": 1, "type": "witness_v0_keyhash", "addresses": [ "tb1qq93wmsmv3aqv3s7nkhspfj6jt6h0ax67dmldgx" ] } } ] }
웰렛의 구현 방식에 따라 어떤 월렛은 이렇게 혼합된 트랜잭션을 Broadcast 하지 못할 수 있다. 참고로, Electrum에서 Load Transaction을 하여 Broadcasting 하는 것을 테스트 하였는데, 잘 동작하였다.