class AbstractProxyTransaction implements Identifiable<TransactionIdentifier> {

    final void doCommit(final VotingFuture<?> ret) {
        checkReadWrite();
        checkSealed();

        sendRequest(new TransactionDoCommitRequest(getIdentifier(), nextSequence(), localActor()), t -> {
            if (t instanceof TransactionCommitSuccess) {
                ret.voteYes();
            } else if (t instanceof RequestFailure) {
                ret.voteNo(((RequestFailure<?, ?>) t).getCause().unwrap());
            } else {
                ret.voteNo(unhandledResponseException(t));
            }

            LOG.debug("Transaction {} doCommit completed", this);

            // Needed for ProxyHistory$Local data tree rebase points.
            parent.completeTransaction(this);

            enqueuePurge();
        });
    }

      AbstractProxyTransaction(final ProxyHistory parent, final boolean isDone);

}