status-go/protocol/protobuf/pairing.proto

371 lines
7.6 KiB
Protocol Buffer
Raw Normal View History

syntax = "proto3";
import "sync_settings.proto";
import 'application_metadata_message.proto';
option go_package = "./;protobuf";
package protobuf;
/* `FetchingBackedUpDataDetails` is used to describe how many messages a single backup data structure consists of */
message FetchingBackedUpDataDetails {
uint32 data_number = 1;
uint32 total_number = 2;
}
message Backup {
uint64 clock = 1;
string id = 2;
/* this is what we already had */
repeated SyncInstallationContactV2 contacts = 3;
2022-01-06 16:35:08 +00:00
repeated SyncCommunity communities = 4;
/* newly added details to be backed up to and fetched from waku */
FetchingBackedUpDataDetails contactsDetails = 5;
FetchingBackedUpDataDetails communitiesDetails = 6;
BackedUpProfile profile = 7;
FetchingBackedUpDataDetails profileDetails = 8;
SyncSetting setting = 9;
FetchingBackedUpDataDetails settingsDetails = 10;
SyncAllKeycards keycards = 11;
FetchingBackedUpDataDetails keycardsDetails = 12;
SyncWalletAccount walletAccount = 13;
FetchingBackedUpDataDetails walletAccountsDetails = 14;
}
message MultiAccount {
string name = 1;
int64 timestamp = 2;
string identicon = 3;
2023-03-22 17:48:42 +00:00
repeated ColorHash color_hash = 4;
int64 color_id = 5;
string keycard_pairing = 6;
string key_uid = 7;
repeated IdentityImage images = 8;
2023-03-22 17:48:42 +00:00
string customization_color = 9;
2023-03-22 17:48:42 +00:00
message ColorHash {
repeated int64 index = 1;
}
message IdentityImage {
string key_uid = 1;
string name = 2;
bytes payload = 3;
int64 width = 4;
int64 height = 5;
int64 filesize = 6;
int64 resize_target = 7;
uint64 clock = 8;
}
}
message LocalPairingPayload {
repeated Key keys = 1;
MultiAccount multiaccount = 2;
string password = 3;
message Key {
string name = 1;
bytes data = 2;
}
}
message LocalPairingPeerHello {
int32 pairing_version = 1;
bytes peer_id = 2;
string device_name = 3;
string device_type = 4;
bytes signature = 5;
}
message PairInstallation {
uint64 clock = 1;
string installation_id = 2;
string device_type = 3;
string name = 4;
// following fields used for local pairing
uint32 version = 5;
}
message SyncInstallationContact {
uint64 clock = 1;
string id = 2;
string profile_image = 3;
string ens_name = 4;
uint64 last_updated = 5;
repeated string system_tags = 6;
2020-08-20 14:06:38 +00:00
string local_nickname = 7;
}
message SyncInstallationContactV2 {
uint64 last_updated_locally = 1;
string id = 2;
string profile_image = 3;
string ens_name = 4;
uint64 last_updated = 5;
repeated string system_tags = 6;
string local_nickname = 7;
bool added = 9;
bool blocked = 10;
bool muted = 11;
bool removed = 12;
bool has_added_us = 13;
int64 verification_status = 14;
int64 trust_status = 15;
2023-01-20 14:28:30 +00:00
int64 contact_request_local_state = 16;
int64 contact_request_local_clock = 17;
int64 contact_request_remote_state = 18;
int64 contact_request_remote_clock = 19;
2023-02-14 17:44:00 +00:00
string display_name = 20;
}
message SyncInstallationAccount {
uint64 clock = 1;
string profile_image = 2;
uint64 last_updated = 3;
}
message SyncInstallationPublicChat {
uint64 clock = 1;
string id = 2;
}
message SyncCommunity {
uint64 clock = 1;
bytes id = 2;
bytes private_key = 3;
bytes description = 4;
bool joined = 5;
bool verified = 6;
bool muted = 7;
repeated SyncCommunityRequestsToJoin requests_to_join = 8;
SyncCommunitySettings settings = 9;
2022-05-27 09:14:40 +00:00
bool encrypted = 10;
bool spectated = 11;
2022-11-07 17:30:00 +00:00
bytes encryption_keys = 12;
}
message SyncCommunityRequestsToJoin {
bytes id = 1;
string public_key = 2;
uint64 clock = 3;
string ens_name = 4;
string chat_id = 5;
bytes community_id = 6;
uint64 state = 7;
feat: add verified wallet accounts to community requests This commit extends the `CommunityRequestToJoin` with `RevealedAddresses` which represent wallet addresses and signatures provided by the sender, to proof a community owner ownership of those wallet addresses. **Note: This only works with keystore files maanged by status-go** At high level, the follwing happens: 1. User instructs Status to send a request to join to a community. By adding a password hash to the instruction, Status will try to unlock the users keystore and verify each wallet account. 2. For every verified wallet account, a signature is created for the following payload, using each wallet's private key ``` keccak256(chatkey + communityID + requestToJoinID) ``` A map of walletAddress->signature is then attached to the community request to join, which will be sent to the community owner 3. The owner node receives the request, and if the community requires users to hold tokens to become a member, it will check and verify whether the given wallet addresses are indeed owned by the sender. If any signature provided by the request cannot be recovered, the request is immediately declined by the owner. 4. The verified addresses are then added to the owner node's database such that, once the request should be accepted, the addresses can be used to check on chain whether they own the necessary funds to fulfill the community's permissions The checking of required funds is **not** part of this commit. It will be added in a follow-up commit.
2023-03-17 09:19:40 +00:00
map<string, bytes> revealed_addresses = 8;
}
message SyncInstallation {
repeated SyncInstallationContact contacts = 1;
repeated SyncInstallationPublicChat public_chats = 2;
SyncInstallationAccount account = 3;
repeated SyncCommunity communities = 4;
}
2021-10-05 17:26:02 +00:00
message SyncChatRemoved {
uint64 clock = 1;
string id = 2;
2021-10-12 10:33:32 +00:00
}
message SyncChatMessagesRead {
uint64 clock = 1;
string id = 2;
}
message SyncActivityCenterRead {
uint64 clock = 1;
repeated bytes ids = 2;
}
message SyncActivityCenterAccepted {
uint64 clock = 1;
repeated bytes ids = 2;
}
message SyncActivityCenterDismissed {
uint64 clock = 1;
repeated bytes ids = 2;
2022-02-10 10:00:59 +00:00
}
2022-01-17 03:42:11 +00:00
message SyncBookmark {
uint64 clock = 1;
string url = 2;
string name = 3;
string image_url = 4;
bool removed = 5;
uint64 deleted_at = 6;
2022-01-17 03:42:11 +00:00
}
message SyncEnsUsernameDetail {
uint64 clock = 1;
string username = 2;
uint64 chain_id = 3;
bool removed = 4;
}
2022-02-10 10:00:59 +00:00
message SyncClearHistory {
string chat_id = 1;
uint64 cleared_at = 2;
2022-01-06 16:35:08 +00:00
}
2022-03-24 09:35:56 +00:00
message SyncProfilePicture {
string name = 1;
bytes payload = 2;
uint32 width = 3;
uint32 height = 4;
2022-03-24 09:35:56 +00:00
uint32 file_size = 5;
uint32 resize_target = 6;
uint64 clock = 7;
}
message SyncProfilePictures {
string key_uid = 1;
repeated SyncProfilePicture pictures = 2;
}
2022-05-18 10:42:51 +00:00
message SyncWalletAccount {
uint64 clock = 1;
bytes address = 2;
bool wallet = 3;
bool chat = 4;
string type = 5;
string storage = 6;
string path = 7;
bytes publicKey = 8;
string name = 9;
string color = 10;
bool hidden = 11;
bool removed = 12;
string emoji = 13;
string derived_from = 14;
string key_uid = 15;
string keypair_name = 16;
uint64 last_used_derivation_index = 17;
2022-05-18 10:42:51 +00:00
}
message SyncWalletAccounts {
repeated SyncWalletAccount accounts = 1;
}
message SyncSavedAddress {
reserved 4;
bytes address = 1;
string name = 2;
bool favourite = 3;
bool removed = 5;
uint64 update_clock = 7;
string chain_short_names = 8;
string ens = 9;
bool is_test= 10;
}
message SyncCommunitySettings {
uint64 clock = 1;
string community_id = 2;
bool history_archive_support_enabled = 3;
}
message SyncTrustedUser {
uint64 clock = 1;
string id = 2;
TrustStatus status = 3;
enum TrustStatus {
UNKNOWN = 0;
TRUSTED = 1;
UNTRUSTWORTHY = 2;
}
}
message SyncVerificationRequest {
uint64 clock = 1;
string from = 2;
string to = 3;
string challenge = 4;
uint64 requested_at = 5;
string response = 6;
uint64 replied_at = 7;
VerificationStatus verification_status = 8;
string id = 9;
enum VerificationStatus {
UNKNOWN = 0;
PENDING = 1;
ACCEPTED = 2;
DECLINED = 3;
CANCELED = 4;
}
}
2022-08-07 14:25:03 +00:00
message SyncContactRequestDecision {
uint64 clock = 1;
string requestId = 2;
DecisionStatus decision_status = 3;
enum DecisionStatus {
ACCEPTED = 0;
DECLINED = 1;
}
}
/* `BackedUpProfile` is used to describe profile of logged in user */
message BackedUpProfile {
string key_uid = 1;
string display_name = 2;
uint64 display_name_clock = 3;
repeated SyncProfilePicture pictures = 4;
repeated SyncSocialLinkSetting social_link_settings = 5;
repeated SyncEnsUsernameDetail ens_username_details = 6;
}
message RawMessage {
bytes payload = 1;
ApplicationMetadataMessage.Type messageType = 2;
}
message SyncRawMessage {
repeated RawMessage rawMessages = 1;
// we need these to be able to login
bytes subAccountsJsonBytes = 2;
bytes settingsJsonBytes = 3;
}
message SyncKeycard {
string uid = 1;
string name = 2;
bool locked = 3;
string key_uid = 4;
repeated bytes addresses = 5;
uint64 clock = 6;
}
message SyncKeycardAction {
Action action = 1;
string oldKeycardUid = 2;
SyncKeycard keycard = 3;
enum Action {
KEYCARD_ADDED = 0;
ACCOUNTS_ADDED = 1;
KEYCARD_DELETED = 2;
ACCOUNTS_REMOVED = 3;
LOCKED = 4;
UNLOCKED = 5;
UID_UPDATED = 6;
NAME_CHANGED = 7;
}
}
message SyncAllKeycards {
repeated SyncKeycard keycards = 1;
uint64 clock = 2;
2023-03-22 17:48:42 +00:00
}
message SyncSocialLinkSetting {
string text = 1;
string url = 2;
uint64 clock = 3;
}