ElementsProject / ElementsProject/elements

signrawtransactionwithwallet seems broken with taproot descriptor wallets

Open
#1,081 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
1.2k
Forks
416
Avg merge
1d 23h
Merged PRs (30d)
15

Description

I'm trying to make a manual pegout (`sendtomainchain` doesn't work with descriptor wallets). Creating the tx works and the signing using `signtransactionwithwallet` seems to work, but then when sending, the signature seems wrong:
```rust
let sidechain_info = sidechaind.sidechain_info().unwrap();

let (addr, pk, sk) = bitcoind.create_address(None);
let pak_proof = {
let sumkey = self.pegout_sumkey(&sk, MASTER_OFFLINE_PUB);
self.pegout_proof(&sumkey, &pk, MASTER_ONLINE_PUB);
};
let fee = Amount::from_sat(PEGOUT_FEE_SAT);
let amount = state.amount - fee;

let tx = elements::Transaction {
version: 1,
lock_time: 0,
input: vec![elements::TxIn {
previous_output: state.utxo,
script_sig: bitcoin::Script::new(),
sequence: 0,
witness: Default::default(),
asset_issuance: Default::default(),
has_issuance: false,
is_pegin: false,
}],
output: vec![
elements::TxOut {
asset: sidechaind.bitcoin_asset(),
script_pubkey: bitcoin::blockdata::script::Builder::new()
.push_opcode(bitcoin::blockdata::opcodes::all::OP_RETURN)
.push_slice(&sidechain_info.parent_blockhash[..])
.push_slice(&addr.script_pubkey()[..])
.push_key(&pk)
.push_slice(&pak_proof)
.into_script(),
value: elements::confidential::Value::Explicit(amount.as_sat()),
nonce: elements::confidential::Nonce::Null,
witness: Default::default(),
},
elements::TxOut {
asset: sidechaind.bitcoin_asset(),
script_pubkey: bitcoin::Script::new(),
value: elements::confidential::Value::Explicit(fee.as_sat()),
nonce: elements::confidential::Nonce::Null,
witness: Default::default(),
},
],
};

let (tx_signed, _) = taproot_wallet.sign_tx(&tx);
debug!("Pegout tx {}", elements::encode::serialize(&tx_signed).to_hex());
let txid = taproot_wallet.send_tx(&tx_signed).unwrap();
```

This results in the following error being returned by the RPC:
```
Rpc(RpcError { code: -26, message: "non-mandatory-script-verify-flag (Invalid Schnorr signature)", data: None })
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.