vbuterin / pybitcointools

SImple, common-sense Bitcoin-themed Python ECC library
1.28k stars 857 forks source link

Multisig script is no longer valid: OP_CHECKMULTISIG(VERIFY) with non-null nulldummy #95

Open arhuaco opened 9 years ago

arhuaco commented 9 years ago

Hello there.

I'm getting this error:

OP_CHECKMULTISIG(VERIFY) with non-null nulldummy: [48, 68, 2, 32, 62, -19, -78, 21, -25, -76, -2, -88, -75, -49, 60, 104, 53, 80, 23, 111, 40, 39, -109, 27, 35, -48, 86, 21, 80, 60, 37, 72, -112, 99, -98, 0, 2, 32, 29, -73, 28, 4, -31, -10, -61, -3, -85, -109, 10, 67, -116, 63, 58, 43, -44, -72, 54, 48, 81, -107, 54, -95, 5, 66, -30, 95, -16, 20, -4, 51, 1]

With this Counterparty transaction that I am signing. If I understand correctly, some rules changed and some scripts that used to be valid are no longer valid because Bitcoin core implementations are more strict now. See: https://github.com/btcsuite/btcd/issues/131

This is the signed transaction:

0100000001caa1cd766de01294451f1610a0a0136bc9176070f1c22494eb2e28443624aa8e00000000fd5d010047304402203eedb215e7b4fea8b5cf3c683550176f2827931b23d05615503c254890639e0002201db71c04e1f6c3fdab930a438c3f3a2bd4b83630519536a10542e25ff014fc3301483045022100a83b7b516982442700f350bdafa7aa10b91c7930aa05ca20dca82613670292d602207cda3992c1d224cfd0a2bf6b8b6d595e17a9abe1353795879b1e29d5507550cc014cc95241043e12a6cb1c7c156f789110abf8397b714047414b5a32c742f17ccf93ff23bdf3128f946207086bcef012558240cd16182c741123e93ed18327c4cd6ebac668a94104e4168c172283c7dfaa85d2004f763a28bf6d0f1602fc1452ccec62a7c8a66e422af1410fbf24a47355ddc43dfe3491cb1b806574ccd1c434680466dcff926f01410427db4059d24bab05df3f6bcc768fb01bd976b973f93e72cce2dfbfbed5a32056c9040a2c2ea4c10c812a54fed7ff2e6a917dbc843362d398f6ace4000fafa5c653aeffffffff0336150000000000001976a91451bb89eb8fcb138174114315fc8eaf054395c0cc88ac781e00000000000089512103ff58dcadeb5a447162ab629d309c2a28043a3437884b7b280fcfff9baa3119c021024131478633f18da1caec8ee455108b72feb19d70baae9ca86638661e47562bfa410427db4059d24bab05df3f6bcc768fb01bd976b973f93e72cce2dfbfbed5a32056c9040a2c2ea4c10c812a54fed7ff2e6a917dbc843362d398f6ace4000fafa5c653ae9268000000000000c952410427db4059d24bab05df3f6bcc768fb01bd976b973f93e72cce2dfbfbed5a32056c9040a2c2ea4c10c812a54fed7ff2e6a917dbc843362d398f6ace4000fafa5c641043e12a6cb1c7c156f789110abf8397b714047414b5a32c742f17ccf93ff23bdf3128f946207086bcef012558240cd16182c741123e93ed18327c4cd6ebac668a94104e4168c172283c7dfaa85d2004f763a28bf6d0f1602fc1452ccec62a7c8a66e422af1410fbf24a47355ddc43dfe3491cb1b806574ccd1c434680466dcff926f0153ae00000000

More data here:

http://pastebin.com/hYDy1pD3

I can provide more data if needed.

Thanks!

arhuaco commented 9 years ago

I checked carefully and I think I don't have bugs in the code. Signing with Bitcoind works.

I just noticed that my main reference (bitscavenger.blogspot.com/2014/04/multisig-with-pybitcointools.html) has this note:

"Currently blockchain.info does not like multisig transactions generated like this so we have to submit it to eligius."

So it seems these transactions are currently considered nonstandard by (I guess most) nodes.

arhuaco commented 9 years ago

Hello there. I don't know well how this works but I put a 75USD bounty on the (what I think it is an) issue:

https://www.bountysource.com/issues/15832046-multisig-script-is-no-longer-valid-op_checkmultisig-verify-with-non-null-nulldummy

rubensayshi commented 8 years ago

https://github.com/bitcoin/bitcoin/issues/8079

the way to fix it is by having 2x as many non-multisig inputs than multisig inputs/outputs, which will tip the balance of bytes:sigop in your favor.

and move away from bare multisig because spending it is problamtic and this won't change