From e449e12a2aef39baed2196585441de576e01311e Mon Sep 17 00:00:00 2001 From: Julien Eluard Date: Tue, 2 Jan 2018 12:02:55 +0100 Subject: [PATCH] [#4663] Added collectibles and CK support Signed-off-by: Pedro Pombeiro --- resources/images/tokens/mainnet/CK.png | Bin 0 -> 3341 bytes resources/images/tokens/mainnet/CK@2x.png | Bin 0 -> 9318 bytes resources/images/tokens/mainnet/CK@3x.png | Bin 0 -> 16382 bytes resources/images/tokens/mainnet/EMONA.png | Bin 0 -> 2811 bytes resources/images/tokens/mainnet/EMONA@2x.png | Bin 0 -> 7669 bytes resources/images/tokens/mainnet/EMONA@3x.png | Bin 0 -> 14349 bytes resources/images/tokens/mainnet/STRK.png | Bin 0 -> 2683 bytes resources/images/tokens/mainnet/STRK@2x.png | Bin 0 -> 7069 bytes resources/images/tokens/mainnet/STRK@3x.png | Bin 0 -> 13204 bytes src/status_im/translations/en.cljs | 4 + src/status_im/ui/screens/db.cljs | 12 ++- src/status_im/ui/screens/events.cljs | 1 + src/status_im/ui/screens/subs.cljs | 1 + src/status_im/ui/screens/views.cljs | 2 + .../wallet/collectibles/cryptokitties.cljs | 90 ++++++++++++++++++ .../screens/wallet/collectibles/events.cljs | 9 ++ .../screens/wallet/collectibles/styles.cljs | 10 ++ .../ui/screens/wallet/collectibles/subs.cljs | 6 ++ .../ui/screens/wallet/collectibles/views.cljs | 36 +++++++ src/status_im/ui/screens/wallet/events.cljs | 25 +++-- src/status_im/ui/screens/wallet/styles.cljs | 6 -- src/status_im/ui/screens/wallet/views.cljs | 61 +++++++++--- src/status_im/utils/ethereum/erc721.cljs | 11 +++ src/status_im/utils/ethereum/tokens.cljs | 17 +++- 24 files changed, 264 insertions(+), 27 deletions(-) create mode 100755 resources/images/tokens/mainnet/CK.png create mode 100755 resources/images/tokens/mainnet/CK@2x.png create mode 100755 resources/images/tokens/mainnet/CK@3x.png create mode 100755 resources/images/tokens/mainnet/EMONA.png create mode 100755 resources/images/tokens/mainnet/EMONA@2x.png create mode 100755 resources/images/tokens/mainnet/EMONA@3x.png create mode 100755 resources/images/tokens/mainnet/STRK.png create mode 100755 resources/images/tokens/mainnet/STRK@2x.png create mode 100755 resources/images/tokens/mainnet/STRK@3x.png create mode 100644 src/status_im/ui/screens/wallet/collectibles/cryptokitties.cljs create mode 100644 src/status_im/ui/screens/wallet/collectibles/events.cljs create mode 100644 src/status_im/ui/screens/wallet/collectibles/styles.cljs create mode 100644 src/status_im/ui/screens/wallet/collectibles/subs.cljs create mode 100644 src/status_im/ui/screens/wallet/collectibles/views.cljs create mode 100644 src/status_im/utils/ethereum/erc721.cljs diff --git a/resources/images/tokens/mainnet/CK.png b/resources/images/tokens/mainnet/CK.png new file mode 100755 index 0000000000000000000000000000000000000000..5375407a3c042e286959e0840f922315f6c97881 GIT binary patch literal 3341 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 XR3YWmZh=DJ00000NkvXXu0mjfAuK=X literal 0 HcmV?d00001 diff --git a/resources/images/tokens/mainnet/CK@2x.png b/resources/images/tokens/mainnet/CK@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..c8eb0fac4d07b6b7fe3a51a92b1bb0eb69037fcf GIT binary patch literal 9318 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 U*tC7K`~Uy|07*qoM6N<$f+sdCP5=M^ literal 0 HcmV?d00001 diff --git a/resources/images/tokens/mainnet/CK@3x.png b/resources/images/tokens/mainnet/CK@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..9557561bb3e1c72b4d1ae5d984a2fcdd13d9a514 GIT binary patch literal 16382 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 literal 0 HcmV?d00001 diff --git a/resources/images/tokens/mainnet/EMONA.png b/resources/images/tokens/mainnet/EMONA.png new file mode 100755 index 0000000000000000000000000000000000000000..20b6229589c4dbd6bf9a2047c60604e94466523e GIT binary patch literal 2811 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 Hu0mjfWjaz^ literal 0 HcmV?d00001 diff --git a/resources/images/tokens/mainnet/STRK.png b/resources/images/tokens/mainnet/STRK.png new file mode 100755 index 0000000000000000000000000000000000000000..03a38b9acab12a1e0b46610d8d87c50244dc9ccc GIT binary patch literal 2683 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 (js/JSON.parse o) + :keywordize-keys true)) + +(handlers/register-handler-fx + :load-kitties + (fn [{db :db} [_ ids]] + {:db db + :http-get-n (mapv (fn [id] + {:url (str "https://api.cryptokitties.co/kitties/" id) + :success-event-creator (fn [o] + [:load-kitty-success [id (parse-payload o)]]) + :failure-event-creator (fn [o] + [:load-kitty-failure [id (parse-payload o)]])}) + ids)})) + +(defn kitties-url [address] + (str "https://api.cryptokitties.co/kitties?offset=0&limit=100&owner_wallet_address=" address "&parents=false")) + +(handlers/register-handler-fx + :load-kitties-success + (fn [{db :db} [_ ids]] + {:db db + :dispatch [:load-kitties ids]})) + +(defmethod collectibles/load-collectibles-fx symbol [_ address] + {:http-get {:url (kitties-url address) + :success-event-creator (fn [o] + [:load-kitties-success (map :id (:kitties (parse-payload o)))]) + :failure-event-creator (fn [o] + [:load-collectibles-failure (parse-payload o)]) + :timeout-ms 10000}}) + +(defn- kitty-name [{:keys [id name]}] + (or name (str (i18n/label :t/cryptokitty-name) id))) + +(def view-style + {:padding-vertical 10}) + +(def text-style + {:flex 1 + :flex-direction :row + :align-items :center + :padding-horizontal 16}) + +(def name-style + {:color colors/black + :margin-bottom 10}) + +(defmethod collectibles/render-collectible symbol [_ {:keys [id bio image_url] :as m}] + [react/view {:style view-style} + [react/view {:style text-style} + ;; TODO reenable image once SVG is supported + #_[react/image {:style {:width 80 :height 80 :margin 10 :background-color "red"} :source {:uri image_url}}] + [react/view {} + [react/text {:style name-style} + (kitty-name m)] + [react/text {:number-of-lines 3 + :ellipsize-mode :tail} + bio]]] + [action-button/action-button {:label (i18n/label :t/view-cryptokitties) + :icon :icons/address + :icon-opts {:color colors/blue} + :accessibility-label :open-collectible-button + :on-press #(re-frame/dispatch [:open-browser {:url (str "https://www.cryptokitties.co/kitty/" id)}])}]]) diff --git a/src/status_im/ui/screens/wallet/collectibles/events.cljs b/src/status_im/ui/screens/wallet/collectibles/events.cljs new file mode 100644 index 0000000000..dc2eb25cbd --- /dev/null +++ b/src/status_im/ui/screens/wallet/collectibles/events.cljs @@ -0,0 +1,9 @@ +(ns status-im.ui.screens.wallet.collectibles.events + (:require [re-frame.core :as re-frame] + [status-im.utils.handlers :as handlers])) + +(handlers/register-handler-fx + :load-collectibles-failure + [re-frame/trim-v] + (fn [{db :db} [{:keys [message]}]] + {:db (assoc db :collectibles-failure message)})) diff --git a/src/status_im/ui/screens/wallet/collectibles/styles.cljs b/src/status_im/ui/screens/wallet/collectibles/styles.cljs new file mode 100644 index 0000000000..17508ecc4f --- /dev/null +++ b/src/status_im/ui/screens/wallet/collectibles/styles.cljs @@ -0,0 +1,10 @@ +(ns status-im.ui.screens.wallet.collectibles.styles) + +(def default-collectible + {:padding-left 10 + :padding-vertical 20}) + +(def loading-indicator + {:flex 1 + :align-items :center + :justify-content :center}) diff --git a/src/status_im/ui/screens/wallet/collectibles/subs.cljs b/src/status_im/ui/screens/wallet/collectibles/subs.cljs new file mode 100644 index 0000000000..b0c88f4bcf --- /dev/null +++ b/src/status_im/ui/screens/wallet/collectibles/subs.cljs @@ -0,0 +1,6 @@ +(ns status-im.ui.screens.wallet.collectibles.subs + (:require [re-frame.core :as re-frame])) + +(re-frame/reg-sub :collectibles + (fn [db [_ s]] + (vals (get-in db [:collectibles s])))) diff --git a/src/status_im/ui/screens/wallet/collectibles/views.cljs b/src/status_im/ui/screens/wallet/collectibles/views.cljs new file mode 100644 index 0000000000..a23f314b52 --- /dev/null +++ b/src/status_im/ui/screens/wallet/collectibles/views.cljs @@ -0,0 +1,36 @@ +(ns status-im.ui.screens.wallet.collectibles.views + (:require-macros [status-im.utils.views :refer [defview letsubs]]) + (:require [re-frame.core :as re-frame] + [status-im.ui.components.colors :as colors] + [status-im.ui.components.list.views :as list] + [status-im.ui.components.react :as react] + [status-im.ui.components.status-bar.view :as status-bar] + [status-im.ui.components.styles :as component.styles] + [status-im.ui.components.toolbar.view :as toolbar] + [status-im.ui.screens.wallet.collectibles.styles :as styles])) + +(defmulti load-collectibles-fx (fn [symbol _] symbol)) + +(defmethod load-collectibles-fx :default [_ _] nil) + +(defmulti render-collectible (fn [symbol _] symbol)) + +(defmethod render-collectible :default [symbol {:keys [id name]}] + [react/view {:style styles/default-collectible} + [react/text (str (clojure.core/name symbol) " #" (or id name))]]) + +(defview display-collectible [] + (letsubs [{:keys [name symbol]} [:get-screen-params]] + (let [collectibles @(re-frame/subscribe [:collectibles symbol])] + [react/view {:style component.styles/flex} + (if (seq collectibles) + [react/view {:style component.styles/flex} + [status-bar/status-bar] + [toolbar/toolbar {} + toolbar/default-nav-back + [toolbar/content-title name]] + [list/flat-list {:data collectibles + :key-fn (comp str :id) + :render-fn #(render-collectible symbol %)}]] + [react/view {:style styles/loading-indicator} + [react/activity-indicator {:animating true :size :large :color colors/blue}]])]))) diff --git a/src/status_im/ui/screens/wallet/events.cljs b/src/status_im/ui/screens/wallet/events.cljs index ad0d80f5bd..7dca36acac 100644 --- a/src/status_im/ui/screens/wallet/events.cljs +++ b/src/status_im/ui/screens/wallet/events.cljs @@ -12,7 +12,9 @@ status-im.ui.screens.wallet.request.events [status-im.utils.money :as money] [status-im.constants :as constants] - [status-im.ui.screens.navigation :as navigation])) + [status-im.ui.screens.navigation :as navigation] + [status-im.ui.screens.wallet.collectibles.views :as collectibles] + [clojure.set :as set])) (defn get-balance [{:keys [web3 account-id on-success on-error]}] (if (and web3 account-id) @@ -99,14 +101,18 @@ (fn [{:keys [web3 obj success-event]}] (ethereum/estimate-gas-web3 web3 (clj->js obj) #(re-frame/dispatch [success-event %2])))) +(defn tokens-symbols [v chain] + (set/difference (set v) (set (map :symbol (tokens/nfts-for chain))))) + ;; Handlers (handlers/register-handler-fx :update-wallet - (fn [{{:keys [web3 account/account network network-status] {:keys [address settings]} :account/account :as db} :db} _] + (fn [{{:keys [web3 network network-status] {:keys [address settings]} :account/account :as db} :db} _] (let [network (get-in db [:account/account :networks network]) chain (ethereum/network->chain-keyword network) mainnet? (= :mainnet chain) - symbols (get-in settings [:wallet :visible-tokens chain]) + assets (get-in settings [:wallet :visible-tokens chain]) + tokens (tokens-symbols (get-in settings [:wallet :visible-tokens chain]) chain) currency-id (or (get-in settings [:wallet :currency]) :usd) currency (get constants/currencies currency-id)] (when (not= network-status :offline) @@ -116,11 +122,11 @@ :error-event :update-balance-fail} :get-tokens-balance {:web3 web3 :account-id address - :symbols symbols + :symbols assets :chain chain :success-event :update-token-balance-success :error-event :update-token-balance-fail} - :get-prices {:from (if mainnet? (conj symbols "ETH") ["ETH"]) + :get-prices {:from (if mainnet? (conj tokens "ETH") ["ETH"]) :to [(:code currency)] :success-event :update-prices-success :error-event :update-prices-fail} @@ -267,4 +273,11 @@ (fn [{:keys [db]}] {:db (-> db (assoc-in [:wallet :send-transaction] {}) - (navigation/navigate-back))})) \ No newline at end of file + (navigation/navigate-back))})) + +(handlers/register-handler-fx + :wallet/show-collectibles + (fn [_ [_ address {:keys [symbol] :as m}]] + (if-let [fx (collectibles/load-collectibles-fx symbol address)] + (assoc fx :dispatch [:navigate-to :display-collectible m]) + {:show-error (str "Missing implementation for " (name symbol))}))) diff --git a/src/status_im/ui/screens/wallet/styles.cljs b/src/status_im/ui/screens/wallet/styles.cljs index 5c2cb71963..cd46e85673 100644 --- a/src/status_im/ui/screens/wallet/styles.cljs +++ b/src/status_im/ui/screens/wallet/styles.cljs @@ -1,7 +1,6 @@ (ns status-im.ui.screens.wallet.styles (:require-macros [status-im.utils.styles :refer [defstyle]]) (:require [status-im.ui.components.colors :as colors] - [status-im.ui.components.react :as react] [status-im.ui.components.styles :as styles])) ;; wallet @@ -153,11 +152,6 @@ :padding-top 16 :background-color colors/white}) -(def asset-section-title - {:font-size 14 - :margin-left 16 - :color colors/gray}) - (def asset-item-container {:flex 1 :flex-direction :row diff --git a/src/status_im/ui/screens/wallet/views.cljs b/src/status_im/ui/screens/wallet/views.cljs index 57fb9c6a0e..fc80e14df1 100644 --- a/src/status_im/ui/screens/wallet/views.cljs +++ b/src/status_im/ui/screens/wallet/views.cljs @@ -9,7 +9,9 @@ [status-im.ui.components.icons.vector-icons :as vector-icons] [status-im.ui.screens.wallet.onboarding.views :as onboarding.views] [status-im.ui.screens.wallet.styles :as styles] - [status-im.ui.screens.wallet.utils :as wallet.utils])) + [status-im.ui.screens.wallet.utils :as wallet.utils] + [status-im.utils.money :as money] + status-im.ui.screens.wallet.collectibles.cryptokitties)) (defn toolbar-view [] [toolbar/toolbar {:style styles/toolbar :flat? true} @@ -80,21 +82,56 @@ :number-of-lines 1} (if @asset-value @asset-value "...")]]]))) -(defn- asset-section [assets currency] - [react/view styles/asset-section - [react/text {:style styles/asset-section-title} (i18n/label :t/wallet-assets)] - [list/flat-list - {:default-separator? true - :scroll-enabled false - :key-fn (comp str :symbol) - :data assets - :render-fn (render-asset currency)}]]) +(def item-icon-forward + [list/item-icon {:icon :icons/forward + :icon-opts {:color :gray}}]) + +(defn- render-collectible [address-hex {:keys [symbol icon amount] :as m}] + (let [i (money/to-fixed amount) + details? (pos? i)] + [react/touchable-highlight (when details? + {:on-press #(re-frame/dispatch [:wallet/show-collectibles address-hex m])}) + [react/view {:style styles/asset-item-container} + [list/item + [list/item-image icon] + [react/view {:style styles/asset-item-value-container} + [react/text {:style styles/asset-item-value + :number-of-lines 1 + :ellipsize-mode :tail + :accessibility-label (str (-> symbol name clojure.string/lower-case) "-collectible-value-text")} + (or i 0)] + [react/text {:style styles/asset-item-currency + :uppercase? true + :number-of-lines 1} + (name symbol)]] + (when details? + item-icon-forward)]]])) + +(defn group-assets [v] + (group-by #(if (:nft? %) :nfts :tokens) v)) + +(defn- asset-section [assets currency address-hex] + (let [{:keys [tokens nfts]} (group-assets assets)] + [react/view styles/asset-section + [list/section-list + {:default-separator? true + :scroll-enabled false + :key-fn (comp str :symbol) + :sections [{:title (i18n/label :t/wallet-assets) + :key :assets + :data tokens + :render-fn (render-asset currency)} + {:title (i18n/label :t/wallet-collectibles) + :key :collectibles + :data nfts + :render-fn #(render-collectible address-hex %)}]}]])) (views/defview wallet-root [] (views/letsubs [assets [:wallet/visible-assets-with-amount] currency [:wallet/currency] portfolio-value [:portfolio-value] - {:keys [seed-backed-up?]} [:get-current-account]] + {:keys [seed-backed-up?]} [:get-current-account] + address-hex [:get-current-account-hex]] [react/view styles/main-section [toolbar-view] [react/scroll-view {:refresh-control @@ -110,7 +147,7 @@ [backup-seed-phrase]) [list/action-list actions {:container-style styles/action-section}] - [asset-section assets currency] + [asset-section assets currency address-hex] ;; Hack to allow different colors for bottom scroll view (iOS only) [react/view {:style styles/scroll-bottom}]]])) diff --git a/src/status_im/utils/ethereum/erc721.cljs b/src/status_im/utils/ethereum/erc721.cljs new file mode 100644 index 0000000000..1479aca08a --- /dev/null +++ b/src/status_im/utils/ethereum/erc721.cljs @@ -0,0 +1,11 @@ +(ns status-im.utils.ethereum.erc721 + " + Helper functions to interact with [ERC721](https://eips.ethereum.org/EIPS/eip-721) smart contract + " + (:require [status-im.utils.ethereum.core :as ethereum] + [status-im.utils.ethereum.erc20 :as erc20])) + +(defn token-of-owner-by-index [web3 contract address index cb] + (ethereum/call web3 + (ethereum/call-params contract "tokenOfOwnerByIndex(address,uint256)" (ethereum/normalized-address address) index) + #(cb %1 (ethereum/hex->bignumber %2)))) diff --git a/src/status_im/utils/ethereum/tokens.cljs b/src/status_im/utils/ethereum/tokens.cljs index 0f7155c4a5..eaeab6d117 100644 --- a/src/status_im/utils/ethereum/tokens.cljs +++ b/src/status_im/utils/ethereum/tokens.cljs @@ -385,7 +385,19 @@ :name "Attention Token of Media" :address "0x9B11EFcAAA1890f6eE52C6bB7CF8153aC5d74139" :decimals 8 - :hidden? true}]) + :hidden? true} + {:symbol :CK + :nft? true + :name "CryptoKitties" + :address "0x06012c8cf97bead5deae237070f9587f8e7a266d"} + {:symbol :EMONA + :nft? true + :name "EtheremonAsset" + :address "0xB2c0782ae4A299f7358758B2D15dA9bF29E1DD99"} + {:symbol :STRK + :nft? true + :name "CryptoStrikers" + :address "0xdcaad9fd9a74144d226dbf94ce6162ca9f09ed7e"}]) :testnet (resolve-icons :testnet [{:name "Status Test Token" @@ -416,6 +428,9 @@ (defn tokens-for [chain] (get all chain)) +(defn nfts-for [chain] + (filter :nft? (tokens-for chain))) + (defn sorted-tokens-for [chain] (->> (tokens-for chain) (filter #(not (:hidden? %)))