   ;; FIXME: init for query-by-chaincode
   (channel/initialize (get-or-make-channel cli "mychannel"))
 
-  (let [proposal-req (hf-client/new-query-proposal-request)]
-    (transaction-request/set-args req (java.util.ArrayList. ["CAR10" "Chevy" "Volt" "Red" "Nick"]))
-    (query-by-chaincode-request/set))
+  (let [proposal-req (hf-client/new-query-proposal-request cli)
+        channel (get-or-make-channel cli "mychannel")]
+    (->> (map->TransactionOpts {:fcn "queryAllCars"
+                                :args nil
+                                :proposal-wait-time 10000})
+         ;; 3-1. Proposal
+         (prepare-chaincode-proposal-tx-req channel
+                                            proposal-req
+                                            (make-ChaincodeOpts {:name "fabcar" :version "1.0" :path "github.com/fabcar"}))
+         ;; Send Tx proposal to peers
+         (channel/query-by-chaincode channel)
+         ;; 3-2 Order
+         (order-transaction cli "mychannel")))
+  
   (channel/query-by-chaincode (get-or-make-channel cli "mychannel")
+                              (prepare-chaincode-proposal-tx-req cli "mychannel" )
                               (query-by-chaincode-request/new-instance (hf-client/get-user-context cli)))
   
   

(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-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]
