Priority: P0 — hard blocker for the BIP70/BIP270 (CTX/DashSpend) send cutover; structurally impossible on sendToAddresses (those protocols sign, POST to a merchant server, and broadcast only on ack). Implementation will be driven by @bfoss765 — this issue tracks design agreement.
Ask: expose the existing internal build/broadcast split with an explicit reservation lifecycle:
data class SignedCoreTransaction(val txidHex: String, val rawTxBytes: ByteArray, val feeDuffs: Long, val reservationToken: Long)
suspend fun ManagedPlatformWallet.buildSignedPayment(recipients, network, coreSignerHandle, accountType, accountIndex, options): SignedCoreTransaction
suspend fun ManagedPlatformWallet.broadcastSigned(token: Long): String
suspend fun ManagedPlatformWallet.releaseReservation(token: Long) // payment abandoned / server nack
The internal new → setFunding → buildSigned already produces exactly this (UTXOs reserved at buildSigned); the manager remains the sole driver so the CoreTransactionBuilder KDoc's safety argument is preserved.
Context: dashpay/dash-wallet#1507 Phase 5c GAP-4. cc @QuantumExplorer
Priority: P0 — hard blocker for the BIP70/BIP270 (CTX/DashSpend) send cutover; structurally impossible on
sendToAddresses(those protocols sign, POST to a merchant server, and broadcast only on ack). Implementation will be driven by @bfoss765 — this issue tracks design agreement.Ask: expose the existing internal build/broadcast split with an explicit reservation lifecycle:
The internal
new → setFunding → buildSignedalready produces exactly this (UTXOs reserved atbuildSigned); the manager remains the sole driver so theCoreTransactionBuilderKDoc's safety argument is preserved.Context: dashpay/dash-wallet#1507 Phase 5c GAP-4. cc @QuantumExplorer