//# publish module 0x1.M { struct R has key { x: bool } public publish(s: &signer) { label b0: move_to(move(s), R { x: false }); return; } public take_off_and_consume(addr: address) acquires R { let x: bool; label b0: R { x: x } = move_from(move(addr)); return; } public verify_effects(addr: address) { label b0: assert(!exists(move(addr)), 1000); return; } } //# run --signers 0x1 import 0x1.M; main(s: signer) { label b0: M.publish(&s); return; } //# run --signers 0x1 import 0x1.M; import 0x1.signer; main(s: signer) { label b0: M.take_off_and_consume(signer.address_of(&s)); return; } //# run --signers 0x1 import 0x1.M; import 0x1.signer; main(s: signer) { label b0: M.verify_effects(signer.address_of(&s)); return; }