Skip to content

Commit 25126e6

Browse files
authored
Changing to proper FFI bindings (#611)
1 parent 42acd28 commit 25126e6

6 files changed

+118
-59
lines changed

diagrams/HLSDK.mermaid

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
block-beta
2+
columns 4
3+
block:group1:2
4+
columns 2
5+
Android LibXMTP
6+
end
7+
space:2
8+
9+
block:group3:2
10+
columns 2
11+
React C["LibXMTP"]
12+
end
13+
space
14+
Node["XMTP Node"]
15+
block:group2:2
16+
columns 2
17+
iOS B["LibXMTP"]
18+
end
19+
group1-->Node
20+
Node-->group1
21+
group2-->Node
22+
Node-->group2
23+
group3-->Node
24+
Node-->group3

diagrams/add-remove.mermaid

+14-13
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,37 @@ sequenceDiagram
44
participant Charlie
55
participant LibXMTP
66
participant Node
7-
7+
88
Note left of Alice: Remove Charlie
99

10-
Alice->>LibXMTP: group.removeMembers(Charlie)
10+
Alice->>LibXMTP: group.remove_members(Charlie)
11+
LibXMTP->>+Node: get-identity-updates(Charlie)
12+
Node-->>-LibXMTP: installation_key:Charlie + credential_identity:Charlie
1113
LibXMTP->>Node: send-group-message(REMOVE_MEMBER:installation_key:Charlie)
12-
Alice->>+LibXMTP: group.messages()
14+
Alice->>+LibXMTP: group.sync()
1315
LibXMTP->>+Node: query-group-messages(group_id)
1416
Node->>-LibXMTP: REMOVE_MEMBER:Charlie
1517
LibXMTP-->>-Alice: "Charlie has been removed from the group"
16-
Bob->>+LibXMTP: group.messages()
18+
Bob->>+LibXMTP: group.sync()
1719
LibXMTP->>+Node: query-group-messages(group_id)
1820
Node->>-LibXMTP: REMOVE_MEMBER:Charlie
1921
LibXMTP-->>-Bob: "Charlie has been removed from the group"
2022

2123
Note left of Alice: Add Charlie
22-
Bob->>LibXMTP: addMembers(Charlie)
24+
Alice->>LibXMTP: addMembers(Charlie)
2325
LibXMTP->>+Node: get-identity-updates(Charlie)
2426
Node-->>-LibXMTP: installation_key:Charlie + credential_identity:Charlie
2527
LibXMTP->>Node: send-group-message(ADD_MEMBER:installation_key:Charlie)
26-
Bob->>+LibXMTP: group.messages()
28+
Alice->>+LibXMTP: group.sync()
2729
LibXMTP->>+Node: query-group-messages(group_id)
2830
Node->>-LibXMTP: ADD_MEMBER:Charlie
29-
LibXMTP-->>-Bob: "Charlie has been added to the group"
30-
Alice->>+LibXMTP: group.messages()
31+
LibXMTP-->>-Alice: "Charlie has been added to the group"
32+
Bob->>+LibXMTP: group.sync()
3133
LibXMTP->>+Node: query-group-messages(group_id)
3234
Node->>-LibXMTP: ADD_MEMBER:Charlie
33-
LibXMTP-->>-Alice: "Charlie has been added to the group"
34-
Charlie->>+LibXMTP: syncGroups()
35+
LibXMTP-->>-Bob: "Charlie has been added to the group"
36+
Charlie->>+LibXMTP: conversations.sync()
3537
LibXMTP->>+Node: query-welcome-messages(installation_key:Charlie)
3638
Node-->>-LibXMTP: WelcomeMessages()
37-
LibXMTP-->>-Charlie: "Alice has added you to a group"
38-
Charlie->>LibXMTP: rotate_key_packages()
39-
LibXMTP->>Node: upload-key-package()
39+
Charlie->>+LibXMTP: conversations.list()
40+
LibXMTP-->>-Charlie: List of groups including new group

diagrams/create-client.mermaid

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
sequenceDiagram
2+
participant Alice
3+
participant LibXMTP
4+
participant Node
5+
6+
Note over Alice,LibXMTP: These calls are coming from higher-level SDKs on behalf of users
7+
Note over Alice,Node: Step 1 (Account Creation) & 2 (Initial Keying Material) of MLS group creation combined
8+
Alice->>+LibXMTP: create_client(encryption_key, account_address)
9+
LibXMTP-->>-Alice: client
10+
Alice->>+LibXMTP: client.text_to_sign()
11+
LibXMTP-->>-Alice: text to be signed for register_identity
12+
Alice->>LibXMTP: client.register_identity(recoverable_wallet_signature)
13+
LibXMTP->>+Node: register_installation(key_package:Alice)
14+
Node-->>-LibXMTP: installation_key:Alice

diagrams/diagrams.md

+39-29
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ The sequence diagrams stored here are for documenting LibXMTP's group chat imple
44

55
The diagrams represent the creation of a group chat between Alice, Bob, and Charlie, our implmentation of [Figure 2](https://messaginglayersecurity.rocks/mls-architecture/draft-ietf-mls-architecture.html#fig-group-formation-example) from [The Messaging Layer Security (MLS) Architecture](https://messaginglayersecurity.rocks/mls-architecture/draft-ietf-mls-architecture.html) spec.
66

7+
Note: calls into LibXMTP with the `conversations.` prefix use the [Conversations](https://github.com/xmtp/libxmtp/blob/204b35a337daf2a9f2ed0cb20199e254d0a7493a/bindings_ffi/src/mls.rs#L188) protocol, and calls with a `group.` prefix use the [Group](https://github.com/xmtp/libxmtp/blob/204b35a337daf2a9f2ed0cb20199e254d0a7493a/bindings_ffi/src/mls.rs#L315) protocol.
8+
79
* *form-group.mermaid* - Covers Steps 1-4 of forming a group. In LibXMTP, steps 1 and 2 happen at the same time, and steps 3 and 4 can also be consolidated by calling `newGroup()` with multiple participants.
810
* *send-recieve.mermaid* - Covers sending and receiving messages to the newly formed group.
911
* *add-remove.mermaid* - Covers adding and removing group members.
@@ -21,37 +23,47 @@ sequenceDiagram
2123
2224
Note over Alice,Charlie: These calls are coming from higher-level<br/> SDKs on behalf of users
2325
Note over Alice,Node: Step 1 (Account Creation) & 2 (Initial Keying Material) of MLS group creation combined
24-
Alice->>LibXMTP: create_client(encryption_key, account_address)
26+
Alice->>+LibXMTP: create_client(encryption_key, account_address)
27+
LibXMTP-->>-Alice: client
28+
Alice->>+LibXMTP: client.text_to_sign()
29+
LibXMTP-->>-Alice: text to be signed for register_identity
30+
Alice->>LibXMTP: client.register_identity(recoverable_wallet_signature)
2531
LibXMTP->>+Node: register_installation(key_package:Alice)
2632
Node-->>-LibXMTP: installation_key:Alice
27-
Bob->>LibXMTP: create_client(encryption_key, account_address)
33+
Bob->>+LibXMTP: create_client(encryption_key, account_address)
34+
LibXMTP-->>-Bob: client
35+
Bob->>+LibXMTP: client.text_to_sign()
36+
LibXMTP-->>-Bob: text to be signed for register_identity
37+
Bob->>LibXMTP: client.register_identity(recoverable_wallet_signature)
2838
LibXMTP->>+Node: register_installation(key_package:Bob)
2939
Node-->>-LibXMTP: installation_key:Bob
30-
Charlie->>LibXMTP: create_client(encryption_key, account_address)
40+
Charlie->>+LibXMTP: create_client(encryption_key, account_address)
41+
LibXMTP-->>-Charlie: client
42+
Charlie->>+LibXMTP: client.text_to_sign()
43+
LibXMTP-->>-Charlie: text to be signed for register_identity
44+
Charlie->>LibXMTP: client.register_identity(recoverable_wallet_signature)
3145
LibXMTP->>+Node: register_installation(key_package:Charlie)
3246
Node-->>-LibXMTP: installation_key:Charlie
3347
3448
Note over Alice,Node: Step 3 (Adding Bob) & 4 (Adding Charlie) of MLS group creation
35-
Alice->>LibXMTP: newGroup(Bob, Charlie)
49+
Alice->>LibXMTP: conversations.create_group(Bob, Charlie)
3650
LibXMTP->>+Node: get-identity-updates(Bob)
3751
Node-->>-LibXMTP: installation_key:Bob + credential_identity:Bob
3852
LibXMTP->>+Node: get-identity-updates(Charlie)
3953
Node-->>-LibXMTP: installation_key:Charlie + credential_identity:Charlie
4054
LibXMTP->>Node: fetch-key-packages(installation_keys: Bob + Charlie)
4155
Node-->>LibXMTP: KeyPackages(Bob+Charlie)
4256
LibXMTP->>Node: send-welcome-messages(KeyPackages:Bob + Charlie)
43-
Bob->>+LibXMTP: syncGroups()
57+
Bob->>+LibXMTP: conversations.sync()
4458
LibXMTP->>+Node: query-welcome-messages(installation_key:Bob)
4559
Node-->>-LibXMTP: WelcomeMessages()
46-
LibXMTP-->>-Bob: "Alice has added you to a group"
47-
Bob->>LibXMTP: rotate_key_packages()
48-
LibXMTP->>Node: upload-key-package()
49-
Charlie->>+LibXMTP: syncGroups()
60+
Bob->>+LibXMTP: conversations.list()
61+
LibXMTP-->>-Bob: List of groups including new group
62+
Charlie->>+LibXMTP: conversations.sync()
5063
LibXMTP->>+Node: query-welcome-messages(installation_key:Charlie)
5164
Node-->>-LibXMTP: WelcomeMessages()
52-
LibXMTP-->>-Charlie: "Alice has added you to a group"
53-
Charlie->>LibXMTP: rotate_key_packages()
54-
LibXMTP->>Node: upload-key-package()
65+
Charlie->>+LibXMTP: conversations.list()
66+
LibXMTP-->>-Charlie: List of groups including new group
5567
```
5668

5769
## Send and Receive Messages
@@ -60,7 +72,6 @@ sequenceDiagram
6072
sequenceDiagram
6173
participant Alice
6274
participant Bob
63-
participant Charlie
6475
participant LibXMTP
6576
participant Node
6677
@@ -69,10 +80,11 @@ sequenceDiagram
6980
LibXMTP->>Node: send-group-messages(SEND_MESSAGE:"Hello, group!")
7081
7182
Note left of Alice: Receive Message
72-
Bob->>+LibXMTP: group.messages()
73-
LibXMTP->>+Node: query-group-messages(group_id)
74-
Node-->>-LibXMTP: "Hello, group!"
75-
LibXMTP->>-Bob: "Hello, group!"
83+
Bob->>LibXMTP: group.sync()
84+
LibXMTP->>Node: query-group-messages(group_id)
85+
Node-->>LibXMTP: "Hello, group!"
86+
Bob->>LibXMTP: group.find_messages()
87+
LibXMTP->>Bob: "Hello, group!"
7688
```
7789

7890
## Add and Remove Group Members
@@ -84,39 +96,37 @@ sequenceDiagram
8496
participant Charlie
8597
participant LibXMTP
8698
participant Node
87-
99+
88100
Note left of Alice: Remove Charlie
89101
90-
Alice->>LibXMTP: group.removeMembers(Charlie)
102+
Alice->>LibXMTP: group.remove_members(Charlie)
91103
LibXMTP->>Node: send-group-message(REMOVE_MEMBER:installation_key:Charlie)
92-
Alice->>+LibXMTP: group.messages()
104+
Alice->>+LibXMTP: group.sync()
93105
LibXMTP->>+Node: query-group-messages(group_id)
94106
Node->>-LibXMTP: REMOVE_MEMBER:Charlie
95107
LibXMTP-->>-Alice: "Charlie has been removed from the group"
96-
Bob->>+LibXMTP: group.messages()
108+
Bob->>+LibXMTP: group.sync()
97109
LibXMTP->>+Node: query-group-messages(group_id)
98110
Node->>-LibXMTP: REMOVE_MEMBER:Charlie
99111
LibXMTP-->>-Bob: "Charlie has been removed from the group"
100112
101113
Note left of Alice: Add Charlie
102-
Bob->>LibXMTP: addMembers(Charlie)
114+
Alice->>LibXMTP: add_members(Charlie)
103115
LibXMTP->>+Node: get-identity-updates(Charlie)
104116
Node-->>-LibXMTP: installation_key:Charlie + credential_identity:Charlie
105117
LibXMTP->>Node: send-group-message(ADD_MEMBER:installation_key:Charlie)
106-
Bob->>+LibXMTP: group.messages()
118+
Alice->>+LibXMTP: group.sync()
107119
LibXMTP->>+Node: query-group-messages(group_id)
108120
Node->>-LibXMTP: ADD_MEMBER:Charlie
109-
LibXMTP-->>-Bob: "Charlie has been added to the group"
110-
Alice->>+LibXMTP: group.messages()
121+
LibXMTP-->>-Alice: "Charlie has been added to the group"
122+
Bob->>+LibXMTP: group.sync()
111123
LibXMTP->>+Node: query-group-messages(group_id)
112124
Node->>-LibXMTP: ADD_MEMBER:Charlie
113-
LibXMTP-->>-Alice: "Charlie has been added to the group"
114-
Charlie->>+LibXMTP: syncGroups()
125+
LibXMTP-->>-Bob: "Charlie has been added to the group"
126+
Charlie->>+LibXMTP: conversations.sync()
115127
LibXMTP->>+Node: query-welcome-messages(installation_key:Charlie)
116128
Node-->>-LibXMTP: WelcomeMessages()
117129
LibXMTP-->>-Charlie: "Alice has added you to a group"
118-
Charlie->>LibXMTP: rotate_key_packages()
119-
LibXMTP->>Node: upload-key-package()
120130
```
121131

122132
## Sync Installations

diagrams/form-group.mermaid

+22-12
Original file line numberDiff line numberDiff line change
@@ -7,34 +7,44 @@ sequenceDiagram
77

88
Note over Alice,Charlie: These calls are coming from higher-level<br/> SDKs on behalf of users
99
Note over Alice,Node: Step 1 (Account Creation) & 2 (Initial Keying Material) of MLS group creation combined
10-
Alice->>LibXMTP: create_client(encryption_key, account_address)
10+
Alice->>+LibXMTP: create_client(encryption_key, account_address)
11+
LibXMTP-->>-Alice: client
12+
Alice->>+LibXMTP: client.text_to_sign()
13+
LibXMTP-->>-Alice: text to be signed for register_identity
14+
Alice->>LibXMTP: client.register_identity(recoverable_wallet_signature)
1115
LibXMTP->>+Node: register_installation(key_package:Alice)
1216
Node-->>-LibXMTP: installation_key:Alice
13-
Bob->>LibXMTP: create_client(encryption_key, account_address)
17+
Bob->>+LibXMTP: create_client(encryption_key, account_address)
18+
LibXMTP-->>-Bob: client
19+
Bob->>+LibXMTP: client.text_to_sign()
20+
LibXMTP-->>-Bob: text to be signed for register_identity
21+
Bob->>LibXMTP: client.register_identity(recoverable_wallet_signature)
1422
LibXMTP->>+Node: register_installation(key_package:Bob)
1523
Node-->>-LibXMTP: installation_key:Bob
16-
Charlie->>LibXMTP: create_client(encryption_key, account_address)
24+
Charlie->>+LibXMTP: create_client(encryption_key, account_address)
25+
LibXMTP-->>-Charlie: client
26+
Charlie->>+LibXMTP: client.text_to_sign()
27+
LibXMTP-->>-Charlie: text to be signed for register_identity
28+
Charlie->>LibXMTP: client.register_identity(recoverable_wallet_signature)
1729
LibXMTP->>+Node: register_installation(key_package:Charlie)
1830
Node-->>-LibXMTP: installation_key:Charlie
1931

2032
Note over Alice,Node: Step 3 (Adding Bob) & 4 (Adding Charlie) of MLS group creation
21-
Alice->>LibXMTP: newGroup(Bob, Charlie)
33+
Alice->>LibXMTP: conversations.create_group(Bob, Charlie)
2234
LibXMTP->>+Node: get-identity-updates(Bob)
2335
Node-->>-LibXMTP: installation_key:Bob + credential_identity:Bob
2436
LibXMTP->>+Node: get-identity-updates(Charlie)
2537
Node-->>-LibXMTP: installation_key:Charlie + credential_identity:Charlie
2638
LibXMTP->>Node: fetch-key-packages(installation_keys: Bob + Charlie)
2739
Node-->>LibXMTP: KeyPackages(Bob+Charlie)
2840
LibXMTP->>Node: send-welcome-messages(KeyPackages:Bob + Charlie)
29-
Bob->>+LibXMTP: syncGroups()
41+
Bob->>+LibXMTP: conversations.sync()
3042
LibXMTP->>+Node: query-welcome-messages(installation_key:Bob)
3143
Node-->>-LibXMTP: WelcomeMessages()
32-
LibXMTP-->>-Bob: "Alice has added you to a group"
33-
Bob->>LibXMTP: rotate_key_packages()
34-
LibXMTP->>Node: upload-key-package()
35-
Charlie->>+LibXMTP: syncGroups()
44+
Bob->>+LibXMTP: conversations.list()
45+
LibXMTP-->>-Bob: List of groups including new group
46+
Charlie->>+LibXMTP: conversations.sync()
3647
LibXMTP->>+Node: query-welcome-messages(installation_key:Charlie)
3748
Node-->>-LibXMTP: WelcomeMessages()
38-
LibXMTP-->>-Charlie: "Alice has added you to a group"
39-
Charlie->>LibXMTP: rotate_key_packages()
40-
LibXMTP->>Node: upload-key-package()
49+
Charlie->>+LibXMTP: conversations.list()
50+
LibXMTP-->>-Charlie: List of groups including new group

diagrams/send-receive.mermaid

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
sequenceDiagram
22
participant Alice
33
participant Bob
4-
participant Charlie
54
participant LibXMTP
65
participant Node
76

@@ -10,7 +9,8 @@ sequenceDiagram
109
LibXMTP->>Node: send-group-messages(SEND_MESSAGE:"Hello, group!")
1110

1211
Note left of Alice: Receive Message
13-
Bob->>+LibXMTP: group.messages()
14-
LibXMTP->>+Node: query-group-messages(group_id)
15-
Node-->>-LibXMTP: "Hello, group!"
16-
LibXMTP->>-Bob: "Hello, group!"
12+
Bob->>LibXMTP: group.sync()
13+
LibXMTP->>Node: query-group-messages(group_id)
14+
Node-->>LibXMTP: "Alice: Hello, group!"
15+
Bob->>LibXMTP: group.find_messages()
16+
LibXMTP-->>Bob: "Alice: Hello, group!"

0 commit comments

Comments
 (0)