Reclaim // Check if the sender is eligible to reclaim if ( … ) send (<to → sender, amount → 0, tag → “main", msg → "failure">, MT) else // remove sender from the list let v = get(backers, sender) in backers := remove(backers, sender); send (<to → sender, amount → v, tag → “main", msg → "refunded">, MT) SCILLA SOLIDITY EXTERNAL CALLS ALWAYS HAPPEN AT THE END REENTRANCY FREE // SAFE TO USE function reclaim { uint amount = backers[msg.sender]; backers[msg.sender] = 0; msg.sender.transfer(amount); }