             [clojure-fabric.chaincode-id :as chaincode-id]
             [clojure-fabric.transaction-request :as transaction-request]
             [clojure-fabric.query-by-chaincode-request :as query-by-chaincode-request]
+            [clojure-fabric.proposal-response :as proposal-response]
+            ;; [clojure-fabric.chaincode-response :as chaincode-response]
             ;; [clojure-fabric.base-exception :as base-exception]
             ;; [clojure-fabric.instantiate-proposal-request :as instantiate-proposal-request]
             ;; [clojure-fabric.blockchain-info :as blockchain-info]

(defrecord TransactionOpts [fcn args ;; chaincode-language chaincode-endorsement-policy
                            proposal-wait-time])

(defn propose-transaction
  ([client channel-id chaincode-opts transaction-opts]
   (propose-transaction client channel-id chaincode-opts transaction-opts nil))
  ([client channel-id chaincode-opts {:keys [fcn args proposal-wait-time]} peers]
   (let [channel (get-or-make-channel client channel-id)
         req (hf-client/new-transaction-proposal-request client)]
     (when-not (channel/is-initialized channel)
       (channel/initialize channel))
     (transaction-request/set-chaincode-id req (get-or-make-chaincode chaincode-opts))
     ;; Transaction options
     ;; FIXME: what about chaincode-language, chaincode-endorsement-policy ?
     (when fcn
       (transaction-request/set-fcn req fcn))
     (when args
       (transaction-request/set-args req args))
     (when proposal-wait-time
       (transaction-request/set-proposal-wait-time req proposal-wait-time))
     ;; Send Tx proposal to peers
     (apply channel/send-transaction-proposal channel req peers))))

(defn order-transaction
  ([client channel-id proposal-responses]

            ;; [clojure-fabric.chaincode-input-deserializer :as chaincode-input-deserializer]
            ;; [clojure-fabric.proposal-exception :as proposal-exception]
            ;; [clojure-fabric.chaincode-invocation-spec-deserializer :as chaincode-invocation-spec-deserializer]
            ;; [clojure-fabric.chaincode-language :as chaincode-language]
            ;; [clojure-fabric.proposal-response-payload-deserializer :as proposal-response-payload-deserializer]
            ;; [clojure-fabric.chaincode-proposal-payload-deserializer :as chaincode-proposal-payload-deserializer]
            ;; [clojure-fabric.proto-utils :as proto-utils]
            ;; [clojure-fabric.query-exception :as query-exception]
            ;; [clojure-fabric.channel-configuration :as channel-configuration]
            ;; [clojure-fabric.query-installed-chaincodes-builder :as query-installed-chaincodes-builder]
