Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

how to coordinate multiple wallets #2628

Closed
warner opened this issue Mar 12, 2021 · 3 comments
Closed

how to coordinate multiple wallets #2628

warner opened this issue Mar 12, 2021 · 3 comments
Assignees
Labels
Milestone

Comments

@warner
Copy link
Member

warner commented Mar 12, 2021

What is the Problem Being Solved?

Users will expect to be able to have multiple coordinated user agents, e.g. one on their phone, and a second on their laptop. All agents should have equal functionality, and changes initiated by one agent should appear on the others.

Most platforms have some form of this (web browsers with synchronized bookmarks/passwords/tabs, chat clients, etc). There are more interesting design/security issues on platforms that are meant to be secure, because there is no central server which has the full authority, and instead each new agent must be embued with authority by an old one. This frequently involves generating some sort of cryptographic value on an existing agent, and having the human transfer it (type it into) the new one, then having the old and new agents communicate (encrypted) through an untrusted central machine to transfer the necessary data.

The cheap/lazy way to enable multiple user agents is to make them all identical. This fails as soon as the agents have any interesting amount of state, because they'll become hopelessly confused ("you think I said what? no that was my identical twin"). Instead, you need each agent to be distinct, but merely granted similar authorities, and to talk to each other to keep their user-facing status in sync.

Our platform makes this even more interesting, because of the dynamic state each vat/swingset holds. We might have a chain-side object that holds a bunch of Purses, which is easy enough to share between the agents, but any larger-scale structures or plans that aren't easily captured in that object, will need to be kept somewhere.

This overlaps a good bit with having a wallet recovery plan: the data that you'd need to recover from offline storage (perhaps as little as a single private key) if all of your agents were to die, is probably the same data that needs to be managed jointly by multiple living agents.

So the task is to allow two or more distinct swingsets, each holding its own wallet vat, to coordinate with each other. We'll probably need some way for all of a user's wallets to find each other and broadcast events to each other. And we'll need a way to add a new agent to the existing set, with some sort of secure authorization process.

Description of the Design

needs to be designed

Security Considerations

  • it must be possible to add a new agent, but only if an existing one agrees, which requires a human-meaningful/comparable/approvable way to identify the candidate agent and signal acceptance
  • whatever authority is being given to chain-side resources must be clearly documented, along with which objects have power over what. We should be able to segregate authorities such that the compromise of a single object or vat on the chain does not lead to compromise of one or more user wallets
@warner warner added the enhancement New feature or request label Mar 12, 2021
@warner
Copy link
Member Author

warner commented Mar 13, 2021

cc @michaelfig @rowgraus

@Tartuffo
Copy link
Contributor

Tartuffo commented Feb 4, 2022

@michaelfig pre-dates on-chain wallet effort, if this is no longer relevant, please close.

@Tartuffo Tartuffo added this to the Mainnet 1 milestone Mar 23, 2022
@Tartuffo Tartuffo modified the milestones: Mainnet 1, RUN Protocol RC0 Apr 5, 2022
@dckc
Copy link
Member

dckc commented May 31, 2022

obsolete in favor of on-chain wallet plans (#3995)

@dckc dckc closed this as completed May 31, 2022
@dckc dckc added the duplicate label May 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants