kaspa-redteam v0.15.0  lock-releases.json  (library v0.9.1, covenant target)
 7 attacks run   6 survived   22 skipped   6 FINDINGS   0.1s

  OUT-04  FOUND     Keep what the fixed payouts leave over           8 of 8 attempts accepted
  FEE-01  survived  Route value to the miner fee                     8 attempts rejected
  IN-01   survived  Two covenant coins, one shared set of outputs    16 attempts rejected
  IN-02   survived  Attacker's coin at input 0, covenant moved behind it 8 attempts rejected
  OUT-01  survived  Correct value, attacker's script                 29 attempts rejected
  OUT-02  survived  Correct script, reduced value                    8 attempts rejected
  OUT-03  survived  Valid output 0, skim a later output              13 attempts rejected
  BOR-01  skipped   A stranger borrows the coin it holds and bricks it no coin the covenant holds was bricked by a borrow (where a borrow only moves it, see BOR-02)
  BOR-02  skipped   A stranger borrows the coin it holds             no explored spend lets a stranger borrow a coin the covenant holds (see BOR-01)
  BOR-03  skipped   A borrow takes the coin                          no token program with a borrowed receive among the explored paths
  BOR-04  skipped   A borrow adds nothing                            no token program with a borrowed receive among the explored paths
  BOR-05  skipped   A borrow takes the coin's KAS                    no token program with a borrowed receive among the explored paths
  BOR-06  skipped   A borrow without the borrow key                  no token program with a borrowed receive among the explored paths
  BOR-07  skipped   A borrow rewrites the borrow settings            no token program with a borrowed receive among the explored paths
  FAM-01  skipped   Mint more than allowed                           no explored spend creates coins of another program (give the project's files together)
  FAM-02  skipped   Mint to the attacker                             no explored spend creates coins of another program (give the project's files together)
  FAM-03  skipped   Mint one coin twice                              no explored spend creates coins of another program (give the project's files together)
  FAM-04  skipped   Coin of the right program, wrong family          no explored spend creates coins of another program (give the project's files together)
  FAM-05  skipped   Authority does not continue                      no explored spend creates coins of another program (give the project's files together)
  FAM-06  skipped   Replay the same proof on the next state          no explored spend creates coins of another program (give the project's files together)
  FAM-07  skipped   Start the family a second time                   no explored spend creates coins of another program (give the project's files together)
  FAM-08  skipped   Hand out the minting power                       no explored spend creates coins of another program (give the project's files together)
  FAM-09  skipped   Take tokens without paying                       no explored spend creates coins of another program (give the project's files together)
  FAM-10  skipped   Sweep coins sent to the covenant                 no explored spend creates coins of another program (give the project's files together)
  ORC-04  skipped   Reading signed by the attacker's own key         no explored path this attack applies to
  SEC-01  skipped   Front-run a revealed secret or reading           no explored path this attack applies to
  SIG-01  skipped   Spend a signed path with an invalid signature    no explored path this attack applies to
  SIG-02  skipped   Sign with the attacker's own key                 no explored path this attack applies to
  ST-01   skipped   Rewrite the recorded owner of the next state     no explored permissionless path carries a key in its next state

[MED]  OUT-04 Keep what the fixed payouts leave over
  Path `lock-claim-100-tranches-total-max (imported)`: the path fixes its payouts but not what is left of the coin. Here the coin held 122 KAS and the payouts total 121.920975 KAS, so anyone kept 0.078825 KAS by adding an output of their own. A coin that always holds exactly the payouts plus the fee loses nothing.
  In practice: The coin holds more than the fixed payouts: an overpayment, a top-up, a deposit made before the final amounts were known. Whoever spends it adds an output and keeps the excess.
  Repro: /tmp/claude-501/rt-lock-releases/OUT-04.json   replay: kaspa-redteam replay /tmp/claude-501/rt-lock-releases/OUT-04.json
  Fix pattern: require(tx.inputs[this.activeInputIndex].value <= a + b + c + maxFee);  // or pin a change output back to the depositor

[MED]  OUT-04 Keep what the fixed payouts leave over
  Paths `lock-claim-all-at-once-final (imported)`, `lock-claim-final-p2sh (imported)`: the path fixes its payouts but not what is left of the coin. Here the coin held 6.8 KAS and the payouts total 6.781342 KAS, so anyone kept 0.018458 KAS by adding an output of their own. A coin that always holds exactly the payouts plus the fee loses nothing.
  In practice: The coin holds more than the fixed payouts: an overpayment, a top-up, a deposit made before the final amounts were known. Whoever spends it adds an output and keeps the excess.
  Repro (lock-claim-all-at-once-final (imported)): /tmp/claude-501/rt-lock-releases/OUT-04-2.json   replay: kaspa-redteam replay /tmp/claude-501/rt-lock-releases/OUT-04-2.json
  Repro (lock-claim-final-p2sh (imported)): /tmp/claude-501/rt-lock-releases/OUT-04-6.json   replay: kaspa-redteam replay /tmp/claude-501/rt-lock-releases/OUT-04-6.json
  Fix pattern: require(tx.inputs[this.activeInputIndex].value <= a + b + c + maxFee);  // or pin a change output back to the depositor

[MED]  OUT-04 Keep what the fixed payouts leave over
  Paths `lock-claim-cliff-lump-p2sh (imported)`, `lock-claim-one-tranche (imported)`: the path fixes its payouts but not what is left of the coin. Here the coin held 6.8 KAS and the payouts total 6.735081 KAS, so anyone kept 0.064719 KAS by adding an output of their own. A coin that always holds exactly the payouts plus the fee loses nothing.
  In practice: The coin holds more than the fixed payouts: an overpayment, a top-up, a deposit made before the final amounts were known. Whoever spends it adds an output and keeps the excess.
  Repro (lock-claim-cliff-lump-p2sh (imported)): /tmp/claude-501/rt-lock-releases/OUT-04-3.json   replay: kaspa-redteam replay /tmp/claude-501/rt-lock-releases/OUT-04-3.json
  Repro (lock-claim-one-tranche (imported)): /tmp/claude-501/rt-lock-releases/OUT-04-7.json   replay: kaspa-redteam replay /tmp/claude-501/rt-lock-releases/OUT-04-7.json
  Fix pattern: require(tx.inputs[this.activeInputIndex].value <= a + b + c + maxFee);  // or pin a change output back to the depositor

[MED]  OUT-04 Keep what the fixed payouts leave over
  Path `lock-claim-feerate-300 (imported)`: the path fixes its payouts but not what is left of the coin. Here the coin held 6.8 KAS and the payouts total 6.604523 KAS, so anyone kept 0.195277 KAS by adding an output of their own. A coin that always holds exactly the payouts plus the fee loses nothing.
  In practice: The coin holds more than the fixed payouts: an overpayment, a top-up, a deposit made before the final amounts were known. Whoever spends it adds an output and keeps the excess.
  Repro: /tmp/claude-501/rt-lock-releases/OUT-04-4.json   replay: kaspa-redteam replay /tmp/claude-501/rt-lock-releases/OUT-04-4.json
  Fix pattern: require(tx.inputs[this.activeInputIndex].value <= a + b + c + maxFee);  // or pin a change output back to the depositor

[MED]  OUT-04 Keep what the fixed payouts leave over
  Path `lock-claim-final-p2pk (imported)`: the path fixes its payouts but not what is left of the coin. Here the coin held 4.672085 KAS and the payouts total 4.653427 KAS, so anyone kept 0.018458 KAS by adding an output of their own. A coin that always holds exactly the payouts plus the fee loses nothing.
  In practice: The coin holds more than the fixed payouts: an overpayment, a top-up, a deposit made before the final amounts were known. Whoever spends it adds an output and keeps the excess.
  Repro: /tmp/claude-501/rt-lock-releases/OUT-04-5.json   replay: kaspa-redteam replay /tmp/claude-501/rt-lock-releases/OUT-04-5.json
  Fix pattern: require(tx.inputs[this.activeInputIndex].value <= a + b + c + maxFee);  // or pin a change output back to the depositor

[MED]  OUT-04 Keep what the fixed payouts leave over
  Path `lock-claim-two-more-tranches (imported)`: the path fixes its payouts but not what is left of the coin. Here the coin held 5.735081 KAS and the payouts total 5.672085 KAS, so anyone kept 0.062796 KAS by adding an output of their own. A coin that always holds exactly the payouts plus the fee loses nothing.
  In practice: The coin holds more than the fixed payouts: an overpayment, a top-up, a deposit made before the final amounts were known. Whoever spends it adds an output and keeps the excess.
  Repro: /tmp/claude-501/rt-lock-releases/OUT-04-8.json   replay: kaspa-redteam replay /tmp/claude-501/rt-lock-releases/OUT-04-8.json
  Fix pattern: require(tx.inputs[this.activeInputIndex].value <= a + b + c + maxFee);  // or pin a change output back to the depositor

Spend map (who can spend each path, as found by search)
  lock-claim-100-tranches-total-max (imported) anyone, no signature; from 2 inputs worth 122 KAS pays 119.920975 KAS to script aa20caeca80173d0.., 1 KAS to script aa20d367abdb20b4.., 1 KAS to script aa20469ca1cefb8e.. [imported]
  lock-claim-all-at-once-final (imported) anyone, no signature; from 2 inputs worth 6.8 KAS pays 1 KAS to script aa20fb166d2373dd.., 5.781342 KAS to script 203775ab7089bc6a.. [imported]
  lock-claim-cliff-lump-p2sh (imported) anyone, no signature; from 2 inputs worth 6.8 KAS pays 4.735081 KAS to script aa203328b5710832.., 1 KAS to script aa2090d0d4fb12c8.., 1 KAS to script aa203177e217fe49.. [imported]
  lock-claim-feerate-300 (imported) anyone, no signature; from 2 inputs worth 6.8 KAS pays 4.604523 KAS to script aa205d8ac77b14e3.., 1 KAS to script aa207b79835fdefb.., 1 KAS to script aa20b3a3f887cef8.. [imported]
  lock-claim-final-p2pk (imported) anyone, no signature; from 2 inputs worth 4.672085 KAS pays 1 KAS to script aa20a5fea7535498.., 3.653427 KAS to script 203775ab7089bc6a.. [imported]
  lock-claim-final-p2sh (imported) anyone, no signature; from 2 inputs worth 6.8 KAS pays 1 KAS to script aa20537eac30815d.., 5.781342 KAS to script aa205b48089e3f28.. [imported]
  lock-claim-one-tranche (imported) anyone, no signature; from 2 inputs worth 6.8 KAS pays 4.735081 KAS to script aa201746b7683640.., 1 KAS to script aa20333750554c5c.., 1 KAS to script aa20a5fea7535498.. [imported]
  lock-claim-two-more-tranches (imported) anyone, no signature; from 2 inputs worth 5.735081 KAS pays 3.672085 KAS to script aa201a3277c5b6d7.., 1 KAS to script aa20742c0fe00f0f.., 1 KAS to script aa20b3a3f887cef8.. [imported]

note: 8 baseline transaction(s) imported and attacked as given
note: judge: rusty-kaspa consensus validator 2.1.0 in process (mempool relay policy not applied)
