implement handshake prototype

You don't need to wrap this migration in a transaction