signrawtransactionwithwallet显示错误无法签名输入,无效的堆栈大小可能缺少键

问题描述

我正在尝试在比特币测试网中发送交易。 因此,我正在这样做:创建输入和输出数组,然后调用createrawtransaction并获取事务十六进制。然后我打电话给decoderawtransaction并看到:

stdClass Object
(
    [txid] => b7374ebb31a77eb65cc146bfca8d09ac84e7ced068e121fedee90d6205a8481a
    [hash] => b7374ebb31a77eb65cc146bfca8d09ac84e7ced068e121fedee90d6205a8481a
    [version] => 2
    [size] => 158
    [vsize] => 158
    [weight] => 632
    [locktime] => 0
    [vin] => Array
        (
            [0] => stdClass Object
                (
                    [txid] => 8d3c81d39d9d852b347490934b78f22137454706ea96c5cb61c1d1336d3c0440
                    [vout] => 0
                    [scriptSig] => stdClass Object
                        (
                            [asm] =>
                            [hex] =>
                        )

                    [sequence] => 4294967295
                )

            [1] => stdClass Object
                (
                    [txid] => abd5a3c9abf946d90730b37f2f0dd2eab48cf1520bdccf2174a57c49991b5f81
                    [vout] => 0
                    [scriptSig] => stdClass Object
                        (
                            [asm] =>
                            [hex] =>
                        )

                    [sequence] => 4294967295
                )

        )

    [vout] => Array
        (
            [0] => stdClass Object
                (
                    [value] => 0.00091799
                    [n] => 0
                    [scriptPubKey] => stdClass Object
                        (
                            [asm] => OP_HASH160 626e89f8d256f31e3f18787e50fc2b874251e004 OP_EQUAL
                            [hex] => a914626e89f8d256f31e3f18787e50fc2b874251e00487
                            [reqSigs] => 1
                            [type] => scripthash
                            [addresses] => Array
                                (
                                    [0] => 2N2DgdTtbrfBg65c1DrnuzJnAvSWWr4gkNS
                                )

                        )

                )

            [1] => stdClass Object
                (
                    [value] => 0.01509785
                    [n] => 1
                    [scriptPubKey] => stdClass Object
                        (
                            [asm] => OP_DUP OP_HASH160 6f4d68c699514a84cf4588bca6b8c7314b90b8c0 OP_EQUALVERIFY OP_CHECKSIG
                            [hex] => 76a9146f4d68c699514a84cf4588bca6b8c7314b90b8c088ac
                            [reqSigs] => 1
                            [type] => pubkeyhash
                            [addresses] => Array
                                (
                                    [0] => mqfU2qaG2BtrEqnovAbcRExvzHByvm1rPB
                                )

                        )

                )

        )

)

但是当我在此事务的十六进制上调用signrawtransactionwithwallet时,我得到了错误

stdClass Object
(
    [result] => stdClass Object
        (
            [hex] => 020000000240043c6d33d1c161cbc596ea0647453721f2784b939074342b859d9dd3813c8d0000000000ffffffff815f1b99497ca57421cfdc0b52f18cb4ead20d2f7fb33007d946f9abc9a3d5ab0000000000ffffffff02976601000000000017a914626e89f8d256f31e3f18787e50fc2b874251e0048799091700000000001976a9146f4d68c699514a84cf4588bca6b8c7314b90b8c088ac00000000
            [complete] =>
            [errors] => Array
                (
                    [0] => stdClass Object
                        (
                            [txid] => 8d3c81d39d9d852b347490934b78f22137454706ea96c5cb61c1d1336d3c0440
                            [vout] => 0
                            [witness] => Array
                                (
                                )

                            [scriptSig] =>
                            [sequence] => 4294967295
                            [error] => Unable to sign input,invalid stack size (possibly missing key)
                        )

                    [1] => stdClass Object
                        (
                            [txid] => abd5a3c9abf946d90730b37f2f0dd2eab48cf1520bdccf2174a57c49991b5f81
                            [vout] => 0
                            [witness] => Array
                                (
                                )

                            [scriptSig] =>
                            [sequence] => 4294967295
                            [error] => Unable to sign input,invalid stack size (possibly missing key)
                        )

                )

        )

    [error] =>
    [id] =>
)

哪里有问题?好像就像在教程https://discussions.apple.com/thread/8512119中一样,除了bitoin api稍有变化...

解决方法

是的,在本教程中,不赞成使用signrawtransaction。

  1. 您是否具有发送者的私钥? getaddressinfo / dumpprivkey

  2. 您已加载钱包了吗? loadwallet

或者,您可以转储私钥并签署交易。 signrawtransactionwithkey

,

解决了。问题是,发件人地址没有对应的私钥(我不知道它是如何发生的)