2014年底一段时间我比较闲,用改写的blockparser查看了bitcoin的数据。当时发现很多奇怪的tx,还发现有些有趣的tx。也发现一些泄露秘钥的tx。当时并没有做什么记录,于是今天我又把这个程序翻出来,居然优化了一下,跑了一些结果。时隔1年,blockchain已经增大了2倍多,目测优化过后的代码应该比去年完成扫描还要快些。先列出一些不一样的输出脚本类型吧。有些脚本无法被answer是因为有各种错误,但奇怪这些tx是怎么被确认的呢,难道确认时候不校验outputScript是否合法吗?
1 type:0000000000000000000000000000000000874baa
txHash =af32bb06f12f2ae5fdb7face7cd272be67c923e86b7a66a76ded02d954c2f94d
minted in block = 211914
mint time = 1355302091 (Wed Dec 12 08:48:112012 GMT)
output[0] = 100000000
ScriptHex:aa20000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f87
0xAA OP_HASH256
OP_PUSHDATA(32,0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f){-3}
0x87 OP_EQUAL
2 type:0000000000000000000000000000000000874baa
txHash =a4bfa8ab6435ae5f25dae9d89e4eb67dfa94283ca751f393c1ddc5a837bbc31b
minted in block = 211997
mint time = 1355361152 (Thu Dec 13 01:12:322012 GMT)
output[0] = 100000000
ScriptHex:aa206fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000087
0xAA OP_HASH256
OP_PUSHDATA(32,0x6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000){-3}
0x87 OP_EQUAL
这两个tx非常有意思,是要用第一个Block的hash256作为challenge,但是第一次没有注意hash字节序是翻转的(大小端不一致),给出了翻转字节序的data,是找不到答案的。第二个data则是正确的。
1 type:000000000000000000754b006c686a64875d9393
txHash =4373b97e4525be4c2f4b491be9f14ac2b106ba521587dad8f134040d16ff73af
minted in block = 305806
mint time = 1402775993 (Sat Jun 14 19:59:532014 GMT)
output[0] = 143600
ScriptHex:93935d87646a686c4c97203c73637269707420747970653d27746578742f6a617661736372697074273e646f63756d656e742e777269746528273c696d67207372633d27687474703a2f2f7777772e74726f6c6c626f742e6f72672f7873732d626c6f636b636861696e2d6465746563746f722e7068703f687265663d27202b206c6f636174696f6e2e68726566202b2027273e27293b3c2f7363726970743e2075
0x93 OP_ADD.
0x5D OP_13
0x87 OP_EQUAL
0x64 OP_NOTIF
0x6A OP_RETURN
0x68 OP_ENDIF
0x6C OP_FROMALTSTACK
OP_PUSHDATA(151,0x203c73637269707420747970653d27746578742f6a617661736372697074273e646f63756d656e742e777269746528273c696d67207372633d27687474703a2f2f7777772e74726f6c6c626f742e6f72672f7873732d626c6f636b636861696e2d6465746563746f722e7068703f687265663d27202b206c6f636174696f6e2e68726566202b2027273e27293b3c2f7363726970743e20){-2}
0x75 OP_DROP
通过查看bitcoin源码可以看出,OP_FROMALTSTACK 使用的altstack是局部的,虽然outputScript和inputScript使用同一个stack处理校验,但各自有各自的altstack,所以这个challenge是没有answer的。但如果换成 OP_TOALTSTACK 就有解。
另外这个pushdata解码出来是一段javascript代码,如果直接执行会带参数到跳到www.trollbot.org,对于web版钱包实现不好可能会有xss攻击风险。顺手看了一下,见: http://www.trollbot.org/xss-blockchain-detector.php?href=
果然作者说这是一个风险提示实验,这个跳转本身不具有危险性,但是TX中的js脚本能够执行则很危险。
3 type:0000000000000000000000000000000000004b00
txHash =ebc9fa1196a59e192352d76c0f6e73167046b9d37b8302b6bb6968dfd279b767
minted in block = 265458
mint time = 1382508379 (Wed Oct 23 06:06:192013 GMT)
output[3] = 1
ScriptHex: 4c0201
OP_PUSHDATA(1, 0x01){-1}
script type = couldn't parse script
这个tx下面有8个output,全部都是pushdata,但是每一个都给出了错误的格式。有一些没有长度,另外几个长度超过了已有数据,如果Block浏览器实现有bug,就会溢出。这个测试是故意的,都没有对应的answer。
1 type:0000000000000000000000874ba8a8a8a8a8754b
txHash =ed7f71fdf6ae57f55b25c60e88771449a88f9c459db495a9efd9e90149af8b92
minted in block = 357261
mint time = 1432128560 (Wed May 20 13:29:202015 GMT)
output[1] = 430000
ScriptHex:187468652070617373776f72642069732070617373776f726475a8a8a8a8a8201c9f63d17e1ca2c830d0fc831e9ba4f6452204480d7908d0a0dbd3a9835de17d87
OP_PUSHDATA(24,0x7468652070617373776f72642069732070617373776f7264){-3}
0x75 OP_DROP
0xA8 OP_SHA256....
OP_PUSHDATA(32,0x1c9f63d17e1ca2c830d0fc831e9ba4f6452204480d7908d0a0dbd3a9835de17d){-3}
0x87 OP_EQUAL
我会说这个答案就是password吗!
1001 type:0000000000000000000000000000747069726373
txHash =fa735229f650a8a12bcf2f14cca5a8593513f0aabc52f8687ee148c9f9ab6665
minted in block = 166533
mint time = 1329079084 (Sun Feb 12 20:38:042012 GMT)
output[1] = 70359
ScriptHex: 736372697074
0x73 OP_IFDUP
0x63 OP_IF
0x72 OP_2SWAP
0x69 OP_VERIFY
0x70 OP_2OVER
0x74 OP_DEPTH
script type = broken script generatedby p2pool - coins lost
这种tx一共有1182个,2013年之后应该不会再增加了。它们都是p2pool挖矿直接产生的,脚本中OP_IF不完整,没有对应的OP_ENDIF,所以不可能被answer。
1 type:00000000000000000000000000684b00004bff63
txHash =77822fd6663c665104119cb7635352756dfc50da76a92d417ec1a12c518fad69
minted in block = 251718
mint time = 1376296294 (Mon Aug 12 08:31:342013 GMT)
output[0] = 1500000
ScriptHex: 63ff054effffffff4da305......
0x63 OP_IF
0xFF OP_INVALIDOPCODE
OP_PUSHDATA(5,0x4effffffff){-1}
OP_PUSHDATA(1443,0x46726f6d206133613631666566......a0a){-2}
0x68 OP_ENDIF
script type = couldn't parse script
这个不写全了, pushdata最多支持520字节,1443个超出了。所以也不能answer。
160 type:0000000000000000000000000000000000004b6a
txHash =8383f069af8d91be4e3299b79ef585095be3309372d8457c9bc07a43d40ca939
minted in block = 342661
mint time = 1423461116 (Mon Feb 9 05:51:56 2015 GMT)
output[1] = 1000000
ScriptHex:6a3ba38a0c96529a32f53f31ebb77536084e0f37c62cd86231d5fdd2fed2710b21c1687474703a2f2f6d7367652e75732f7265706f732f31382e676974
0x6A OP_RETURN
OP_PUSHDATA(59,0xa38a0c96529a32f53f31ebb77536084e0f37c62cd86231d5fdd2fed2710b21c1687474703a2f2f6d7367652e75732f7265706f732f31382e676974){-3}
2015年开始流行了使用op_return来记录文本,这个应该是最贵的一个了吧!
1 type:0000000000000000000000000000000000004b6a
txHash =139c004f477101c468767983536caaeef568613fab9c2ed9237521f5ff530afd
minted in block = 247633
mint time = 1374362200 (Sat Jul 20 23:16:402013 GMT)
output[1] = 100000
ScriptHex:6a20d68bdab455902dcc59f4e8f775a59c58ea8ae8f0a6cb7f3b96f8a3cfd84c9af7
0x6A OP_RETURN
OP_PUSHDATA(32,0xd68bdab455902dcc59f4e8f775a59c58ea8ae8f0a6cb7f3b96f8a3cfd84c9af7){-3}
script type = couldn't parse script
这个是第一个。
1001 type:0000000000000000000000000000000000004b6a
txHash =544c51527aa277f0389af266ffe5d9e8d5af0d04ab8d01a693f0c62495298dc6
minted in block = 373029
mint time = 1441400076 (Fri Sep 4 20:54:36 2015 GMT)
output[0] = 10000
ScriptHex:6a2369643b666f756e646174696f6e64622e75736572737573657273757365727374737439
0x6A OP_RETURN
OP_PUSHDATA(35,0x69643b666f756e646174696f6e64622e75736572737573657273757365727374737439){-3}
这是第1001个。但是到2016年1月20日,已经有39151个付费op_return了。不付费的可能更多,我没有统计。
先到这吧。 |