Skip to content

Add IGRA exit unsigned transaction CLI#2

Open
reshmem wants to merge 9 commits into
roman/kaspa-igra-supportfrom
roman/igra-exit-unsigned-cli
Open

Add IGRA exit unsigned transaction CLI#2
reshmem wants to merge 9 commits into
roman/kaspa-igra-supportfrom
roman/igra-exit-unsigned-cli

Conversation

@reshmem

@reshmem reshmem commented Apr 20, 2026

Copy link
Copy Markdown

Summary

  • add cast igra build-exit to build kaspawallet-compatible unsigned IGRA exit PST hex plus JSON manifest
  • add cast igra verify-exit to verify unsigned/signed artifacts, payload nonce, txid prefix, outputs, locking script, and multisig completion
  • derive per-input multisig xpubs exactly as kaspawallet expects and canonicalize signer order by sorted master xpubs

Validation

  • cargo test -p foundry-common igra_exit
  • cargo check -p cast
  • built official kaspawallet from /Users/user/Source/igra/kaspad
  • created three temporary 2-of-3 multisig kaspawallet key files
  • built an unsigned IGRA exit PST with txid prefix 00 and verified it
  • signed with official kaspawallet: signer1 partial, signer2 partial, signer3 partial, signer1+2 fully signed, signer1+3 fully signed
  • parsed the fully signed PST with official kaspawallet parse

Note: global cargo fmt --check is currently blocked by pre-existing unrelated formatting diffs; rustfmt --edition 2024 --check crates/common/src/igra_exit.rs crates/cast/src/cmd/igra.rs passes.

reshmem added 9 commits April 20, 2026 19:25
Fetch the current Kaspa virtual DAA score before building an in-process IGRA payload transaction and pass it into input selection. The submitter now filters immature coinbase UTXOs using the network coinbase maturity, prefers spendable non-coinbase inputs before coinbase inputs, and returns a clearer error when all available fee UTXOs are still immature.

Add unit coverage for the maturity predicate so non-coinbase UTXOs remain spendable, coinbase UTXOs just inside the maturity window are rejected, and coinbase UTXOs at the maturity boundary are accepted.

Expand the mainnet exit-bundle runbook for both unsigned-first and signer-1-first production modes. The runbook now requires manifest.kind branching, embedded parent igra-exits bundle verification for signed-1 bundles, exact local rebuild checks for bundled unsigned JSON/hex, signer-1 artifact verification before signer 2, and richer report evidence.

Add IGRA protocol and operator documentation: the L1 transaction protocol reference, the April 2026 Kaspa explorer audit for the entry bridge address, and a short macOS offline signing guide for the third signer. Existing Rust changes outside the submitter are rustfmt-only cleanup.

Test: cargo test -p foundry-common kaspa_payload_submitter_filters_immature_coinbase_utxos
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant