From 3da2cd9b9ec69c707c9cb36ffdb3505a4b5d4b2d Mon Sep 17 00:00:00 2001 From: Goran Jovic Date: Wed, 17 Oct 2018 13:46:59 +0200 Subject: [PATCH] feature #6250 - added xdai and poa sidechains Signed-off-by: Goran Jovic --- resources/images/tokens/poa/0-native.png | Bin 0 -> 17440 bytes resources/images/tokens/poa/0-native@2x.png | Bin 0 -> 18200 bytes resources/images/tokens/poa/0-native@3x.png | Bin 0 -> 18840 bytes resources/images/tokens/xdai/0-native.png | Bin 0 -> 19265 bytes resources/images/tokens/xdai/0-native@2x.png | Bin 0 -> 20293 bytes resources/images/tokens/xdai/0-native@3x.png | Bin 0 -> 21287 bytes .../chat/commands/impl/transactions.cljs | 13 +++++++-- src/status_im/constants.cljs | 20 +++++++++++-- src/status_im/models/wallet.cljs | 9 ++++-- src/status_im/protocol/core.cljs | 9 ++++-- .../ui/components/common/common.cljs | 11 +++++-- src/status_im/ui/screens/wallet/events.cljs | 3 +- src/status_im/ui/screens/wallet/utils.cljs | 12 ++++++-- src/status_im/utils/ethereum/core.cljs | 11 +++++-- src/status_im/utils/ethereum/eip681.cljs | 3 +- src/status_im/utils/ethereum/tokens.cljs | 11 ++++++- src/status_im/utils/prices.cljs | 27 ++++++++++++------ src/status_im/utils/transactions.cljs | 20 ++++++++----- test/cljs/status_im/test/utils/prices.cljs | 9 ++++-- translations/en.json | 3 ++ 20 files changed, 123 insertions(+), 38 deletions(-) create mode 100644 resources/images/tokens/poa/0-native.png create mode 100644 resources/images/tokens/poa/0-native@2x.png create mode 100644 resources/images/tokens/poa/0-native@3x.png create mode 100644 resources/images/tokens/xdai/0-native.png create mode 100644 resources/images/tokens/xdai/0-native@2x.png create mode 100644 resources/images/tokens/xdai/0-native@3x.png diff --git a/resources/images/tokens/poa/0-native.png b/resources/images/tokens/poa/0-native.png new file mode 100644 index 0000000000000000000000000000000000000000..48ce900363304e36cce39e1deab1bdecf1acbe4e GIT binary patch literal 17440 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 CH`-wU literal 0 HcmV?d00001 diff --git a/resources/images/tokens/poa/0-native@3x.png b/resources/images/tokens/poa/0-native@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d80b544b700b0d47f3b85899ebeb4f18967380da GIT binary patch literal 18840 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 literal 0 HcmV?d00001 diff --git a/resources/images/tokens/xdai/0-native.png b/resources/images/tokens/xdai/0-native.png new file mode 100644 index 0000000000000000000000000000000000000000..2c7f1dcadf76f6a1fd387ea7388c6d9e5ca2e28f GIT binary patch literal 19265 zcmeI3c{r5o|HmImwxo_agldeFHe-gtn6YO|jL6tUW6Us^B{LXX97oY2T991_#gUMd zB}p5X+Vjv_S zE&u?4kl{YvgUs)pOK-k4%+J#cMI`1IKXsoC4FCj1mfl=Ie4-cttW_uK=$M+iQs@+# zD}@R&)X@P^Jt+jD2Oa6rU3HVcCOIGOp!u{&?8MooG5bfm6R#=MOLP~}tIITPiDgJmvB zl$5fmnZ`ptt=z5;NAU{$S=^n5n?{TBv>f)kiAQ<~ujcEiTulhjz9b7$Ru%x(q%7L! zUJC(&jcNnpj6)Vly#jj2Rt1OiL`lhR?Bu%76+F4Vx>F$dg;1s2<-M1IizuLI^g@GT zFi|KtA>*Vv7Zr{n2R<-EgWq9EaaZ5nu z_2{q)U>~d!m9T9yZ!q`zE9skG$OGd*`*mx+wfBXuN4K5eo<@Y+O;rSr1CKV0{vpkE zaaDST0z&>UXtL`G*QR9SJ+&tLEJw~C^ga3p(6o__)-@0s#yFn>ujvps!|wY8k};PQ z=hET@Njx|i9?Df~uGgOK3fKa^*)W8LXX>Qk5pUD+s2Byg4Z%uUQn}PT(Z?wBt>Rbi zns0sG9^UhNzy+|Xl)Z%!T69>aolA@hb0!nE-R*g#=|;&vM|GmZ(@$_~WbKaw!^l7d zTIR%-O7o{+Lu*OED7bH@?8$9c2h6HP*3_oxuM2Xzx58;^7`?Hc2LO1;wUY(@FQ6?-;bjUf~1Aua!K&URRS+$d4SbjPY6#Q z*t`~S2sW14Fak~wF_ZQs%Uw&>Vy^!K6GUGk-zosh_+Wl5m1lT2clgx<$ns6p9o=Tf_k{VFc$EPqzaX`#8Ot}bF#by35S{t|VvcRfhLHwq{7 z!D+*Ovol@R5fiUY=e#=xw|Fh6MswYv=Ky_ol#PYWOAY zo}fyr@jHS;!@=$07;sWGI6d^-MWX<{3nJ0?{hS2Nj6NAlg3oNYazgOFP`lj7MTYim z>0Re^JPqM>F_LJ%b6n29#c7#H7gVphe$n1oZhO-?rB3qoWHtTd?YU7&o#xkLS7m5# zKKSbec$XoMnLI{3+VD}<3}&;1-b+*eOqstTN_4#rwl>(s8}`?$HOEa}zSpa3t0nq; ztXIHKz3lw8D+iv(_LS0v=g(ex1jDPySHZzzyH3ki8SC##JDHz!BVOzTc2x7X z8+YwQ8X;9xAc+!*vGMWoH{%!LiSYtYGvW*5A1V#GmcOWL63^IlX?ufhszr`Pu9sPV zoU&buzN(ggiFdwt^yJY2T5~JPV~br9XiIr*K$2UM4yuXn=QZJV$O}gwqwk^n^d>h3 zra!DJcq#Zoqz}^A@|TbOP`O41C1YDU^!eicpo9g(c{#cB?hhm0f1o}o*7Q^@QeWe@ z1}AiGEnzc8LQ=U$F?}sbNP6w|<4@L3ZFW!!K-73xSHfQ8ZNE3Uwp8U~;R~vCkn~xz zxEBs-d-R7+`&LO+6<6&!EpeKX@LcAM%y~2+-a`RNtW!@^edAwrnDKfz@LmvNJ9-Pc z!?^n*S&4)gP?Es@N|1ruxp=?1>L1$1x3~c*Z5g4W(4JphUYuL}Dj<5sY;1=bw*zqC zuH6&WJN@~vLcUw3wjTLCc|8R;3XE^a=D%_GZQ0-YxPEuNTeL;CMPy;|#Bcq@jb4ov zEqNq0(sfefs~fLx-z+RZ-<+?yd1vx$(%D0yhw=|4wL<*S{+e^E=EUcotTX045N011 zv95cIp@GjskB4p#X(s9C!_L1Vrqv%id-|+{bcVFMz60%p3a^SNvI+Ta3tnZn8|G2w zakFRoc9A9$Wlr>#o=CYtxnE*Qa)?6{_B%>qij<4XsWiGskwxjDt!YRZdQFIY1THz! zOMH)bDeuDfVHbc3^eyi#e>dknYcoAE@AheM z#%@M%{??r4S}I>P|En#-vd_1hZe_rRy`E2}`f5Y&V5rtq8>&IL!#=0#*(lXZF_&yE zd0kS+4q|C{ZSQVwJKMJBZm!-%JwC9Tw4cnG1QkmAiG3!{0iCne{$^*)Ml&xPcBY>= zZ)sApi6jDvAct!k>()HJ*ply^&y!zaOfWfo#_7NP0>xp{PgCL(ssw~t7T-3 zisD>TGL1dZbtcShmN1S&suU{}!}0XTw=WcA$z-)RR4H289&Dbx@phM#x#fZ0_&$w7 zdf!W;cRc~Es^02c;yl~7xfwnUpS%LEJ74dUQPKTy*nPTe^M=h53Vy4#LzF_U>%MGL|@;_!OB-!+H92P8yxt?myNr zS~s@Na3a09PGm-U)TPTY3i)V1K8dG8&{A}~TDq%6@Wfr>u?T@{doR0MHSejgd;n_5aa}v*jptEH|AMV)^eA;m2)S*+`Ts1QNTo>{t&$gs}cz7xDnP%K*dVkhOqN7i5N=Xoz zL0J4)>9`P7IF&w5SC7>k3Njn1o9;SO@o=HFS)#?i+v06@c@v&;`rXHX{+XKthek`o z0^#op-saA~AHLL!>wIW8?>j%QP@X6ZqykZKah0dG1QT|r25mJ>`7{100ED_Fuf{Bb z7S%1EQUE~saF}LP(fV*VF6BZ%S&+*_aJ?Yt&bH2r@;XhGyK5vnF1NQ=b5$iQEW{Fk zZ2oD`(9lrJt9Of739VMZRsaK+N{!d9@BxC)cuy2N))E%ikZ(|R61B`L06r-oI9Qla>Bb1$?D*t(h4w$=&TO5QbNPfR2{r4 zai5mrTbp zAY_{Ka*(fabn(oRLZs4(6f$TjF4l?SMOO!dmlAz@eHj;t`YjQe_JtjjB9wupLgnRP z(4UE%ao;plFHeuphvtlf;yv&rJef{o>g0c_qkg^B`zHTe%5Uy}Ow61UH2UY_ug6Ow z{WLX=uIJ4}@CE7L(tcIaFuqhg^dO!_@$$ss^}Lxwk^b4}=|sZ!$@yEPCC@(|JDx%O z2icNmS@wA;EYFY{bF3&GPdt`R@x)Ll9vaK5?EBp^^JaNzRe^S*u{a`m=@xpI8kAM^ zea64X!|P({cnzjj1tJfF$SYvvl~HgwN?v&n432`qRs>n@$r1xiaV8Rce~5uVDX1{R ztcT;Zr#Pa1w{|Ehz(Zs2bv@ms}P(tNH1C@gNN zHfrFOwin)64f?m%?}znG`9((jaXSAUg5~%tg(XeeU(oL1+{L-3RN5 z*LGp9kbhS>mgD|i$eKV6x^y=2ApUPm1%>R5_x$fn26M`>%ri0GlcquNq>w;ZD%FFC z!!AuM)SK-5agwkAVQ+G9vFF3$<=|og!rtWIV$X-g%fZD0 zguThZ#hwp~mxGH12z!%*i#;C}F9#P35cVbq7kfS|UJfo6AnZ*JF7|v_yc}FCK-ilc zTM7B2@E3lR1u2N!!jEM5*S79i|R4lee5SiBruEI`fIja&WQd!{X)OVgbV5i2)FMb8URRM06{ z89~~YGNX^mHW$?$%gE2(dq~XIb@vUgHqGb9UL5*l9eVQ4W!=Y_URt3SWnxF9SHq_k z?B6uK^^bu2X%Ys7*V)(l*ZOX&4ID~}gYN@#_n#k6OXqRlkpuM_xWVK1+m@J4*Br^x z#`B`@!_$#v)->gt?!meHP-)XB98GnN^@Z{1^yBBUvF;lS)<~YCqhI&N=fsKU?e0Yw zCSQ-;(Q9QG{aY}PVahEAsvt(X7hc+J#8tk%_hd=#9`7N($g{fpN`r}qMP@R&ZVNUf zqXeF<4v3YO^d8F3>v+8mRY@3)=Jp`+WO~PyOo-GR&<`MV?;H=D{uH`+*>oT*Gj~zC zrr+^4U)_z82LlB+0|m;s-}^2mxOEKY-Bg~&3cWPZck10z>7lwYJ1HNK*Q=2*NX4vq zHjz_&`a{+Ge3AR=-T{s@WcZ%wd3*DZAdnVOgz#P>mG4@A%c$DyoZWEzd!_mQu9?G0 zV8VN`3+ZFeE`uL~acD~Oe4GRq7*R6UU5GpqqHit-Ch-i`5xsuwD5Z>RbCqLnC z5!^qsqqHjS53Jtow&mOE=yLC#n{}cBVA;iQ{?19G{0lT*!_wri( z`l543-YBT2ZdQQM>9X@es_EU+#+9@C^U6mnKgfEEJ-5^AUbi=GYryHatu@K~uS|v7 zl`$~?qg?eO_m%p3-f#_Ds`6%@GH9#KcrO^-?R2~%tZ%UJ&P$(9g{HDTa%qAF=4F|p z_Z)wv)%{{hetAc;+VT7VYFd1Fhv_4JG8aR5`j!Q6e`VA>zKMk9zK2y=e1B`9?dbE` zSyT>Bsg=~Dp0opXp}*bYK71{wHTJ=9PoSX{Jhar!oq#%Ox1;yTg)#Amjn++%xCj;L z_3}F$lGERj$W8i{_s$U4thHy4Us|4*4%WQdIB& literal 0 HcmV?d00001 diff --git a/resources/images/tokens/xdai/0-native@2x.png b/resources/images/tokens/xdai/0-native@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cb67e6212516b9034dda388f58925cc3fe932aff GIT binary patch literal 20293 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 g*bHMD>7i9Yoc>w_x_0g0{Ds+tpET3 literal 0 HcmV?d00001 diff --git a/resources/images/tokens/xdai/0-native@3x.png b/resources/images/tokens/xdai/0-native@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ecfedc4424ed40e5daedaca3069ffdc6664db03e GIT binary patch literal 21287 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 literal 0 HcmV?d00001 diff --git a/src/status_im/chat/commands/impl/transactions.cljs b/src/status_im/chat/commands/impl/transactions.cljs index ab525d31f8..b23189bcee 100644 --- a/src/status_im/chat/commands/impl/transactions.cljs +++ b/src/status_im/chat/commands/impl/transactions.cljs @@ -88,7 +88,8 @@ (defn personal-send-request-short-preview [label-key {:keys [content]}] (let [{:keys [amount asset network]} (:params content) - token (tokens/asset-for (keyword network) (keyword asset))] + token (when (and network asset) + (tokens/asset-for (keyword network) (keyword asset)))] [chat-preview/text {} (i18n/label label-key {:amount (i18n/label-number amount) :asset (wallet.utils/display-symbol token)})])) @@ -227,7 +228,10 @@ :font :default} (wallet.utils/display-symbol token)]]]] (when (and fiat-amount - platform/mobile?) + platform/mobile? + ;;NOTE(goranjovic) - have to hide cross network asset fiat value until we can support + ;; multiple chain prices simultaneously + (not network-mismatch?)) [react/view transactions-styles/command-send-fiat-amount [react/text {:style (transactions-styles/command-send-fiat-amount-text outgoing)} (str "~ " fiat-amount " " (or currency (i18n/label :usd-currency)))]]) @@ -412,7 +416,10 @@ [react/text {:style (transactions-styles/command-request-currency-text outgoing) :font :default} asset]]] - (when platform/mobile? + (when (and platform/mobile? + ;;NOTE(goranjovic) - have to hide cross network asset fiat value until we can support + ;; multiple chain prices simultaneously + (not network-mismatch?)) [react/view transactions-styles/command-request-fiat-amount-row [react/text {:style (transactions-styles/command-request-fiat-amount-text outgoing)} (str "~ " fiat-amount " " (or currency (i18n/label :usd-currency)))]]) diff --git a/src/status_im/constants.cljs b/src/status_im/constants.cljs index b843bbd33e..b1c588c7e7 100644 --- a/src/status_im/constants.cljs +++ b/src/status_im/constants.cljs @@ -48,6 +48,20 @@ :UpstreamConfig {:Enabled true :URL "https://mainnet.infura.io/z6GCTmjdP3FETEJmMBI4"}}}}) +(def sidechain-networks + {"xdai_rpc" {:id "xdai_rpc", + :name "xDai Chain", + :config {:NetworkId (ethereum/chain-keyword->chain-id :xdai) + :DataDir "/ethereum/xdai_rpc" + :UpstreamConfig {:Enabled true + :URL "https://dai.poa.network"}}} + "poa_rpc" {:id "poa_rpc", + :name "POA Network", + :config {:NetworkId (ethereum/chain-keyword->chain-id :poa) + :DataDir "/ethereum/poa_rpc" + :UpstreamConfig {:Enabled true + :URL "https://poa.infura.io"}}}}) + (def testnet-networks {"testnet" {:id "testnet", :name "Ropsten", @@ -84,12 +98,14 @@ (def default-networks (into {} (filter network-enabled? - (merge testnet-networks mainnet-networks)))) + (merge testnet-networks mainnet-networks sidechain-networks)))) (defn default-account-settings [] {:wallet {:visible-tokens {:testnet #{:STT :HND} :mainnet #{:SNT} - :rinkeby #{:MOKSHA :KDO}}}}) + :rinkeby #{:MOKSHA :KDO} + :xdai #{} + :poa #{}}}}) (def currencies {:aed {:id :aed :code "AED" :display-name (i18n/label :t/currency-display-name-aed) :symbol "د.إ"} diff --git a/src/status_im/models/wallet.cljs b/src/status_im/models/wallet.cljs index 07f76a830e..09f89e0259 100644 --- a/src/status_im/models/wallet.cljs +++ b/src/status_im/models/wallet.cljs @@ -8,7 +8,8 @@ [status-im.utils.ethereum.tokens :as tokens] [status-im.utils.hex :as utils.hex] [status-im.utils.money :as money] - [status-im.utils.fx :as fx])) + [status-im.utils.fx :as fx] + [status-im.ui.screens.wallet.utils :as wallet.utils])) (def min-gas-price-wei (money/bignumber 1)) @@ -233,8 +234,12 @@ :chain chain :success-event :update-token-balance-success :error-event :update-token-balance-fail} - :get-prices {:from (if mainnet? (conj tokens "ETH") ["ETH"]) + :get-prices {:from (if mainnet? + (conj tokens "ETH") + [(-> (tokens/native-currency chain) + (wallet.utils/exchange-symbol))]) :to [(:code currency)] + :mainnet? mainnet? :success-event :update-prices-success :error-event :update-prices-fail} :db (-> db diff --git a/src/status_im/protocol/core.cljs b/src/status_im/protocol/core.cljs index e80b0a6395..0165d45752 100644 --- a/src/status_im/protocol/core.cljs +++ b/src/status_im/protocol/core.cljs @@ -6,7 +6,8 @@ [status-im.utils.ethereum.core :as ethereum] [status-im.utils.fx :as fx] [status-im.utils.semaphores :as semaphores] - [status-im.utils.utils :as utils])) + [status-im.utils.utils :as utils] + [status-im.i18n :as i18n])) (fx/defn update-sync-state [{{:keys [sync-state sync-data] :as db} :db} error sync] @@ -73,6 +74,8 @@ (when (and (not error) ; error most probably means we are offline (not= network-id fetched-network-id)) (utils/show-popup - "Ethereum node started incorrectly" - "Ethereum node was started with incorrect configuration, application will be stopped to recover from that condition." + (i18n/label :t/ethereum-node-started-incorrectly-title) + (i18n/label :t/ethereum-node-started-incorrectly-description + {:network-id network-id + :fetched-network-id fetched-network-id}) #(re-frame/dispatch [:protocol.ui/close-app-confirmed])))))))) diff --git a/src/status_im/ui/components/common/common.cljs b/src/status_im/ui/components/common/common.cljs index 589b4b254b..f7319d1204 100644 --- a/src/status_im/ui/components/common/common.cljs +++ b/src/status_im/ui/components/common/common.cljs @@ -53,9 +53,14 @@ [react/view styles/network-icon [vector-icons/icon :icons/network {:color :white}]] [react/text {:style (styles/network-text text-color)} - (if (ethereum/testnet? network-id) - (i18n/label :t/testnet-text {:testnet (get-in ethereum/chains [(ethereum/chain-id->chain-keyword network-id) :name] "Unknown")}) - (i18n/label :t/mainnet-text))]]])) + (cond (ethereum/testnet? network-id) + (i18n/label :t/testnet-text {:testnet (get-in ethereum/chains [(ethereum/chain-id->chain-keyword network-id) :name] "Unknown")}) + + (ethereum/sidechain? network-id) + (i18n/label :t/sidechain-text {:sidechain (get-in ethereum/chains [(ethereum/chain-id->chain-keyword network-id) :name] "Unknown")}) + + :else + (i18n/label :t/mainnet-text))]]])) (defn logo ([] (logo nil)) diff --git a/src/status_im/ui/screens/wallet/events.cljs b/src/status_im/ui/screens/wallet/events.cljs index 49f8e48ba4..a2f0c5eafe 100644 --- a/src/status_im/ui/screens/wallet/events.cljs +++ b/src/status_im/ui/screens/wallet/events.cljs @@ -79,9 +79,10 @@ ;; TODO(oskarth): At some point we want to get list of relevant assets to get prices for (re-frame/reg-fx :get-prices - (fn [{:keys [from to success-event error-event]}] + (fn [{:keys [from to mainnet? success-event error-event]}] (prices/get-prices from to + mainnet? #(re-frame/dispatch [success-event %]) #(re-frame/dispatch [error-event %])))) diff --git a/src/status_im/ui/screens/wallet/utils.cljs b/src/status_im/ui/screens/wallet/utils.cljs index 3a91246605..ad3d51dc41 100644 --- a/src/status_im/ui/screens/wallet/utils.cljs +++ b/src/status_im/ui/screens/wallet/utils.cljs @@ -7,5 +7,13 @@ (money/token->unit decimals) money/to-fixed)) -(defn display-symbol [{:keys [symbol-display symbol]}] - (clojure.core/name (or symbol-display symbol))) \ No newline at end of file +;;NOTE(goranjovic) - we are internally using symbol ETH for native currencies of any ethereum network +;; some sidechains have different names for this native currency, which we handle with `symbol-display` override. +(defn display-symbol [{:keys [symbol-display symbol] :as token}] + (when token + (clojure.core/name (or symbol-display symbol)))) + +;;NOTE(goranjovic) - in addition to custom symbol display, some sidechain native currencies are listed under a different +;; ticker on exchange networks. We handle that with `symbol-exchange` override. +(defn exchange-symbol [{:keys [symbol-exchange symbol-display symbol]}] + (clojure.core/name (or symbol-exchange symbol-display symbol))) \ No newline at end of file diff --git a/src/status_im/utils/ethereum/core.cljs b/src/status_im/utils/ethereum/core.cljs index b51b319571..c4b8a94821 100644 --- a/src/status_im/utils/ethereum/core.cljs +++ b/src/status_im/utils/ethereum/core.cljs @@ -10,7 +10,9 @@ (def chains {:mainnet {:id 1 :name "Mainnet"} :testnet {:id 3 :name "Ropsten"} - :rinkeby {:id 4 :name "Rinkeby"}}) + :rinkeby {:id 4 :name "Rinkeby"} + :xdai {:id 100 :name "xDai"} + :poa {:id 99 :name "POA"}}) (defn chain-id->chain-keyword [i] (or (some #(when (= i (:id (val %))) (key %)) chains) @@ -20,7 +22,12 @@ (get-in chains [k :id])) (defn testnet? [id] - (contains? #{(chain-keyword->chain-id :testnet) (chain-keyword->chain-id :rinkeby)} id)) + (contains? #{(chain-keyword->chain-id :testnet) + (chain-keyword->chain-id :rinkeby)} id)) + +(defn sidechain? [id] + (contains? #{(chain-keyword->chain-id :xdai) + (chain-keyword->chain-id :poa)} id)) (defn network-with-upstream-rpc? [network] (get-in network [:config :UpstreamConfig :Enabled])) diff --git a/src/status_im/utils/ethereum/eip681.cljs b/src/status_im/utils/ethereum/eip681.cljs index 7c39fb12de..5a5267af11 100644 --- a/src/status_im/utils/ethereum/eip681.cljs +++ b/src/status_im/utils/ethereum/eip681.cljs @@ -18,8 +18,9 @@ (def parameter-separator "&") (def key-value-separator "=") +;;TODO(goranjovic) - rewrite all of these with something more readable than regex (def uri-pattern (re-pattern (str scheme scheme-separator "([^" query-separator "]*)(?:\\" query-separator "(.*))?"))) -(def authority-path-pattern (re-pattern (str "^([^" chain-id-separator function-name-separator "]*)(?:" chain-id-separator "(\\d))?(?:" function-name-separator "(\\w*))?"))) +(def authority-path-pattern (re-pattern (str "^([^" chain-id-separator function-name-separator "]*)(?:" chain-id-separator "(\\d+))?(?:" function-name-separator "(\\w*))?"))) (def key-value-format (str "([^" parameter-separator key-value-separator "]+)")) (def query-pattern (re-pattern (str key-value-format key-value-separator key-value-format))) diff --git a/src/status_im/utils/ethereum/tokens.cljs b/src/status_im/utils/ethereum/tokens.cljs index dd04e8ead0..ee8ce01242 100644 --- a/src/status_im/utils/ethereum/tokens.cljs +++ b/src/status_im/utils/ethereum/tokens.cljs @@ -25,7 +25,16 @@ :rinkeby {:name "Rinkeby Ether" :symbol :ETH :symbol-display :ETHri - :decimals 18}})) + :decimals 18} + :poa {:name "POA" + :symbol :ETH + :symbol-display :POA + :decimals 18} + :xdai {:name "xDAI" + :symbol :ETH + :symbol-display :xDAI + :symbol-exchange :DAI + :decimals 18}})) (def native-currency-symbols (set (map #(-> % val :symbol) all-native-currencies))) diff --git a/src/status_im/utils/prices.cljs b/src/status_im/utils/prices.cljs index d3e50e8c02..9532bac9bd 100644 --- a/src/status_im/utils/prices.cljs +++ b/src/status_im/utils/prices.cljs @@ -19,16 +19,25 @@ (defn- gen-price-url [fsyms tsyms] (str api-url "/pricemultifull?fsyms=" (->url-param-syms fsyms) "&tsyms=" (->url-param-syms tsyms) "&" status-identifier)) -(defn- format-price-resp [resp] - (into {} (for [[from entries] (:RAW (types/json->clj resp))] - {from (into {} (for [[to entry] entries] - {to {:from (name from) - :to (name to) - :price (:PRICE entry) - :last-day (:OPEN24HOUR entry)}}))}))) +(defn- format-price-resp [resp mainnet?] + ;;NOTE(this check is to allow value conversion for sidechains with native currencies listed on cryptocompare + ;; under a symbol different than display symbol. Specific use case xDAI and POA. + (if mainnet? + (into {} (for [[from entries] (:RAW (types/json->clj resp))] + {from (into {} (for [[to entry] entries] + {to {:from (name from) + :to (name to) + :price (:PRICE entry) + :last-day (:OPEN24HOUR entry)}}))})) + (into {} (for [[_ entries] (:RAW (types/json->clj resp))] + {:ETH (into {} (for [[to entry] entries] + {to {:from "ETH" + :to (name to) + :price (:PRICE entry) + :last-day (:OPEN24HOUR entry)}}))})))) -(defn get-prices [from to on-success on-error] +(defn get-prices [from to mainnet? on-success on-error] (http/get (gen-price-url from to) - (fn [resp] (on-success (format-price-resp resp))) + (fn [resp] (on-success (format-price-resp resp mainnet?))) on-error)) diff --git a/src/status_im/utils/transactions.cljs b/src/status_im/utils/transactions.cljs index ba2946a1eb..8ccd17ab6b 100644 --- a/src/status_im/utils/transactions.cljs +++ b/src/status_im/utils/transactions.cljs @@ -3,6 +3,9 @@ [status-im.utils.types :as types] [taoensso.timbre :as log])) +(def etherscan-supported? + #{:testnet :mainnet :rinkeby}) + (defn- get-network-subdomain [chain] (case chain (:testnet) "ropsten" @@ -10,8 +13,9 @@ (:rinkeby) "rinkeby")) (defn get-transaction-details-url [chain hash] - (let [network-subdomain (get-network-subdomain chain)] - (str "https://" (when network-subdomain (str network-subdomain ".")) "etherscan.io/tx/" hash))) + (when (etherscan-supported? chain) + (let [network-subdomain (get-network-subdomain chain)] + (str "https://" (when network-subdomain (str network-subdomain ".")) "etherscan.io/tx/" hash)))) (def etherscan-api-key "DMSI4UAAKUBVGCDMVP3H2STAMSAUV7BYFI") @@ -56,8 +60,10 @@ {}))) (defn get-transactions [chain account on-success on-error] - (let [url (get-transaction-url chain account)] - (log/debug "HTTP GET" url) - (http/get url - #(on-success (format-transactions-response % account)) - on-error))) + (if (etherscan-supported? chain) + (let [url (get-transaction-url chain account)] + (log/debug "HTTP GET" url) + (http/get url + #(on-success (format-transactions-response % account)) + on-error)) + (log/info "Etherscan not supported for " chain))) diff --git a/test/cljs/status_im/test/utils/prices.cljs b/test/cljs/status_im/test/utils/prices.cljs index b821c3cae4..5ec9847296 100644 --- a/test/cljs/status_im/test/utils/prices.cljs +++ b/test/cljs/status_im/test/utils/prices.cljs @@ -2,8 +2,13 @@ (:require [cljs.test :refer-macros [deftest is]] [status-im.utils.prices :as prices])) -(deftest test-format-price-resp +(deftest test-format-price-resp-mainnet (is (= (prices/format-price-resp - "{\"RAW\":{\"ETH\":{\"USD\":{\"TYPE\":\"5\",\"MARKET\":\"CCCAGG\",\"FROMSYMBOL\":\"ETH\",\"TOSYMBOL\":\"USD\",\"FLAGS\":\"4\",\"PRICE\":677.91,\"LASTUPDATE\":1525241472,\"LASTVOLUME\":0.69661268,\"LASTVOLUMETO\":472.0874471092,\"LASTTRADEID\":\"1525241472.6714\",\"VOLUMEDAY\":109859.96594606241,\"VOLUMEDAYTO\":73924561.52673237,\"VOLUME24HOUR\":408811.69032152055,\"VOLUME24HOURTO\":270617692.0100031,\"OPENDAY\":670.81,\"HIGHDAY\":681.06,\"LOWDAY\":662.13,\"OPEN24HOUR\":658.68,\"HIGH24HOUR\":681.67,\"LOW24HOUR\":638.25,\"LASTMARKET\":\"Kraken\",\"CHANGE24HOUR\":19.230000000000018,\"CHANGEPCT24HOUR\":2.919475314264896,\"CHANGEDAY\":7.100000000000023,\"CHANGEPCTDAY\":1.0584219078427608,\"SUPPLY\":99176837.749,\"MKTCAP\":67232970078.42458,\"TOTALVOLUME24H\":1308785.4697758215,\"TOTALVOLUME24HTO\":880718916.8398683}},\"SNT\":{\"USD\":{\"TYPE\":\"5\",\"MARKET\":\"CCCAGG\",\"FROMSYMBOL\":\"SNT\",\"TOSYMBOL\":\"USD\",\"FLAGS\":\"1\",\"PRICE\":0.1562,\"LASTUPDATE\":1525241236,\"LASTVOLUME\":582.07218,\"LASTVOLUMETO\":90.919674516,\"LASTTRADEID\":\"237582608\",\"VOLUMEDAY\":259125.16382211001,\"VOLUMEDAYTO\":40450.5318867195,\"VOLUME24HOUR\":1451022.9449243098,\"VOLUME24HOURTO\":223465.71221695316,\"OPENDAY\":0.1573,\"HIGHDAY\":0.1592,\"LOWDAY\":0.1532,\"OPEN24HOUR\":0.15,\"HIGH24HOUR\":0.1657,\"LOW24HOUR\":0.1481,\"LASTMARKET\":\"Bitfinex\",\"CHANGE24HOUR\":0.006200000000000011,\"CHANGEPCT24HOUR\":4.133333333333341,\"CHANGEDAY\":-0.0010999999999999899,\"CHANGEPCTDAY\":-0.6993006993006928,\"SUPPLY\":6804870174.87817,\"MKTCAP\":1062920721.3159702,\"TOTALVOLUME24H\":239970152.87898657,\"TOTALVOLUME24HTO\":37480153.807917476}}},\"DISPLAY\":{\"ETH\":{\"USD\":{\"FROMSYMBOL\":\"Ξ\",\"TOSYMBOL\":\"$\",\"MARKET\":\"CryptoCompare Index\",\"PRICE\":\"$ 677.91\",\"LASTUPDATE\":\"Just now\",\"LASTVOLUME\":\"Ξ 0.6966\",\"LASTVOLUMETO\":\"$ 472.09\",\"LASTTRADEID\":\"1525241472.6714\",\"VOLUMEDAY\":\"Ξ 109,860.0\",\"VOLUMEDAYTO\":\"$ 73,924,561.5\",\"VOLUME24HOUR\":\"Ξ 408,811.7\",\"VOLUME24HOURTO\":\"$ 270,617,692.0\",\"OPENDAY\":\"$ 670.81\",\"HIGHDAY\":\"$ 681.06\",\"LOWDAY\":\"$ 662.13\",\"OPEN24HOUR\":\"$ 658.68\",\"HIGH24HOUR\":\"$ 681.67\",\"LOW24HOUR\":\"$ 638.25\",\"LASTMARKET\":\"Kraken\",\"CHANGE24HOUR\":\"$ 19.23\",\"CHANGEPCT24HOUR\":\"2.92\",\"CHANGEDAY\":\"$ 7.10\",\"CHANGEPCTDAY\":\"1.06\",\"SUPPLY\":\"Ξ 99,176,837.7\",\"MKTCAP\":\"$ 67.23 B\",\"TOTALVOLUME24H\":\"Ξ 1,308.79 K\",\"TOTALVOLUME24HTO\":\"$ 880.72 M\"}},\"SNT\":{\"USD\":{\"FROMSYMBOL\":\"SNT\",\"TOSYMBOL\":\"$\",\"MARKET\":\"CryptoCompare Index\",\"PRICE\":\"$ 0.1562\",\"LASTUPDATE\":\"3 min ago\",\"LASTVOLUME\":\"SNT 582.07\",\"LASTVOLUMETO\":\"$ 90.92\",\"LASTTRADEID\":\"237582608\",\"VOLUMEDAY\":\"SNT 259,125.2\",\"VOLUMEDAYTO\":\"$ 40,450.5\",\"VOLUME24HOUR\":\"SNT 1,451,022.9\",\"VOLUME24HOURTO\":\"$ 223,465.7\",\"OPENDAY\":\"$ 0.1573\",\"HIGHDAY\":\"$ 0.1592\",\"LOWDAY\":\"$ 0.1532\",\"OPEN24HOUR\":\"$ 0.1500\",\"HIGH24HOUR\":\"$ 0.1657\",\"LOW24HOUR\":\"$ 0.1481\",\"LASTMARKET\":\"Bitfinex\",\"CHANGE24HOUR\":\"$ 0.0062\",\"CHANGEPCT24HOUR\":\"4.13\",\"CHANGEDAY\":\"$ -0.0011\",\"CHANGEPCTDAY\":\"-0.70\",\"SUPPLY\":\"SNT 6,804,870,174.9\",\"MKTCAP\":\"$ 1,062.92 M\",\"TOTALVOLUME24H\":\"SNT 239.97 M\",\"TOTALVOLUME24HTO\":\"$ 37.48 M\"}}}}") + "{\"RAW\":{\"ETH\":{\"USD\":{\"TYPE\":\"5\",\"MARKET\":\"CCCAGG\",\"FROMSYMBOL\":\"ETH\",\"TOSYMBOL\":\"USD\",\"FLAGS\":\"4\",\"PRICE\":677.91,\"LASTUPDATE\":1525241472,\"LASTVOLUME\":0.69661268,\"LASTVOLUMETO\":472.0874471092,\"LASTTRADEID\":\"1525241472.6714\",\"VOLUMEDAY\":109859.96594606241,\"VOLUMEDAYTO\":73924561.52673237,\"VOLUME24HOUR\":408811.69032152055,\"VOLUME24HOURTO\":270617692.0100031,\"OPENDAY\":670.81,\"HIGHDAY\":681.06,\"LOWDAY\":662.13,\"OPEN24HOUR\":658.68,\"HIGH24HOUR\":681.67,\"LOW24HOUR\":638.25,\"LASTMARKET\":\"Kraken\",\"CHANGE24HOUR\":19.230000000000018,\"CHANGEPCT24HOUR\":2.919475314264896,\"CHANGEDAY\":7.100000000000023,\"CHANGEPCTDAY\":1.0584219078427608,\"SUPPLY\":99176837.749,\"MKTCAP\":67232970078.42458,\"TOTALVOLUME24H\":1308785.4697758215,\"TOTALVOLUME24HTO\":880718916.8398683}},\"SNT\":{\"USD\":{\"TYPE\":\"5\",\"MARKET\":\"CCCAGG\",\"FROMSYMBOL\":\"SNT\",\"TOSYMBOL\":\"USD\",\"FLAGS\":\"1\",\"PRICE\":0.1562,\"LASTUPDATE\":1525241236,\"LASTVOLUME\":582.07218,\"LASTVOLUMETO\":90.919674516,\"LASTTRADEID\":\"237582608\",\"VOLUMEDAY\":259125.16382211001,\"VOLUMEDAYTO\":40450.5318867195,\"VOLUME24HOUR\":1451022.9449243098,\"VOLUME24HOURTO\":223465.71221695316,\"OPENDAY\":0.1573,\"HIGHDAY\":0.1592,\"LOWDAY\":0.1532,\"OPEN24HOUR\":0.15,\"HIGH24HOUR\":0.1657,\"LOW24HOUR\":0.1481,\"LASTMARKET\":\"Bitfinex\",\"CHANGE24HOUR\":0.006200000000000011,\"CHANGEPCT24HOUR\":4.133333333333341,\"CHANGEDAY\":-0.0010999999999999899,\"CHANGEPCTDAY\":-0.6993006993006928,\"SUPPLY\":6804870174.87817,\"MKTCAP\":1062920721.3159702,\"TOTALVOLUME24H\":239970152.87898657,\"TOTALVOLUME24HTO\":37480153.807917476}}},\"DISPLAY\":{\"ETH\":{\"USD\":{\"FROMSYMBOL\":\"Ξ\",\"TOSYMBOL\":\"$\",\"MARKET\":\"CryptoCompare Index\",\"PRICE\":\"$ 677.91\",\"LASTUPDATE\":\"Just now\",\"LASTVOLUME\":\"Ξ 0.6966\",\"LASTVOLUMETO\":\"$ 472.09\",\"LASTTRADEID\":\"1525241472.6714\",\"VOLUMEDAY\":\"Ξ 109,860.0\",\"VOLUMEDAYTO\":\"$ 73,924,561.5\",\"VOLUME24HOUR\":\"Ξ 408,811.7\",\"VOLUME24HOURTO\":\"$ 270,617,692.0\",\"OPENDAY\":\"$ 670.81\",\"HIGHDAY\":\"$ 681.06\",\"LOWDAY\":\"$ 662.13\",\"OPEN24HOUR\":\"$ 658.68\",\"HIGH24HOUR\":\"$ 681.67\",\"LOW24HOUR\":\"$ 638.25\",\"LASTMARKET\":\"Kraken\",\"CHANGE24HOUR\":\"$ 19.23\",\"CHANGEPCT24HOUR\":\"2.92\",\"CHANGEDAY\":\"$ 7.10\",\"CHANGEPCTDAY\":\"1.06\",\"SUPPLY\":\"Ξ 99,176,837.7\",\"MKTCAP\":\"$ 67.23 B\",\"TOTALVOLUME24H\":\"Ξ 1,308.79 K\",\"TOTALVOLUME24HTO\":\"$ 880.72 M\"}},\"SNT\":{\"USD\":{\"FROMSYMBOL\":\"SNT\",\"TOSYMBOL\":\"$\",\"MARKET\":\"CryptoCompare Index\",\"PRICE\":\"$ 0.1562\",\"LASTUPDATE\":\"3 min ago\",\"LASTVOLUME\":\"SNT 582.07\",\"LASTVOLUMETO\":\"$ 90.92\",\"LASTTRADEID\":\"237582608\",\"VOLUMEDAY\":\"SNT 259,125.2\",\"VOLUMEDAYTO\":\"$ 40,450.5\",\"VOLUME24HOUR\":\"SNT 1,451,022.9\",\"VOLUME24HOURTO\":\"$ 223,465.7\",\"OPENDAY\":\"$ 0.1573\",\"HIGHDAY\":\"$ 0.1592\",\"LOWDAY\":\"$ 0.1532\",\"OPEN24HOUR\":\"$ 0.1500\",\"HIGH24HOUR\":\"$ 0.1657\",\"LOW24HOUR\":\"$ 0.1481\",\"LASTMARKET\":\"Bitfinex\",\"CHANGE24HOUR\":\"$ 0.0062\",\"CHANGEPCT24HOUR\":\"4.13\",\"CHANGEDAY\":\"$ -0.0011\",\"CHANGEPCTDAY\":\"-0.70\",\"SUPPLY\":\"SNT 6,804,870,174.9\",\"MKTCAP\":\"$ 1,062.92 M\",\"TOTALVOLUME24H\":\"SNT 239.97 M\",\"TOTALVOLUME24HTO\":\"$ 37.48 M\"}}}}" true) {:ETH {:USD {:from "ETH", :to "USD", :price 677.91, :last-day 658.68}} :SNT {:USD {:from "SNT", :to "USD", :price 0.1562, :last-day 0.15}}}))) + +(deftest test-format-price-resp-non-mainnet + (is (= (prices/format-price-resp + "{\"RAW\":{\"SNT\":{\"USD\":{\"TYPE\":\"5\",\"MARKET\":\"CCCAGG\",\"FROMSYMBOL\":\"SNT\",\"TOSYMBOL\":\"USD\",\"FLAGS\":\"4\",\"PRICE\":0.03511847069999999,\"LASTUPDATE\":1539953131,\"LASTVOLUME\":0,\"LASTVOLUMETO\":0,\"LASTTRADEID\":0,\"VOLUMEDAY\":0,\"VOLUMEDAYTO\":0,\"VOLUME24HOUR\":45900.43172688,\"VOLUME24HOURTO\":1645.4590651064077,\"OPENDAY\":0.0357005448,\"HIGHDAY\":0.0358298946,\"LOWDAY\":0.034924446,\"OPEN24HOUR\":0.0360239193,\"HIGH24HOUR\":0.03621794399999999,\"LOW24HOUR\":0.0348597711,\"LASTMARKET\":\"IDAX\",\"CHANGE24HOUR\":-0.0009054486000000112,\"CHANGEPCT24HOUR\":-2.5134649910233704,\"CHANGEDAY\":-0.0005820741000000101,\"CHANGEPCTDAY\":-1.630434782608724,\"SUPPLY\":6804870174.87817,\"MKTCAP\":238976633.8537628,\"TOTALVOLUME24H\":53502856.59548309,\"TOTALVOLUME24HTO\":1878972.0078131626}}},\"DISPLAY\":{\"SNT\":{\"USD\":{\"FROMSYMBOL\":\"SNT\",\"TOSYMBOL\":\"$\",\"MARKET\":\"CryptoCompare Index\",\"PRICE\":\"$ 0.03512\",\"LASTUPDATE\":\"Just now\",\"LASTVOLUME\":\"SNT 0\",\"LASTVOLUMETO\":\"$ 0\",\"LASTTRADEID\":0,\"VOLUMEDAY\":\"SNT 0\",\"VOLUMEDAYTO\":\"$ 0\",\"VOLUME24HOUR\":\"SNT 45,900.4\",\"VOLUME24HOURTO\":\"$ 1,645.46\",\"OPENDAY\":\"$ 0.03570\",\"HIGHDAY\":\"$ 0.03583\",\"LOWDAY\":\"$ 0.03492\",\"OPEN24HOUR\":\"$ 0.03602\",\"HIGH24HOUR\":\"$ 0.03622\",\"LOW24HOUR\":\"$ 0.03486\",\"LASTMARKET\":\"IDAX\",\"CHANGE24HOUR\":\"$ -0.00091\",\"CHANGEPCT24HOUR\":\"-2.51\",\"CHANGEDAY\":\"$ -0.00058\",\"CHANGEPCTDAY\":\"-1.63\",\"SUPPLY\":\"SNT 6,804,870,174.9\",\"MKTCAP\":\"$ 238.98 M\",\"TOTALVOLUME24H\":\"SNT 53.50 M\",\"TOTALVOLUME24HTO\":\"$ 1,878.97 K\"}}}}" false) + {:ETH {:USD {:from "ETH", :to "USD", :price 0.03511847069999999, :last-day 0.0360239193}}}))) diff --git a/translations/en.json b/translations/en.json index ce0c174f71..3efca9d44d 100644 --- a/translations/en.json +++ b/translations/en.json @@ -558,6 +558,9 @@ "main-wallet": "Main Wallet", "process-json": "Process JSON", "testnet-text": "You’re on the {{testnet}} Testnet. Do not send real ETH or SNT to your address", + "sidechain-text": "You’re on the {{sidechain}} Sidechain.", + "ethereum-node-started-incorrectly-title" :"Ethereum node started incorrectly", + "ethereum-node-started-incorrectly-description" : "Ethereum node was started with incorrect configuration, application will be stopped to recover from that condition. Configured network id = {{network-id}}, actual = {{fetched-network-id}}", "browser-not-secure": "Connection is not secure! Do not sign transactions or send personal data on this site.", "welcome-to-status-description": "Tap the plus (+) button to get started", "recovery-phrase-invalid": "Recovery phrase is invalid",