How to Test Smart Contracts With Confidence and Without Testnets