class AbstractProxyTransaction implements Identifiable<TransactionIdentifier> {

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

        final TransactionRequest<?> req = new TransactionPreCommitRequest(getIdentifier(), nextSequence(),
            localActor());
        sendRequest(req, t -> {
            if (t instanceof TransactionPreCommitSuccess) {
                ret.voteYes();
            } else if (t instanceof RequestFailure) {
                ret.voteNo(((RequestFailure<?, ?>) t).getCause().unwrap());
            } else {
                ret.voteNo(unhandledResponseException(t));
            }

            onPreCommitComplete(req);
        });
    }

      AbstractProxyTransaction(final ProxyHistory parent, final boolean isDone);

}