266 Commits

Author SHA1 Message Date
yenda
b13864d052
[refactor] move utils.ethereum to ethereum
move utils.ethereum.tokens to ethereum.tokens
move utils.ethereum.abi-spec to ethereum.abi-spec
move utils.ethereum.core to ethereum.core
move utils.ethereum.eip165 to ethereum.eip165
move utils.ethereum.eip55 to ethereum.eip55
move utils.ethereum.eip681 to ethereum.eip681
move utils.ethereum.ens to ethereum.ens
move utils.ethereum.erc721 to ethereum.erc721
move utils.ethereum.mnemonics to ethereum.mnemonics
move utils.ethereum.resolver to ethereum.resolver
move utils.ethereum.macros to ethereum.macros

Signed-off-by: yenda <eric@status.im>
2019-05-23 15:11:48 +02:00
Dmitry Novotochinov
99e00898f9
[#7911 #7894] delete account and logout after keycard reset
Signed-off-by: Dmitry Novotochinov <dmitry.novot@gmail.com>
2019-05-08 14:35:10 +03:00
Roman Volosovskyi
8dc7c8986e
[#8064] Fix deletion of a custom mailserver 2019-05-01 20:41:11 +03:00
Vitaliy Vlasov
e725fffe22
Move block contact related code
- this will avoid circular dependencies in future Tribute to Talk commits

Signed-off-by: yenda <eric@status.im>
2019-04-30 16:57:34 +02:00
Roman Volosovskyi
c98f547349
Multiple messages gaps per chat 2019-04-24 22:33:08 +03:00
Andrey Shovkoplyas
6f16ccf416
[#6457] Implement extension data persistence
Signed-off-by: Andrey Shovkoplyas <motor4ik@gmail.com>
2019-04-18 15:53:22 +02:00
Roman Volosovskyi
a4d8f57b09
Fetch missed range of messages 2019-04-12 16:22:44 +03:00
Emilio Silva Schlenker
64b63d5593
[#7598] Beta alert on upgrading
Signed-off-by: Igor Mandrigin <i@mandrigin.ru>
2019-04-11 20:50:10 +02:00
yenda
26b97ddf43
introduce system-tags
Signed-off-by: yenda <eric@status.im>
2019-03-25 16:55:09 +01:00
yenda
5e7186ed52
[fix 5695] remove close icon in add to contacts bar
Signed-off-by: Igor Mandrigin <i@mandrigin.ru>
2019-03-21 13:44:00 +01:00
Roman Volosovskyi
298f000fcb
Disable Etherscan and Cryptocompare requests in chaos mode 2019-03-19 19:35:24 +02:00
Andrea Maria Piana
c9994b5d0f
Dont override last-clock-value on messages
The denormalized-clock-value was erroneously set to the one of the last
message received. This meant that on chats were the clock-value raced
ahead of the timestamp (#status), a message from the mailserver or a
message from someone with an old clock-value would basically make those
messages be sorted in the past.

The correct behavior is that last-clock-value for a given chat should be
the maximum last clock value ever seen for that chat.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2019-02-21 13:41:06 +01:00
Andrea Maria Piana
9040f0345a
Fix block contact db error
bddae03ab2
broke adding a user to contacts, this fixes by serializing the contact
before saving it.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2019-02-19 18:56:12 +01:00
Andrea Maria Piana
bddae03ab2
Allow multiple push notifications
We keep tokens synchronized across devices, so that the user can notify
us on any paired device.
Currently we record the installation id associated to the fcm-token even
though is not necessary, but it will be once we send device-to-device
messages, in which case we want to notify only those devices.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2019-02-14 16:33:50 +01:00
Roman Volosovskyi
48291247b2
Loading history on mobile network 2019-02-13 18:59:21 +02:00
Andrea Maria Piana
7960fdef85
Publish contact updates periodically
Currently it's very easy for contact details to get out of sync, the
simplest example is:
A & B are contacts.
A changes name.
B receives the updated name.
B re-install the app.
Until A changes name again, B will not see their name, picture and won't
be able to send push notifications.

This PR changes the behavior to publish account informations to contacts
every 24 hrs, to add some redundancy in this cases.

It also publishes a contact code every 12hrs.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2019-02-12 14:20:45 +01:00
Andrey Shovkoplyas
4c4fb6bbe9
[#5584] Implement Manage permissions screen and option for web3 provider Opt-in access
Signed-off-by: Andrey Shovkoplyas <motor4ik@gmail.com>
2019-02-06 10:38:20 +01:00
yenda
b80e02d8cf
[feature] add block user feature in user profile
- add block/unblock action to user profile
- blocking deletes all messages from user and ignores future messages
- unblocking stops ignoring new messages from user but doesn't recover past ones

[feature] add contact list

[tests] added scroll to BackupRecoveryPhraseButton

[tests] added scroll to public key

Signed-off-by: yenda <eric@status.im>
2019-02-05 16:29:56 +01:00
yenda
444c6af319
[refactor] contact model: remove unused fields and add blocked?
- dapp related fields are removed since it is not used anymore
- blocked? field is added for futur block user feature
2019-02-05 16:28:50 +01:00
Igor Mandrigin
27d6816cca
Update and migrate POA network URLs.
Signed-off-by: Igor Mandrigin <i@mandrigin.ru>
2019-02-05 13:47:09 +01:00
Roman Volosovskyi
fe7c7088db
Use partitioned topic for discovery
Currently we use a single topic for discovery.
This provides the best obscurity at the cost of bandwidth, as a message
sent on the discovery topic will be received by any peer.
This PR changes this behavior and start listening on a partitioned
topic.
Each pk will be hashed to a limited number of topics.

Everytime someone is in a conversation with someone from another topic
they will have to listen as well to avoid loosing obscurity, because we
only forward messages that we also advertise in the bloom filter.

The choice for the number of partitions depends on 2 factors:

1) The expected number of users using the network
2) The average number of contacts each user

Any change to the discovery topic will need to be split across 3
releases, to avoid breaking compatibility:

1) Listen to the new and old topic, publish to the old topic
2) Listen to the new and old topic, publish to the new topic
3) Listen to the new topic, publish to the new topic

This is step 1.
2019-02-01 14:40:54 +02:00
Andrea Maria Piana
13b04f17eb
Enable pairing & contact recovery
This PR enables pairing outside of dev-mode and contact-recovery, which
is useful in the case a new device is added or re-installed.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2019-01-29 18:25:25 +01:00
Andrea Maria Piana
52ae2c2bfe
Style header group-chats
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2019-01-29 10:31:59 +01:00
Andrey Shovkoplyas
2430992fb4
Implement stickers market
Signed-off-by: Andrey Shovkoplyas <motor4ik@gmail.com>
2019-01-28 17:18:44 +01:00
Andrea Maria Piana
2b2c44c9a5
Add device name to pairing
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2019-01-24 11:29:24 +01:00
Dmitry Novotochinov
cee18d23b8
[#7132] add keycard settings
Signed-off-by: Dmitry Novotochinov <dmitry.novot@gmail.com>
2019-01-23 20:11:23 +03:00
Igor Mandrigin
7322626464
Migrate old Infura RPC URLs to the new ones for existing accounts.
Signed-off-by: Igor Mandrigin <i@mandrigin.ru>
2019-01-23 17:58:01 +01:00
Roman Volosovskyi
8754f72eba
Fix merging of :message/message-persisted event
Previously `:message/message-persisted` was dispatched for each incoming
message because its argument was not a vector. The event was renamed to
`:message/messages-persisted`.
2019-01-18 18:14:40 +02:00
Igor Mandrigin
e8de37f5ef
Report messages as "processed" to status-go only after they were successfully stored in the DB.
Signed-off-by: Igor Mandrigin <i@mandrigin.ru>
2019-01-14 19:12:26 +01:00
Roman Volosovskyi
aceea457ce
[slow sign in] Chats preloading
10 last chats are loaded to `app-db` before showing `:home` screen, in
result a user will not see two consequent activity indicators. In this
case opening of `:home` screen is a bit slower but looks better from
UI/UX pov. As it is limited to 10 chats on initialization, the time
necessary for opening `:home` screen will not depend on a total number
of chats in `app-db` if an account contains 10+ chats.

Signed-off-by: Igor Mandrigin <i@mandrigin.ru>
2019-01-09 16:03:21 +01:00
Andrea Maria Piana
b56fd2e29f
Show popup when device is not targeted.
When someone is sending a pfs message to us but did not include our own
device, a pop up is shown propmting the user to connect with the user.

The reason for receiving messages that are not targeting our devices are
various:

1) The account was just recovered (which means it is a new installation
id)
2) More than 3 devices are in use (we only keep max 3 devices in sync)
3) The sender has used an old bundle which does not include the current
device

Eventually we will reduce the likelihood of this scenario happening, but
we can't dismiss it completely.

It's only enabled when PFS is enabled.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2019-01-09 09:36:36 +01:00
Andrea Maria Piana
e8069f523d
Move group chats to their own topic
This commit moves group chats to their own topic, based on the randomly
generated chat-id. It falls back on the discovery topic for those peers
who we can't fingerprint the version, for backward compatibility.
2019-01-08 13:58:41 +01:00
Roman Volosovskyi
15747558fa
[#7179] Fix command message preview in the list of chats
The bug was introduced in #7055.

`message-type` was stored and used instead of `content-type` which
caused incorrect displaying of the last message preview if the one was a
command.
2018-12-27 16:35:45 +02:00
Roman Volosovskyi
8e7526e68d
[#7155] Clear last message preview on deleting chat history 2018-12-25 11:07:46 +02:00
Andrea Maria Piana
dfdbe1ccbc
Paginate using clock-value & message-id instead of skip/limit
Paginating using the count of loaded messages might result in some
messages being skipped and not being loaded in the database, in case of
out-of-order messages received.

This commit changes the behavior to sort by `clock-value` and
`message-id`, which gives a consistent sorting.

The initial idea was to use a cursor `clock-value-message-id` and
iterate on that, but realm does not support filtering on string (</>),
so instead we keep track of messages with identical clock-value and
exclude those in the next page query.

The change might result in pages that have duplicates (so messages needs
to be deduped), but won't result in skipped messages.
2018-12-24 18:12:50 +01:00
Roman Volosovskyi
8f48dc8df6
Safe deserialization of the last message's content
The issue was fixed in #7085 but reintroduced in #7055.
2018-12-24 18:09:59 +02:00
Roman Volosovskyi
9a9cd0d8d0
[slow sign in] Denormalize last-clock-value
In order to get `:last-clock-value` one extra query was executed for
each chat during initialization.

Implementation:
- `:last-clock-value` field was added to `chat` entity
- this field is updated when the message is sent/received
- extra query was removed
2018-12-24 14:18:42 +02:00
Dmitry Novotochinov
962c49e345
add keycard installation
Signed-off-by: Dmitry Novotochinov <dmitry.novot@gmail.com>
2018-12-20 15:43:37 +03:00
Roman Volosovskyi
c440b7a3a7
[slow sign in] Denorlmalize last message
The last messages of the chats are necessary to properly show the chat
list, which is shown right after signing in. Before this commit, the
last message was retrieved as one of 20 last messages fetched for each
chat.

Implementation:
- `:last-message-content` and `:last-message-type` fields were added to
  `chat` entity
- both fields are updated when messages are received/sent
- loading of the last 20 messages for each chat was removed as
  initialization step
2018-12-17 13:29:10 +02:00
Andrea Maria Piana
54b9ba5a2e
Dont choke on wrongly serialized messages
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2018-12-14 16:59:34 +01:00
Roman Volosovskyi
4aa562f6a8
[slow sign in] Unlock account's DB before starting node
There is no need to wait for `Statusgo.Login` callback in order to start
unlocking realm db: currently it is encrypted via a key which is derived
from user’s password, so we can try to unlock that DB before starting
node. That’s how password will be checked. Right after that `:home`
screen is shown, the node is started, then `Statusgo.Login` executed.

The difference in sign in duration is more noticeable on Android
devices, where `Statusgo.Login` is much slower because of PFS database
encryption.
2018-12-12 17:46:52 +02:00
Roman Volosovskyi
83a8d9db27
Show schema version details on migrations failure
Simplifies debugging of migration failures, specifically in cases when
more than one migration is applied.
2018-12-10 10:12:27 +02:00
Roman Volosovskyi
4aaaf58e99
[#6956] delete duplicates after iteration over messages/statuses 2018-12-06 11:22:00 +02:00
Roman Volosovskyi
c15a57571d
[#6956] fix possible message and user-status duplicates
There is a tiny chance that without this fix some users which had message
duplicates because of issues with `message-id` calculation **BEFORE** `0.9.31`
still have duplicates in their DB and migrations will not pass without
this change. It only checks if the message with a new `message-id` has been
added and removes duplicate. The same way it removes duplicates from
`user-status` entity.
2018-12-06 10:25:36 +02:00
Roman Volosovskyi
50a70f6e57
[#6956] store :raw-payload-hash in message (upgradable message-ids)
Currently, we calculate `message-id` as `sha3(from + raw_payload)`,
but we do not store `raw_payload` and it might be problematic
to restore it from DB because:
1) `content` field might be changed and so `Message` record
   will differ from the original one
2) it is even more problematic for `GroupMembershipUpdate`
   message because we don't save it in DB

In order to handle this, we can store `sha3(raw_payload)` as `raw-payload-hash`
prop of `message` entity and use it in case of emergency :)

`message-id` will be calculated as `sha3(from + sha3(raw_payload))`
2018-12-05 13:29:01 +02:00
Roman Volosovskyi
b6e515618b
[#6956] upgradable message-id
Implementation:
1. `transport.utils/message-id` function is called only in three places now
   and accepts `from` and  `raw_payload` as parameters.
   ID is calculated as `sha3(from + raw_payload)`.
2. This means that for wrapped private group chat message
   the raw payload of `GroupMembershipUpdate` is used.
2018-12-05 11:22:43 +02:00
Roman Volosovskyi
e7d0312d25
[#6903] fix replies compatibility
Issue was caused by https://github.com/status-im/status-react/pull/6722

Implementation:
1. `old-message-id` field (indexed) was introduced in `message` entity
   and is calculated as `message-id` was calculated in `0.9.31`
```clojure
(defn old-message-id
  [message]
  (sha3 (pr-str message)))
```
2. When a reply message is sent from the PR version of app both `response-to`
   and `response-to-v2` fields are sent as a part of `message`'s `content`
   field, so that it can be recognized by `0.9.31`.
3. When PR version of app receives reply from `0.9.31` we check whether
   message's `content` contains `response-to` but doesn't contain
   `response-to-v2`, and if so we check whether DB contains message with
   `old-message-id=response-to`. If such message has been found we assoc
   `response-to-v2` to content.
4. If message from DB contains only `response-to` but not `response-to-v2`
   attempt to fetch the message by `old-message-id` is done.
2018-12-05 07:22:40 +02:00
Vitaliy Vlasov
92d00f4250
Use multiple app instances simultaneously
Signed-off-by: Vitaliy Vlasov <siphiuel@gmail.com>
2018-11-28 19:10:12 +02:00
Roman Volosovskyi
c506521778
[slow sign in] Better handling of migration failures and db encryption problems.
Migration failures are handled separately from other errors which might appear
during opening account's realm DB. In case if user chooses to erase
the account's database, only this database will be removed and other accounts
will not be touched.
2018-11-28 14:13:30 +02:00
Roman Volosovskyi
5d5847e4b9
[slow sign in] Add unviewed messages counter to chat entity.
Before we fetched ALL user-statuses with `status=received` (which means that
a message hasn't been seen), iterated them, grouped by chat and then stored
`message-ids` of these `user-statuses` in chat's `:unviewed-messages` key.

This commit introduces :unviewed-messages-count field in chat entity.
That means that there is no need to iterate `user-statuses` in order to count
a total number of unviewed messages, it is always stored along with chat.
In the rest of it, the difference is only that chat's db record should be
updated each time when unviewed messages are seen.
2018-11-23 17:08:48 +02:00