matrix-org / matrix-org/matrix-spec

Ability to transfer channel membership between homeservers

Open
#238 1 comment 30 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

A-Identity-Service A-S2S feature
Dominant language
HTML
Stars
330
Forks
150
Avg merge
2h 21m
Merged PRs (30d)
3

Description

I'm considering this distinct to https://github.com/matrix-org/GSoC/blob/master/IDEAS.md#decentralised-accounts because it is not as complex to implement.
The general idea is that I might want to move from @caleb:HomeserverA to @cjd:HomeserverB and while I accept that my handle will change, I would like to swap my new user into all of the channels and private messages which my old user was in and when I switch, I would like to keep my backscroll.

To bound the scope of this proposal:
* Name change is expected, this is not about making a global p2p nickname namespace
* Both involved homeservers are willing to perform the transfer

How the workflow might work:
1. On the old homeserver, In your user settings, next to "disable account" there is "transfer account", which also shows a warning because it is also permanent, after you click this button, you enter the new id to transfer to (which should already be registered with the new homeserver).
2. It produces for you a block of base64 which contains the new name and a signature authorising the shift, the user copies this.
3. User logs into the new homeserver and goes to settings and clicks "import account" and pastes the base64 code.
4. After verifying, the new homeserver broadcasts a transfer message to the network, this message contains the authorization to transfer from the old homeserver and so it is signed by both old and new.
5. Receiving a transfer message, all homeservers find-and-replace the old user with the new one in the db.
6. New homeserver begins to synchronize history of all of the channels joined from the old one. OR downloads them from the old homeserver through some special api...

Notes:
* base64 blob and new homeserver name constitute 2 factor auth for transfer, this helps mitigate the risk that someone accidentally transfers to the wrong account (not theirs).
* Transfers must be accepted, otherwise they can be used to "invite" people to zillions of channels
* Transferring username and image are a "nice to have" but definitely not required.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The issue describes a proposed account-transfer workflow but names no implementation files, tests, or existing entry points. Start by locating the specification's account, room-membership, and history-synchronization sections, then determine whether the transfer protocol and its security and migration behavior are defined. Done means the scope and protocol design are agreed and reflected in the relevant specification sections.

Written by the indexing model from the issue text.

Assessment

Domain
backend-api-design, distributed-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.