Merge pull request #467 from status-im/feature/#446

Network property in account
This commit is contained in:
adrian-tiberius 2016-11-22 18:25:36 +02:00 committed by GitHub
commit 38b8fed945
8 changed files with 87 additions and 16 deletions

View File

@ -21,14 +21,15 @@
[status-im.navigation.handlers :as nav]))
(defn save-account [_ [_ account]]
(accounts-store/save account true))
(defn save-account [{:keys [network]} [_ account]]
(accounts-store/save (assoc account :network network) true))
(register-handler
:add-account
((after save-account)
(fn [db [_ {:keys [address] :as account}]]
(update db :accounts assoc address account))))
(fn [{:keys [network] :as db} [_ {:keys [address] :as account}]]
(let [account' (assoc account :network network)]
(update db :accounts assoc address account')))))
(defn account-created [result password]
(let [data (json->clj result)

View File

@ -34,5 +34,5 @@
(defn migration [_ new-realm]
(let [new-objs (.objects new-realm "chat")]
(dotimes [i (range (.-length new-objs))]
(dotimes [i (.-length new-objs)]
(aset (aget new-objs i) "pending-contact?" false))))

View File

@ -1,7 +1,11 @@
(ns status-im.data-store.realm.schemas.base.core
(:require [status-im.data-store.realm.schemas.base.v1.core :as v1]))
(:require [status-im.data-store.realm.schemas.base.v1.core :as v1]
[status-im.data-store.realm.schemas.base.v2.core :as v2]))
; put schemas ordered by version
(def schemas [{:schema v1/schema
:schemaVersion 1
:migration v1/migration}])
:migration v1/migration}
{:schema v2/schema
:schemaVersion 2
:migration v2/migration}])

View File

@ -0,0 +1,26 @@
(ns status-im.data-store.realm.schemas.base.v2.account
(:require [taoensso.timbre :as log]))
(def schema {:name :account
:primaryKey :address
:properties {:address :string
:public-key :string
:updates-public-key {:type :string
:optional true}
:updates-private-key {:type :string
:optional true}
:name {:type :string :optional true}
:phone {:type :string :optional true}
:email {:type :string :optional true}
:status {:type :string :optional true}
:photo-path :string
:last-updated {:type :int :default 0}
:signed-up? {:type :bool
:default false}
:network {:type :string}}})
(defn migration [old-realm new-realm]
(log/debug "migrating account schema v2")
(let [new-objs (.objects new-realm "account")]
(dotimes [i (.-length new-objs)]
(aset (aget new-objs i) "network" "testnet"))))

View File

@ -0,0 +1,11 @@
(ns status-im.data-store.realm.schemas.base.v2.core
(:require [status-im.data-store.realm.schemas.base.v2.account :as account]
[status-im.data-store.realm.schemas.base.v1.kv-store :as kv-store]
[taoensso.timbre :as log]))
(def schema [account/schema
kv-store/schema])
(defn migration [old-realm new-realm]
(log/debug "migrating v2 base database: " old-realm new-realm)
(account/migration old-realm new-realm))

View File

@ -23,7 +23,8 @@
status-im.transactions.handlers
status-im.network.handlers
[status-im.utils.types :as t]
[status-im.constants :refer [console-chat-id]]))
[status-im.constants :refer [console-chat-id]]
[status-im.utils.ethereum-network :as enet]))
;; -- Common --------------------------------------------------------------
@ -42,12 +43,15 @@
(assoc-in db [:animations k] v)))
(register-handler :initialize-db
(fn [{:keys [status-module-initialized?]} _]
(fn [{:keys [status-module-initialized? network]} _]
(data-store/init)
(let [db' (assoc app-db :current-account-id nil)]
(if status-module-initialized?
(assoc db' :status-module-initialized? true)
db'))))
(cond-> (assoc app-db :current-account-id nil)
status-module-initialized?
(assoc :status-module-initialized? true)
true
(assoc :network network))))
(register-handler :initialize-account-db
(fn [db _]
@ -97,7 +101,8 @@
(dispatch [:crypt-initialized]))))))))
(defn node-started [db result]
(log/debug "Started Node: "))
(log/debug "Started Node")
(enet/get-network #(dispatch [:set :network %])))
(register-handler :initialize-geth
(u/side-effect!

View File

@ -11,7 +11,8 @@
blocks-per-hour]]
[status-im.i18n :refer [label]]
[status-im.utils.random :as random]
[taoensso.timbre :as log :refer-macros [debug]]))
[taoensso.timbre :as log :refer-macros [debug]]
[status-im.constants :as c]))
(register-handler :initialize-protocol
(fn [db [_ current-account-id]]
@ -20,7 +21,7 @@
(get-in db [:accounts current-account-id])]
(let [groups (chats/get-active-group-chats)
w3 (protocol/init-whisper!
{:rpc-url "http://localhost:8545"
{:rpc-url c/ethereum-rpc-url
:identity public-key
:groups groups
:callback #(dispatch [:incoming-message %1 %2])

View File

@ -0,0 +1,23 @@
(ns status-im.utils.ethereum-network
(:require [status-im.constants :as c]))
(def Web3 (js/require "web3"))
(defn web3 []
(->> (Web3.providers.HttpProvider. c/ethereum-rpc-url)
(Web3.)))
(def networks
{"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3" :mainnet
"0x0cd786a2425d16f152c658316c423e6ce1181e15c3295826d7c9904cba9ce303" :testnet
;; Ropsten
"0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d" :testnet})
(defn- on-block [callback]
(fn [error block]
(when-not error
(let [hash (.-hash block)]
(callback (networks hash :unknown))))))
(defn get-network [callback]
(.eth.getBlock (web3) 0 false (on-block callback)))