kaspa-redteam v0.15.0  fee-claims.json  (library v0.9.1, covenant target)
 7 attacks run   6 survived   22 skipped   2 FINDINGS   0.0s

  OUT-04  FOUND     Keep what the fixed payouts leave over           2 of 2 attempts accepted
  FEE-01  survived  Route value to the miner fee                     2 attempts rejected
  IN-01   survived  Two covenant coins, one shared set of outputs    4 attempts rejected
  IN-02   survived  Attacker's coin at input 0, covenant moved behind it 2 attempts rejected
  OUT-01  survived  Correct value, attacker's script                 8 attempts rejected
  OUT-02  survived  Correct script, reduced value                    2 attempts rejected
  OUT-03  survived  Valid output 0, skim a later output              4 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 `curve-v1-sweep-standard (imported)`: the path fixes its payouts but not what is left of the coin. Here the coin held 70 KAS and the payouts total 69.982802 KAS, so anyone kept 0.016998 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-fee-claims/OUT-04.json   replay: kaspa-redteam replay /tmp/claude-501/rt-fee-claims/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
  Path `pool-v1-sweep (imported)`: the path fixes its payouts but not what is left of the coin. Here the coin held 573814.29004321 KAS and the payouts total 573814.25861121 KAS, so anyone kept 0.031232 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-fee-claims/OUT-04-2.json   replay: kaspa-redteam replay /tmp/claude-501/rt-fee-claims/OUT-04-2.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)
  curve-v1-sweep-standard (imported) anyone, no signature; from 2 inputs worth 70 KAS pays 47.99999999 KAS to script aa208ebc01ac88e3.., 6 KAS to script 20d6f09e0da20f68.., 6.00000001 KAS to script 2022222222222222.., 9.982802 KAS to attacker [imported]
  pool-v1-sweep (imported) anyone, no signature; from 2 inputs worth 573814.29004321 KAS pays 573789.29 KAS to script aa2035c97d3f7be7.., 7.5000216 KAS to script 20d6f09e0da20f68.., 7.50002161 KAS to script 2022222222222222.., 9.968568 KAS to attacker [imported]

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