Checklocktimeverify - Dépenses P2SH non-témoins utilisant C++ libbitcoin
J'essaie de dépenser un UTXO (P2SH non-témoin) en utilisant libbitcoin. J'ai consulté la documentation wiki du système libbitcoin (https://github.com/libbitcoin/libbitcoin-system/wiki) mais je n'ai pas trouvé de solution à mon problème. Malheureusement, la page ne fournit qu'un guide sur les dépenses P2SH imbriquées.
Le script de rachat est le suivant =>
OP_CHECKLOCKTIMEVERIFY OP_DROP OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
Ci-dessous le code C++ que j'ai écrit pour dépenser =>
int main() { wallet::ec_private privateKey1("secret pour une raison évidente"); wallet::ec_public publicKey1 = privateKey1.to_public(); data_chunk pubKey1 = to_chunk(publicKey1.point()); short_hash KeyHash1 = bitcoin_short_hash(publicKey1.point()); temps de verrouillage data_chunk ; extend_data(locktime, to_little_endian(1713352486)); script racheter_script = script({opération(locktime), opération(opcode(177)), opération(opcode(117)), opération(opcode(118)), opération(opcode(169)), opération(to_chunk(KeyHash1)), opération(opcode(136)), opération(opcode(172))}); wallet::payment_address from_address1("p2sh-cltv-address"); wallet::payment_address to_address1("p2pkh-legacy-address"); hash_digest prev_txid1; decode_hash(prev_txid1, "prev-txid-in-hexadecimal-format"); uint32_t input_index1 = 0 ; point de sortie vin1 (prev_txid1, input_index1); //make Entrée entrée entrée entrée1 = entrée (); input1.set_previous_output(vin1); input1.set_sequence(0xffffffffe); uint64_t valeur_sortie1 ; decode_base10(output_value1, "0.00999770", 8); script output_script1 = script().to_pay_key_hash_pattern(to_address1.hash()); sortie sortie1 (valeur_sortie1, script_sortie1); // Récupère l'heure actuelle sous forme de time_point auto now = std::chrono::system_clock::now(); auto époque = std :: chrono :: system_clock :: to_time_t (maintenant); auto unix_time = static_cast(époque); chain::transaction tx = chain::transaction(); tx.set_version(2); tx.set_locktime(unix_time - 100000); tx.inputs().push_back(input1); tx.outputs().push_back(output1); approbation sig1 ; if (script::create_endorsement(sig1, privateKey1.secret(),rache_script, tx, 0u, sighash_algorithm::all, script_version::zero, 1000000)) { std::cout
