RPCs are not automatically retried currently, so there isn't a need to deduplicate. In the (likely near) future, we will provide a way to mark an RPC as idempotent, which will allow the library to retry. Note: if we can prove that the RPC never started (like a connection wasn't established), we will reconnect.
You can implement the concept of a transaction as a streaming RPC. Just make each message of the stream some action, and on completion you can commit the transaction on the remote side. That way if the RPC fails, the rest of the updates will not be applied.