Non-Standard-Transaction

P2SH 的兌換腳本中不允許使用 OP_PUSHDATA1?

  • September 12, 2016

比特幣核心 0.10.0 中 P2SH 兌換腳本的 P2SH “寬鬆標準”

比特幣核心 0.10.0 中 P2SH 兌換腳本的“寬鬆標準”是什麼意思?

我只是嘗試使用 OP_PUSHDATA1 操作碼創建兌換腳本並使用 Blockchain.info 推送它

原始 TX 是

如果我開始使用 OP_PUSHDATA1 事務未廣播到網路例如 Blockchain.info 給我錯誤“P2SH 腳本執行導致非真實堆棧”

數據交易 = 90 字節

0100000001a54c8127690cbf24f4d18336aae1c72f124fe00039218ad8ca42d988050d303f17000000e247304402205221bd680af998ac98f7ede5b532761a0a643da1cf16a30afb73b8b79fdcfd010220759d2e7eccf89d85b921f6d9c9246f9e9193ab6b60e3b387e31ec86298a643640121026b8cdb5ee526886dd01540df3c3c001876a5dedbe834f92b75eea7e1cc17ed7c4c764c5a3131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131317576a9146902e12aeb180003f48d4411ed27ff6f5202d0fa88acffffffff0198210000000000001976a9146902e12aeb180003f48d4411ed27ff6f5202d0fa88ac00000000

JSON

{“輸出”:[“{”{addression“:[”1aafqdd393apfh9xyjjskltvrdzppzkk“,”out_index“:0,”腳本“:{”模式“:”op_dup op_hash160 <20> op_equalverify op_checksig“,”asm“:”op_dup op_hash160 6902e12aeb180003f48d4411ed27ff6f5202d0fa OP_EQUALVERIFY OP_CHECKSIG", “hex”: “76a9146902e12aeb180003f48d4411ed27ff6f5202d0fa88ac”, “type”: “P2PKH”}, “amount”: 8600}],

“輸入”: [{“序列”:4294967295,“地址”:[“38rsbYpEuckLjnts7dF2YjNT2wcu1RmjmU”],

“sig_script”:{“模式”:“<71> <33> <118>”,

"asm": "304402205221bd680af998ac98f7ede5b532761a0a643da1cf16a30afb73b8b79fdcfd010220759d2e7eccf89d85b921f6d9c9246f9e9193ab6b60e3b387e31ec86298a6436401 026b8cdb5ee526886dd01540df3c3c001876a5dedbe834f92b75eea7e1cc17ed7c 4c5a3131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131317576a9146902e12aeb180003f48d4411ed27ff6f5202d0fa88ac", 

“類型”:“SIGSCRIPT”,

“十六進制”:“47304402205221bd680af998ac98f7ede5b532761a0a643da1cf16a30afb73b8b79fdcfd010220759d2e7eccf89d85b921f6d9c9246f9e9193ab6b60e3b387e31ec86298a643640121026b8cdb5ee526886dd01540df3c3c001876a5dedbe834f92b75eea7e1cc17ed7c4c764c5a3131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131317576a9146902e12aeb180003f48d4411ed27ff6f5202d0fa88ac”},

“redeem_script”: {“pattern”: “<90> OP_DROP OP_DUP OP_HASH160 <20> OP_EQUALVERIFY OP_CHECKSIG”,

我使用: test = b"1"*90 s = b"\x4c"+len(test).to_bytes(1,’little’)+test+OPCODE[“OP_DROP”]+s

"asm": "313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131 OP_DROP OP_DUP OP_HASH160 6902e12aeb180003f48d4411ed27ff6f5202d0fa OP_EQUALVERIFY OP_CHECKSIG", 

“十六進制”:“4c5a3131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313134413901375137613eb

“類型”:“NON_STANDART”},

“腳本”:{“模式”:“op_hash160 <20> op_equal”,“asm”:“op_hash160 4ea616b210e32cde1f0396be720cde1f0396be720 op_equal”,“類型”:“p2sh”,“十六進制”:“a9144ea616b2ce8f782688f9170e32cde1f0396be72087”},“金額”:20000, “輸入索引”:0,“輸出索引”:23,“事務雜湊”:“3f300d0588d942cad88a213900e04f122fc7e1aa3683d1f424bf0c6927814ca5”}],“數據”:“”,“時間戳”:1473702857,“大小”:311,“ :“3e3b46a701103d18849f3b36fc906a6fedcc790b2f7185660ccfa6b9d9451e90”,“coinbase”:假,“塊”:空,“費用”:11400}

OP_PUSHDATA1 甚至 OP_PUSHDATA2 都可以在 P2SH 腳本中使用。但是,Bitcoin Core 中還有另一項政策要求在標準交易中所有推送都最小化。這意味著您只能在無法直接推送時使用 OP_PUSHDATA1(最多 75 個字節),並且只能在無法使用 OP_PUSHDATA1 時使用 OP_PUSHDATA2(最多 255 個字節)。

另外,一般來說:在試驗腳本時,首先在測試網上嘗試。

引用自:https://bitcoin.stackexchange.com/questions/48534