ElementsProject / ElementsProject/elements
signrawtransactionwithwallet seems broken with taproot descriptor wallets
- Lenguaje dominante
- C++
- Estrellas
- 1.2k
- Forks
- 416
- Merge medio
- 1 d 23 h
- PR fusionados (30 d)
- 15
Descripción
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 })
```
Guía de contribución
Línea de trabajo
Comienza reproduciendo el flujo reportado con una billetera de descriptores taproot, comparando signtransactionwithwallet con signrawtransactionwithwallet y con la ruta manual sendtomainchain. Inspecciona la transacción resultante y la respuesta de validación de RPC; se considera terminado cuando la transacción firmada se acepta sin un error Invalid Schnorr signature.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- cpp, rust
- Área
- blockchain
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 32/100