| Transaction Data | {:origin #133,:sequence 5,:command (do (quote peace) (call *registry* (register {:description ["Peace NFT collection actor."],:name "Peace Actor"})) (define guv (or *controller* #133)) (set-controller guv) (define offers ^{:doc {:description "Map of `owner` -> map of `recipient address` -> `set of NFT ids`"}} {}) (define base-url "http://localhost:8080/dlfs/peace0x") (defn valid-id? [id] (cond (and (blob? id) (= 2 (count id)) (<= 1 (int id) 100)) true false)) (loop [nfts #{} i 1] (cond (<= i 100) (let [nft (blob i) nft (if (< i 128) (blob (str "00" nft)) nft)] (if (valid-id? nft) (recur (conj nfts nft) (inc i)) (fail (str "Somehow created an invalid NFT:" nft)))) (do (set-holding guv nfts) (or (= (count nfts) 100) (fail "Unexpected total number of Archons" (count nfts)))))) (defn -qc [q] (cond (set? q) q (valid-id? q) #{q} (nil? q) #{} (fail :ARGUMENT "Invalid NFT quantity"))) (defn -direct-transfer ^{:private? true} [sender receiver quantity] (let [q (-qc quantity) receiver (address receiver) sender-balance (or (get-holding sender) #{}) _ (or (subset? q sender-balance) (fail :FUNDS "Cannot transfer non-owned NFT(s)")) receiver-balance (or (get-holding receiver) #{}) new-sender-balance (difference sender-balance q) new-receiver-balance (union receiver-balance q)] (set-holding sender new-sender-balance) (set-holding receiver new-receiver-balance) quantity)) (defn accept ^{:callable true} [sender quantity] (let [q (-qc quantity) sender (address sender) sender-offers (or (get offers sender) {}) offer (or (get-in offers [sender *caller*]) #{}) _ (or (subset? q offer) (fail :STATE "Insuffient NFT offer to accept")) receiver-balance (or (get-holding *caller*) #{}) new-offer (difference offer q)] (set! offers (assoc offers sender (assoc sender-offers *caller* new-offer))) (-direct-transfer sender *caller* quantity))) (defn balance ^{:callable true} [owner] (or (get-holding owner) #{})) (defn direct-transfer ^{:callable true} [receiver quantity data] (-direct-transfer *caller* receiver quantity)) (defn offer ^{:callable true} [receiver quantity] (let [q (-qc quantity) caller-offers (get offers *caller* {})] (set! offers (assoc offers *caller* (assoc caller-offers receiver q))))) (def quantity-add ^{:callable true} union) (def quantity-sub ^{:callable true} difference) (def quantity-subset? ^{:callable true} subset?) (defn get-metadata ^{:doc {:description "Gets metadata for a given NFT ID.",:signature [{:params []} {:params [id]}]},:callable true} ([] (recur *scope*)) ([id] (or (valid-id? id) (return nil)) (let [hex (str id) img (str base-url hex ".png")] {"image" img,"name" "Peace"}))))} | CVX representation of the transaction |