zcash/zallet#644 reports that a wallet created from scratch fragments its transparent funds onto internal change addresses on every t->t send, after which the account reports a spendable total that no single-address z_sendmany source can pay in one transaction. The fix is the any_transparent fund source of z_sendfromaccount (zcash/zallet#531, integration-test coverage on branch dw/sendfromaccount).
The scenario suite on dw/sendfromaccount does not yet reproduce the reported situation: an any_transparent payout larger than any single address holds, gathered across multiple addresses including a wallet-created internal change fragment, paying multiple transparent recipients with zero shielded inputs (exchanges reject deposits whose transaction has shielded inputs).
Add a wallet_z_send_scenarios.py scenario driving the miner's exact pipeline (coinbase -> shield -> de-shield -> fragmenting t->t payout -> gathered payout round), pinning both the failure preconditions and the fix.
zcash/zallet#644 reports that a wallet created from scratch fragments its transparent funds onto internal change addresses on every t->t send, after which the account reports a spendable total that no single-address z_sendmany source can pay in one transaction. The fix is the
any_transparentfund source ofz_sendfromaccount(zcash/zallet#531, integration-test coverage on branchdw/sendfromaccount).The scenario suite on
dw/sendfromaccountdoes not yet reproduce the reported situation: anany_transparentpayout larger than any single address holds, gathered across multiple addresses including a wallet-created internal change fragment, paying multiple transparent recipients with zero shielded inputs (exchanges reject deposits whose transaction has shielded inputs).Add a
wallet_z_send_scenarios.pyscenario driving the miner's exact pipeline (coinbase -> shield -> de-shield -> fragmenting t->t payout -> gathered payout round), pinning both the failure preconditions and the fix.