twisterp2pblockchainnetworkbittorrentmicrobloggingipv6social-networkdhtdecentralizedp2p-networktwister-servertwister-ipv6twister-coretwisterarmy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.5 KiB
74 lines
2.5 KiB
twister group chat draft |
|
======================== |
|
|
|
group chat is a private and encrypted timeline shared among some users |
|
which define a specific topic (or description). |
|
|
|
it is tempting to use a new torrent where members would subscribe in |
|
order to post their chat messages. however this idea does work as it is |
|
impossible (very difficult?) to implement a distributed torrent with |
|
multiple writers. (a clash occurs when two writers try to send the |
|
same piece number) |
|
|
|
therefore, twister's group chat is a special case of direct messages |
|
using a private key pair (outside of the blockchain). non-members do not |
|
know about group chat creation as public key is never published. |
|
|
|
members are invited to group using a special (bencoded) group_invite DM: |
|
|
|
group_invite { |
|
desc: "free text description", |
|
key: "secret of the private key", |
|
} |
|
|
|
after sending the group_invite DM to a given user, another DM is sent |
|
to the group itself to notify all existing members about the new |
|
member list. this is another special DM: |
|
|
|
group_members { |
|
[xxx,yyy,...] |
|
} |
|
|
|
it is true that, since every member knows both private/public keys of |
|
the group, symmetric-key could have been used for group chat's messages. |
|
however we reuse the same twister infrastructure of original DMs. |
|
any group chats, invites and messages are indistinguible from normal |
|
DMs to non-members. |
|
|
|
because all members have access to private key, there is no concept of |
|
administrator. any member may invite new members and change group's |
|
description. it is not possible to exclude a member, so frontends may |
|
offer an option to clone/create a new group excluding whoever they |
|
want. |
|
|
|
--- |
|
|
|
new RPCs for group chat: |
|
|
|
- creategroup <description> |
|
returns groupalias (which is added to wallet). |
|
|
|
group aliases are prepended with "*" so they are not valid usernames |
|
and may not be propagated accidentaly to the network. |
|
|
|
group aliases are only valid locally, each twisterd instance will |
|
create its own alias upon receiving an invitation. |
|
|
|
- listgroups |
|
[ groupalias1, groupalias2, ... ] |
|
|
|
- getgroupinfo |
|
{alias:xxx,description:xxx,members:[xxx,yyy,...]} |
|
|
|
- newgroupinvite <username> <k> <groupalias> [<newmember1>,<newmember2>,...] |
|
DM(group_invite) => newmember |
|
DM(group_members) => groupalias |
|
|
|
- newgroupdescription <username> <k> <groupalias> <description> |
|
DM(group_invite) => groupalias |
|
|
|
- leavegroup <username> <groupalias> |
|
not yet implemented |
|
|
|
note: use getdirectmsgs/newdirectmsgto to obtain/post new messages |
|
to group chats.
|
|
|