|
@@ -58,7 +58,20 @@
|
|
|
[:op :string]
|
|
[:op :string]
|
|
|
[:value [:map
|
|
[:value [:map
|
|
|
[:block-uuid :uuid]
|
|
[:block-uuid :uuid]
|
|
|
|
|
+ [:epoch :int]]]]]
|
|
|
|
|
+ ["update-asset"
|
|
|
|
|
+ [:catn
|
|
|
|
|
+ [:op :string]
|
|
|
|
|
+ [:value [:map
|
|
|
|
|
+ [:asset-uuid :uuid]
|
|
|
|
|
+ [:epoch :int]]]]]
|
|
|
|
|
+ ["remove-asset"
|
|
|
|
|
+ [:catn
|
|
|
|
|
+ [:op :string]
|
|
|
|
|
+ [:value [:map
|
|
|
|
|
+ [:asset-uuid :uuid]
|
|
|
[:epoch :int]]]]]])
|
|
[:epoch :int]]]]]])
|
|
|
|
|
+
|
|
|
(def ops-schema [:sequential op-schema])
|
|
(def ops-schema [:sequential op-schema])
|
|
|
|
|
|
|
|
(def ops-from-store-schema [:sequential [:catn
|
|
(def ops-from-store-schema [:sequential [:catn
|
|
@@ -77,7 +90,10 @@
|
|
|
[:local-tx {:optional true} :int]
|
|
[:local-tx {:optional true} :int]
|
|
|
[:block-uuid->ops [:map-of :uuid
|
|
[:block-uuid->ops [:map-of :uuid
|
|
|
[:map-of [:enum :move :remove :update :update-page :remove-page] :any]]]
|
|
[:map-of [:enum :move :remove :update :update-page :remove-page] :any]]]
|
|
|
- [:epoch->block-uuid-sorted-map [:map-of :int :uuid]]])
|
|
|
|
|
|
|
+ [:asset-uuid->ops [:map-of :uuid
|
|
|
|
|
+ [:map-of [:enum :update-asset :remove-asset] :any]]]
|
|
|
|
|
+ [:epoch->block-uuid-sorted-map [:map-of :int :uuid]]
|
|
|
|
|
+ [:epoch->asset-uuid-sorted-map [:map-of :int :uuid]]])
|
|
|
|
|
|
|
|
(def ops-store-schema
|
|
(def ops-store-schema
|
|
|
[:map-of :string ; repo-name
|
|
[:map-of :string ; repo-name
|
|
@@ -138,22 +154,32 @@
|
|
|
seq
|
|
seq
|
|
|
(apply min)))
|
|
(apply min)))
|
|
|
|
|
|
|
|
-(defn add-ops-to-block-uuid->ops
|
|
|
|
|
- [ops block-uuid->ops epoch->block-uuid-sorted-map]
|
|
|
|
|
|
|
+(defn- asset-uuid->min-epoch
|
|
|
|
|
+ [asset-uuid->ops asset-uuid]
|
|
|
|
|
+ (block-uuid->min-epoch asset-uuid->ops asset-uuid))
|
|
|
|
|
+
|
|
|
|
|
+(defn ^:large-vars/cleanup-todo add-ops-aux
|
|
|
|
|
+ [ops block-uuid->ops epoch->block-uuid-sorted-map asset-uuid->ops epoch->asset-uuid-sorted-map]
|
|
|
(loop [block-uuid->ops block-uuid->ops
|
|
(loop [block-uuid->ops block-uuid->ops
|
|
|
epoch->block-uuid-sorted-map epoch->block-uuid-sorted-map
|
|
epoch->block-uuid-sorted-map epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops asset-uuid->ops
|
|
|
|
|
+ epoch->asset-uuid-sorted-map epoch->asset-uuid-sorted-map
|
|
|
[op & others] ops]
|
|
[op & others] ops]
|
|
|
(if-not op
|
|
(if-not op
|
|
|
{:block-uuid->ops block-uuid->ops
|
|
{:block-uuid->ops block-uuid->ops
|
|
|
- :epoch->block-uuid-sorted-map epoch->block-uuid-sorted-map}
|
|
|
|
|
|
|
+ :asset-uuid->ops asset-uuid->ops
|
|
|
|
|
+ :epoch->block-uuid-sorted-map epoch->block-uuid-sorted-map
|
|
|
|
|
+ :epoch->asset-uuid-sorted-map epoch->asset-uuid-sorted-map}
|
|
|
(let [[op-type value] op
|
|
(let [[op-type value] op
|
|
|
- {:keys [block-uuid epoch]} value
|
|
|
|
|
- exist-ops (block-uuid->ops block-uuid)]
|
|
|
|
|
|
|
+ {:keys [block-uuid asset-uuid epoch]} value
|
|
|
|
|
+ exist-ops (some-> block-uuid block-uuid->ops)
|
|
|
|
|
+ exist-asset-ops (some-> asset-uuid asset-uuid->ops)]
|
|
|
(case op-type
|
|
(case op-type
|
|
|
"move"
|
|
"move"
|
|
|
(let [already-removed? (some-> (get exist-ops :remove) second :epoch (> epoch))]
|
|
(let [already-removed? (some-> (get exist-ops :remove) second :epoch (> epoch))]
|
|
|
(if already-removed?
|
|
(if already-removed?
|
|
|
- (recur block-uuid->ops epoch->block-uuid-sorted-map others)
|
|
|
|
|
|
|
+ (recur block-uuid->ops epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map others)
|
|
|
(let [block-uuid->ops* (-> block-uuid->ops
|
|
(let [block-uuid->ops* (-> block-uuid->ops
|
|
|
(assoc-in [block-uuid :move] op)
|
|
(assoc-in [block-uuid :move] op)
|
|
|
(update block-uuid dissoc :remove))
|
|
(update block-uuid dissoc :remove))
|
|
@@ -165,11 +191,12 @@
|
|
|
(-> epoch->block-uuid-sorted-map
|
|
(-> epoch->block-uuid-sorted-map
|
|
|
(dissoc origin-min-epoch)
|
|
(dissoc origin-min-epoch)
|
|
|
(assoc min-epoch block-uuid))
|
|
(assoc min-epoch block-uuid))
|
|
|
- others))))
|
|
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map others))))
|
|
|
"update"
|
|
"update"
|
|
|
(let [already-removed? (some-> (get exist-ops :remove) second :epoch (> epoch))]
|
|
(let [already-removed? (some-> (get exist-ops :remove) second :epoch (> epoch))]
|
|
|
(if already-removed?
|
|
(if already-removed?
|
|
|
- (recur block-uuid->ops epoch->block-uuid-sorted-map others)
|
|
|
|
|
|
|
+ (recur block-uuid->ops epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map others)
|
|
|
(let [origin-update-op (get-in block-uuid->ops [block-uuid :update])
|
|
(let [origin-update-op (get-in block-uuid->ops [block-uuid :update])
|
|
|
op* (if origin-update-op (merge-update-ops origin-update-op op) op)
|
|
op* (if origin-update-op (merge-update-ops origin-update-op op) op)
|
|
|
block-uuid->ops* (-> block-uuid->ops
|
|
block-uuid->ops* (-> block-uuid->ops
|
|
@@ -181,11 +208,12 @@
|
|
|
(-> epoch->block-uuid-sorted-map
|
|
(-> epoch->block-uuid-sorted-map
|
|
|
(dissoc origin-min-epoch)
|
|
(dissoc origin-min-epoch)
|
|
|
(assoc min-epoch block-uuid))
|
|
(assoc min-epoch block-uuid))
|
|
|
- others))))
|
|
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map others))))
|
|
|
"remove"
|
|
"remove"
|
|
|
(let [add-after-remove? (some-> (get exist-ops :move) second :epoch (> epoch))]
|
|
(let [add-after-remove? (some-> (get exist-ops :move) second :epoch (> epoch))]
|
|
|
(if add-after-remove?
|
|
(if add-after-remove?
|
|
|
- (recur block-uuid->ops epoch->block-uuid-sorted-map others)
|
|
|
|
|
|
|
+ (recur block-uuid->ops epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map others)
|
|
|
(let [block-uuid->ops* (assoc block-uuid->ops block-uuid {:remove op})
|
|
(let [block-uuid->ops* (assoc block-uuid->ops block-uuid {:remove op})
|
|
|
origin-min-epoch (block-uuid->min-epoch block-uuid->ops block-uuid)
|
|
origin-min-epoch (block-uuid->min-epoch block-uuid->ops block-uuid)
|
|
|
min-epoch (block-uuid->min-epoch block-uuid->ops* block-uuid)]
|
|
min-epoch (block-uuid->min-epoch block-uuid->ops* block-uuid)]
|
|
@@ -193,11 +221,12 @@
|
|
|
(-> epoch->block-uuid-sorted-map
|
|
(-> epoch->block-uuid-sorted-map
|
|
|
(dissoc origin-min-epoch)
|
|
(dissoc origin-min-epoch)
|
|
|
(assoc min-epoch block-uuid))
|
|
(assoc min-epoch block-uuid))
|
|
|
- others))))
|
|
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map others))))
|
|
|
"update-page"
|
|
"update-page"
|
|
|
(let [already-removed? (some-> (get exist-ops :remove-page) second :epoch (> epoch))]
|
|
(let [already-removed? (some-> (get exist-ops :remove-page) second :epoch (> epoch))]
|
|
|
(if already-removed?
|
|
(if already-removed?
|
|
|
- (recur block-uuid->ops epoch->block-uuid-sorted-map others)
|
|
|
|
|
|
|
+ (recur block-uuid->ops epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map others)
|
|
|
(let [block-uuid->ops* (-> block-uuid->ops
|
|
(let [block-uuid->ops* (-> block-uuid->ops
|
|
|
(assoc-in [block-uuid :update-page] op)
|
|
(assoc-in [block-uuid :update-page] op)
|
|
|
(update block-uuid dissoc :remove-page))
|
|
(update block-uuid dissoc :remove-page))
|
|
@@ -207,11 +236,12 @@
|
|
|
(-> epoch->block-uuid-sorted-map
|
|
(-> epoch->block-uuid-sorted-map
|
|
|
(dissoc origin-min-epoch)
|
|
(dissoc origin-min-epoch)
|
|
|
(assoc min-epoch block-uuid))
|
|
(assoc min-epoch block-uuid))
|
|
|
- others))))
|
|
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map others))))
|
|
|
"remove-page"
|
|
"remove-page"
|
|
|
(let [add-after-remove? (some-> (get exist-ops :update-page) second :epoch (> epoch))]
|
|
(let [add-after-remove? (some-> (get exist-ops :update-page) second :epoch (> epoch))]
|
|
|
(if add-after-remove?
|
|
(if add-after-remove?
|
|
|
- (recur block-uuid->ops epoch->block-uuid-sorted-map others)
|
|
|
|
|
|
|
+ (recur block-uuid->ops epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map others)
|
|
|
(let [block-uuid->ops* (assoc block-uuid->ops block-uuid {:remove-page op})
|
|
(let [block-uuid->ops* (assoc block-uuid->ops block-uuid {:remove-page op})
|
|
|
origin-min-epoch (block-uuid->min-epoch block-uuid->ops block-uuid)
|
|
origin-min-epoch (block-uuid->min-epoch block-uuid->ops block-uuid)
|
|
|
min-epoch (block-uuid->min-epoch block-uuid->ops* block-uuid)]
|
|
min-epoch (block-uuid->min-epoch block-uuid->ops* block-uuid)]
|
|
@@ -219,11 +249,42 @@
|
|
|
(-> epoch->block-uuid-sorted-map
|
|
(-> epoch->block-uuid-sorted-map
|
|
|
(dissoc origin-min-epoch)
|
|
(dissoc origin-min-epoch)
|
|
|
(assoc min-epoch block-uuid))
|
|
(assoc min-epoch block-uuid))
|
|
|
- others)))))))))
|
|
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map others))))
|
|
|
|
|
+ "update-asset"
|
|
|
|
|
+ (let [already-removed? (some-> (get exist-asset-ops :remove-asset) second :epoch (> epoch))]
|
|
|
|
|
+ (if already-removed?
|
|
|
|
|
+ (recur block-uuid->ops epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map others)
|
|
|
|
|
+ (let [asset-uuid->ops* (assoc asset-uuid->ops asset-uuid {:update-asset op})
|
|
|
|
|
+ origin-min-epoch (asset-uuid->min-epoch asset-uuid->ops asset-uuid)
|
|
|
|
|
+ min-epoch (asset-uuid->min-epoch asset-uuid->ops* asset-uuid)]
|
|
|
|
|
+ (recur block-uuid->ops epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops*
|
|
|
|
|
+ (-> epoch->asset-uuid-sorted-map
|
|
|
|
|
+ (dissoc origin-min-epoch)
|
|
|
|
|
+ (assoc min-epoch asset-uuid))
|
|
|
|
|
+ others))))
|
|
|
|
|
+ "remove-asset"
|
|
|
|
|
+ (let [add-after-remove? (some-> (get exist-asset-ops :update-asset) second :epoch (> epoch))]
|
|
|
|
|
+ (if add-after-remove?
|
|
|
|
|
+ (recur block-uuid->ops epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map others)
|
|
|
|
|
+ (let [asset-uuid->ops* (assoc asset-uuid->ops asset-uuid {:remove-asset op})
|
|
|
|
|
+ origin-min-epoch (asset-uuid->min-epoch asset-uuid->ops asset-uuid)
|
|
|
|
|
+ min-epoch (asset-uuid->min-epoch asset-uuid->ops* asset-uuid)]
|
|
|
|
|
+ (recur block-uuid->ops epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops*
|
|
|
|
|
+ (-> epoch->asset-uuid-sorted-map
|
|
|
|
|
+ (dissoc origin-min-epoch)
|
|
|
|
|
+ (assoc min-epoch asset-uuid))
|
|
|
|
|
+ others))))
|
|
|
|
|
+ )))))
|
|
|
|
|
|
|
|
|
|
|
|
|
(def empty-ops-store-value {:current-branch {:block-uuid->ops {}
|
|
(def empty-ops-store-value {:current-branch {:block-uuid->ops {}
|
|
|
- :epoch->block-uuid-sorted-map (sorted-map-by <)}})
|
|
|
|
|
|
|
+ :epoch->block-uuid-sorted-map (sorted-map-by <)
|
|
|
|
|
+ :asset-uuid->ops {}
|
|
|
|
|
+ :epoch->asset-uuid-sorted-map (sorted-map-by <)}})
|
|
|
|
|
|
|
|
(defn init-empty-ops-store!
|
|
(defn init-empty-ops-store!
|
|
|
[repo]
|
|
[repo]
|
|
@@ -239,14 +300,19 @@
|
|
|
(let [ops (ops-coercer ops)
|
|
(let [ops (ops-coercer ops)
|
|
|
{{old-branch-block-uuid->ops :block-uuid->ops
|
|
{{old-branch-block-uuid->ops :block-uuid->ops
|
|
|
old-epoch->block-uuid-sorted-map :epoch->block-uuid-sorted-map
|
|
old-epoch->block-uuid-sorted-map :epoch->block-uuid-sorted-map
|
|
|
|
|
+ old-branch-asset-uuid->ops :asset-uuid->ops
|
|
|
|
|
+ old-epoch->asset-uuid-sorted-map :epoch->asset-uuid-sorted-map
|
|
|
:as old-branch} :old-branch
|
|
:as old-branch} :old-branch
|
|
|
- {:keys [block-uuid->ops epoch->block-uuid-sorted-map]} :current-branch}
|
|
|
|
|
|
|
+ {:keys [block-uuid->ops epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map]} :current-branch}
|
|
|
(get @*ops-store repo)
|
|
(get @*ops-store repo)
|
|
|
{:keys [block-uuid->ops epoch->block-uuid-sorted-map]}
|
|
{:keys [block-uuid->ops epoch->block-uuid-sorted-map]}
|
|
|
- (add-ops-to-block-uuid->ops ops block-uuid->ops epoch->block-uuid-sorted-map)
|
|
|
|
|
|
|
+ (add-ops-aux ops block-uuid->ops epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map)
|
|
|
{old-branch-block-uuid->ops :block-uuid->ops old-epoch->block-uuid-sorted-map :epoch->block-uuid-sorted-map}
|
|
{old-branch-block-uuid->ops :block-uuid->ops old-epoch->block-uuid-sorted-map :epoch->block-uuid-sorted-map}
|
|
|
(when old-branch
|
|
(when old-branch
|
|
|
- (add-ops-to-block-uuid->ops ops old-branch-block-uuid->ops old-epoch->block-uuid-sorted-map))]
|
|
|
|
|
|
|
+ (add-ops-aux ops old-branch-block-uuid->ops old-epoch->block-uuid-sorted-map
|
|
|
|
|
+ old-branch-asset-uuid->ops old-epoch->asset-uuid-sorted-map))]
|
|
|
(swap! *ops-store update repo
|
|
(swap! *ops-store update repo
|
|
|
(fn [{:keys [current-branch old-branch]}]
|
|
(fn [{:keys [current-branch old-branch]}]
|
|
|
(cond-> {:current-branch
|
|
(cond-> {:current-branch
|
|
@@ -259,6 +325,37 @@
|
|
|
:block-uuid->ops old-branch-block-uuid->ops
|
|
:block-uuid->ops old-branch-block-uuid->ops
|
|
|
:epoch->block-uuid-sorted-map old-epoch->block-uuid-sorted-map)))))))
|
|
:epoch->block-uuid-sorted-map old-epoch->block-uuid-sorted-map)))))))
|
|
|
|
|
|
|
|
|
|
+(comment
|
|
|
|
|
+ (defn add-asset-ops!
|
|
|
|
|
+ [repo ops]
|
|
|
|
|
+ (assert (contains? (@*ops-store repo) :current-branch) (@*ops-store repo))
|
|
|
|
|
+ (let [ops (ops-coercer ops)
|
|
|
|
|
+ {{old-branch-block-uuid->ops :block-uuid->ops
|
|
|
|
|
+ old-epoch->block-uuid-sorted-map :epoch->block-uuid-sorted-map
|
|
|
|
|
+ old-branch-asset-uuid->ops :asset-uuid->ops
|
|
|
|
|
+ old-epoch->asset-uuid-sorted-map :epoch->asset-uuid-sorted-map
|
|
|
|
|
+ :as old-branch} :old-branch
|
|
|
|
|
+ {:keys [block-uuid->ops epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map]} :current-branch}
|
|
|
|
|
+ (get @*ops-store repo)
|
|
|
|
|
+ {:keys [asset-uuid->ops epoch->asset-uuid-sorted-map]}
|
|
|
|
|
+ (add-ops-aux ops block-uuid->ops epoch->block-uuid-sorted-map
|
|
|
|
|
+ asset-uuid->ops epoch->asset-uuid-sorted-map)
|
|
|
|
|
+ {old-branch-asset-uuid->ops :asset-uuid->ops old-epoch->asset-uuid-sorted-map :epoch->asset-uuid-sorted-map}
|
|
|
|
|
+ (when old-branch
|
|
|
|
|
+ (add-ops-aux ops old-branch-block-uuid->ops old-epoch->block-uuid-sorted-map
|
|
|
|
|
+ old-branch-asset-uuid->ops old-epoch->asset-uuid-sorted-map))]
|
|
|
|
|
+ (swap! *ops-store update repo
|
|
|
|
|
+ (fn [{:keys [current-branch old-branch]}]
|
|
|
|
|
+ (cond-> {:current-branch
|
|
|
|
|
+ (assoc current-branch
|
|
|
|
|
+ :asset-uuid->ops asset-uuid->ops
|
|
|
|
|
+ :epoch->asset-uuid-sorted-map epoch->asset-uuid-sorted-map)}
|
|
|
|
|
+ old-branch
|
|
|
|
|
+ (assoc :old-branch
|
|
|
|
|
+ (assoc old-branch
|
|
|
|
|
+ :asset-uuid->ops old-branch-asset-uuid->ops
|
|
|
|
|
+ :epoch->asset-uuid-sorted-map old-epoch->asset-uuid-sorted-map))))))))
|
|
|
|
|
|
|
|
(defn update-local-tx!
|
|
(defn update-local-tx!
|
|
|
[repo t]
|
|
[repo t]
|
|
@@ -360,6 +457,18 @@
|
|
|
:block-uuid->ops (dissoc block-uuid->ops block-uuid)
|
|
:block-uuid->ops (dissoc block-uuid->ops block-uuid)
|
|
|
:epoch->block-uuid-sorted-map (dissoc epoch->block-uuid-sorted-map min-epoch)))))
|
|
:epoch->block-uuid-sorted-map (dissoc epoch->block-uuid-sorted-map min-epoch)))))
|
|
|
|
|
|
|
|
|
|
+(comment
|
|
|
|
|
+ (defn remove-asset-ops!
|
|
|
|
|
+ [repo asset-uuid]
|
|
|
|
|
+ {:pre [(uuid? asset-uuid)]}
|
|
|
|
|
+ (let [repo-ops-store (get @*ops-store repo)
|
|
|
|
|
+ {:keys [epoch->asset-uuid-sorted-map asset-uuid->ops]} (:current-branch repo-ops-store)]
|
|
|
|
|
+ (assert (contains? repo-ops-store :current-branch) repo)
|
|
|
|
|
+ (let [min-epoch (asset-uuid->min-epoch asset-uuid->ops asset-uuid)]
|
|
|
|
|
+ (swap! *ops-store update-in [repo :current-branch] assoc
|
|
|
|
|
+ :asset-uuid->ops (dissoc asset-uuid->ops asset-uuid)
|
|
|
|
|
+ :epoch->asset-uuid-sorted-map (dissoc epoch->asset-uuid-sorted-map min-epoch))))))
|
|
|
|
|
+
|
|
|
|
|
|
|
|
(defn <init-load-from-indexeddb!
|
|
(defn <init-load-from-indexeddb!
|
|
|
[repo]
|
|
[repo]
|
|
@@ -373,10 +482,12 @@
|
|
|
(sort-by first <)
|
|
(sort-by first <)
|
|
|
ops-from-store-coercer
|
|
ops-from-store-coercer
|
|
|
(map second))
|
|
(map second))
|
|
|
- {:keys [block-uuid->ops epoch->block-uuid-sorted-map]}
|
|
|
|
|
- (add-ops-to-block-uuid->ops ops {} (sorted-map-by <))
|
|
|
|
|
|
|
+ {:keys [block-uuid->ops epoch->block-uuid-sorted-map asset-uuid->ops epoch->asset-uuid-sorted-map]}
|
|
|
|
|
+ (add-ops-aux ops {} (sorted-map-by <) {} (sorted-map-by <))
|
|
|
r (cond-> {:block-uuid->ops block-uuid->ops
|
|
r (cond-> {:block-uuid->ops block-uuid->ops
|
|
|
- :epoch->block-uuid-sorted-map epoch->block-uuid-sorted-map}
|
|
|
|
|
|
|
+ :epoch->block-uuid-sorted-map epoch->block-uuid-sorted-map
|
|
|
|
|
+ :asset-uuid->ops asset-uuid->ops
|
|
|
|
|
+ :epoch->asset-uuid-sorted-map epoch->asset-uuid-sorted-map}
|
|
|
graph-uuid (assoc :graph-uuid graph-uuid)
|
|
graph-uuid (assoc :graph-uuid graph-uuid)
|
|
|
local-tx (assoc :local-tx local-tx))]
|
|
local-tx (assoc :local-tx local-tx))]
|
|
|
(assert (ops-validator ops) ops)
|
|
(assert (ops-validator ops) ops)
|