Area: API / ramps settlement
Ramp transfers reach status: completed while no on-chain transaction occurs and balances do not change, in both directions:
- On-ramp: a Lightspark on-ramp reached
completed with signature: null; the destination wallet received 0 of the token.
- Off-ramp: a Lightspark off-ramp reached
completed with signature: null; the source wallet's balance was unchanged, so the amount never left.
A plain on-chain transfer in the same environment settles correctly (a real signature, balances move), so this is specific to the ramp settlement path, not an environment limitation.
Reproduce
curl "$BASE/v1/payments/transfers/$TRANSFER_ID" -H "Authorization: Bearer $KEY"
# status completed, signature null, slot null
curl "$BASE/v1/wallets?includeBalances=true" -H "Authorization: Bearer $KEY"
# the affected wallet balance is unchanged
Impact: a reconciliation process or a caller polling for completed will believe funds moved when they did not. On money movement this is a correctness problem.
Suggested fix: do not mark a ramp transfer completed until the on-chain leg confirms with a real signature. Use an intermediate status such as settling for the fiat-settled-but-not-yet-delivered state.
Area: API / ramps settlement
Ramp transfers reach
status: completedwhile no on-chain transaction occurs and balances do not change, in both directions:completedwithsignature: null; the destination wallet received0of the token.completedwithsignature: null; the source wallet's balance was unchanged, so the amount never left.A plain on-chain transfer in the same environment settles correctly (a real signature, balances move), so this is specific to the ramp settlement path, not an environment limitation.
Reproduce
Impact: a reconciliation process or a caller polling for
completedwill believe funds moved when they did not. On money movement this is a correctness problem.Suggested fix: do not mark a ramp transfer
completeduntil the on-chain leg confirms with a realsignature. Use an intermediate status such assettlingfor the fiat-settled-but-not-yet-delivered state.