ElementsProject / ElementsProject/elements
signrawtransactionwithwallet seems to break the existing signatures of some of the inputs
- Lingua principale
- C++
- Stelle
- 1.2k
- Fork
- 416
- Merge medio
- 1g 23h
- PR unite (30g)
- 15
Descrizione
It seems that this rpc alters the scriptSig of all of the inputs that were already signed (second and third vins in this case), except for the first one.
This is an example with 4 inputs, where the first 3 are transactions that are already signed:
Before executing signrawtransactionwithwallet, I have this transaction:
```
020000000004ff0a2172ff5119e6ceafa3a88b4bd178476375225519152b485602c042a4484008000000fd5c010047304402207c702a95f503941cc00f66fe3c92f20309ab8984d8bb222cd9ef194b199e8aff02207d0de0750281be7d95051b23786f35273c419479bf63ceb5d5ecc55c93edcef583473044022076d7cf8fd0fd19747867c666c3641a6911a7538bc20746b60a96bab37c8c8bc3022051b1fb4ac04745602d6475ba09cc2affac80307019122406e2e12caddd6b3ae4834cc95241043a7594b3c4e81c077abe207f032d165d6ce9bbe2358b1e805ed129ef8db41c4f135fdf1baf1e5b38c4a4098528440442aa957b88bbf1cafba28cf7e664528323410421ac264d13783e632bfb89824b71358eef878b53d76f8b6496862f6923b41a03fb961f2dada51e798280883d6c1aa793790a8bb6c22cb143fbdc34c6c084a90641041046622bfdb7c9b8c6122302cefa35571dc9003e6901accdd9aec6de08a1cd61bf40713a6afbfd3ef6537aabe024298b27c27ebe14d2980b04f99e8abb39a95d53aeffffffffff0a2172ff5119e6ceafa3a88b4bd178476375225519152b485602c042a4484009000000fd5c010047304402200f8d228329148cfb72e6cbb7db42e864b5fed723c3af1e9b0af561a36390540902204f74bec6a657fb5284b155f8a674fa53fcdeac9f20363d733dc7537b799b172d834730440220552d3b086755dba80fb378666e1404573fee7f9e98861d2ae0d9222665d7a996022078ff9ca1990dab021ca6dc6c419c7b7df85538e4520d2cda96cf01397df808d2834cc9524104fa9f5ee69acce271c8cd755c78f5e1f30e1404abd68407beb6ab0af4879541f27c5b5757d7eed95f213432f09d7ee0b65d69ea111ee80535fc449bdbc479e7ed4104eba0f0ecd5c1f09c053a3484d76d9f4c96572d62006bf3924d0c567794960688aa7e6ca87c1257d4da45f67f216824b337d22a03299d6073637fa25c85d579084104a9428ff8a66c8f31f01fdbada31e486df4a962c592c0b00cc226c019e1bae33a9dbafc50dd1e8d776783a0eefa50456360c572f8be7414f1dbc2fd6c75b129bc53aeffffffffff0a2172ff5119e6ceafa3a88b4bd178476375225519152b485602c042a448400a000000fd5c01004730440220394933c87fdb499cfe375d54521c78df9f31deea9596d726477e0dbb5b36453b02206b7e38629c24a1b4eb35fc560f93935dcc8e7d7df1cb29bb060d5cbc949a148783473044022022e5416c0746833bc90f56c0da5c3047be2a4b844d07d5f28b69610bd4e1a949022046f6565206af96c047b22a4a33978fd6699ea1033bce924143f6b90b962e4088834cc9524104fc96e62933ea63d9d80192f091063226c5e94a9ec4f380077d0668fc0b41efcaa0b2f39289b269581f33d9902c5e1e9898dccd3ffb32bb43346f45ac64dc159141045b46bf4029c8ed854ee8ea90f543462605fd9ef22f96e8fd24e51f358748ef93a949c38811dd747a12305df60a61974b1864b89235ce095e093933ab83c1ce04410472d3374399fcedbdb45cf0cc1c051314a271ab8f8faec201067ca6be2a5d90162744122b652f56f87814e99a0c8670a66de6230dd624d4bfafdaa41ecfdb8c7353aeffffffffff0a2172ff5119e6ceafa3a88b4bd178476375225519152b485602c042a448400600000000ffffffff05016821fda49e6e9f519784aea7cd0e689ad23dee5c8e81c4c4cde0f53c2dc889cd010000000005f5e1000017a914f9cf23091ced4a959eb9ae92425d9fe9cd54c1f38701ee4b615c5f1c4b6e0263694a9cf8024b897a6f36bf56296a65e24ba178881334010000000005f5e1000017a9147a00ee43e9933935ade93bfe0c4a698e090e5e268701d3fad029969614858e51d18eb11e8b247889de22134ac13aba1201e8ea8daef2010000000005f5e1000017a914baff33860807eed178d9c67eed3df8faf7db279a8701230f4f5d4b7c6fa845806ee4f67713459e1b69e8e60fcee2e4940c7a0d5de1b201000000000098486000160014adfdea76689a4d6d37f5e1720a4f1ccd35a7b37501230f4f5d4b7c6fa845806ee4f67713459e1b69e8e60fcee2e4940c7a0d5de1b2010000000000002710000000000000
```
and after executing it, I get this one:
```
020000000104ff0a2172ff5119e6ceafa3a88b4bd178476375225519152b485602c042a4484008000000fd5c010047304402207c702a95f503941cc00f66fe3c92f20309ab8984d8bb222cd9ef194b199e8aff02207d0de0750281be7d95051b23786f35273c419479bf63ceb5d5ecc55c93edcef583473044022076d7cf8fd0fd19747867c666c3641a6911a7538bc20746b60a96bab37c8c8bc3022051b1fb4ac04745602d6475ba09cc2affac80307019122406e2e12caddd6b3ae4834cc95241043a7594b3c4e81c077abe207f032d165d6ce9bbe2358b1e805ed129ef8db41c4f135fdf1baf1e5b38c4a4098528440442aa957b88bbf1cafba28cf7e664528323410421ac264d13783e632bfb89824b71358eef878b53d76f8b6496862f6923b41a03fb961f2dada51e798280883d6c1aa793790a8bb6c22cb143fbdc34c6c084a90641041046622bfdb7c9b8c6122302cefa35571dc9003e6901accdd9aec6de08a1cd61bf40713a6afbfd3ef6537aabe024298b27c27ebe14d2980b04f99e8abb39a95d53aeffffffffff0a2172ff5119e6ceafa3a88b4bd178476375225519152b485602c042a4484009000000cd00004cc9524104fa9f5ee69acce271c8cd755c78f5e1f30e1404abd68407beb6ab0af4879541f27c5b5757d7eed95f213432f09d7ee0b65d69ea111ee80535fc449bdbc479e7ed4104eba0f0ecd5c1f09c053a3484d76d9f4c96572d62006bf3924d0c567794960688aa7e6ca87c1257d4da45f67f216824b337d22a03299d6073637fa25c85d579084104a9428ff8a66c8f31f01fdbada31e486df4a962c592c0b00cc226c019e1bae33a9dbafc50dd1e8d776783a0eefa50456360c572f8be7414f1dbc2fd6c75b129bc53aeffffffffff0a2172ff5119e6ceafa3a88b4bd178476375225519152b485602c042a448400a000000cd00004cc9524104fc96e62933ea63d9d80192f091063226c5e94a9ec4f380077d0668fc0b41efcaa0b2f39289b269581f33d9902c5e1e9898dccd3ffb32bb43346f45ac64dc159141045b46bf4029c8ed854ee8ea90f543462605fd9ef22f96e8fd24e51f358748ef93a949c38811dd747a12305df60a61974b1864b89235ce095e093933ab83c1ce04410472d3374399fcedbdb45cf0cc1c051314a271ab8f8faec201067ca6be2a5d90162744122b652f56f87814e99a0c8670a66de6230dd624d4bfafdaa41ecfdb8c7353aeffffffffff0a2172ff5119e6ceafa3a88b4bd178476375225519152b485602c042a448400600000000ffffffff05016821fda49e6e9f519784aea7cd0e689ad23dee5c8e81c4c4cde0f53c2dc889cd010000000005f5e1000017a914f9cf23091ced4a959eb9ae92425d9fe9cd54c1f38701ee4b615c5f1c4b6e0263694a9cf8024b897a6f36bf56296a65e24ba178881334010000000005f5e1000017a9147a00ee43e9933935ade93bfe0c4a698e090e5e268701d3fad029969614858e51d18eb11e8b247889de22134ac13aba1201e8ea8daef2010000000005f5e1000017a914baff33860807eed178d9c67eed3df8faf7db279a8701230f4f5d4b7c6fa845806ee4f67713459e1b69e8e60fcee2e4940c7a0d5de1b201000000000098486000160014adfdea76689a4d6d37f5e1720a4f1ccd35a7b37501230f4f5d4b7c6fa845806ee4f67713459e1b69e8e60fcee2e4940c7a0d5de1b20100000000000027100000000000000000000000000000000000000000024730440220681779b0139739a05106145e5330bd5fe7b7912703f66eec66a3b013e0c0fb2702204eeb650604ea22bb80c8b876639331d9b4effed25a0bf134505f4cc6264fce430121023b55d6a7ba7edb876268584d2f12cb26d5cdf9f364e2eb75715df6f95dc1e9470000000000000000000000
```
By decoding both, it seems that this RPC alters the scriptSig of all of the inputs that were already signed, except for the first one.
The error that is returned by the RPC on the inputs that were already signed (second and third vins in this case) is:
"Unable to sign input, invalid stack size (possibly missing key)"
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia riproducendo il problema con le transazioni raw fornite, prima e dopo, e con l’RPC signrawtransactionwithwallet; quindi esamina come vengono gestiti gli input già firmati quando viene firmato un altro input. Il lavoro è completato quando gli scriptSigs validi esistenti rimangono invariati e l’RPC non segnala più una dimensione dello stack non valida per quegli input.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- cpp
- Ambito
- blockchain
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 30/100