on master help sign in
Merge pull request #877 from urbit/t/multikey-activate-flow

keys: during Activation, use new wallet's seed

commitfe5615cbd09b052be8fa037dcf7d674111b073d8 authortomholford <16504501+tomholford@users.noreply.github.com> dateFri 14 Jan 2022, 21:51 (5 years ago) parent4474c9d8adbabb
6 files changed+39−27
src/lib/useMultikeyFileGenerator.ts+19−8 src/views/Activate/ActivateCodeForm.tsx+3−3 src/views/Activate/MasterKeyConfirm.tsx+2−2 src/views/Activate/MasterKeyDownload.tsx+3−2 src/views/Activate/MasterKeyTransfer.tsx+5−5 src/views/Activate/useActivateFlowState.js+7−7
src/lib/useMultikeyFileGenerator.ts+19−8
@@ -24,6 +24,7 @@ interface useMultikeyFileGeneratorArgs {
2424 seed?: string;
2525 point?: number;
2626 seedWallet?: any;
27+ inviteMasterTicketWallet?: any;
2728}
2829
2930/**
@@ -35,6 +36,7 @@ export default function useMultikeyFileGenerator({
3536 seed,
3637 point,
3738 seedWallet,
39+ inviteMasterTicketWallet,
3840}: useMultikeyFileGeneratorArgs) {
3941 const { urbitWallet, wallet, authMnemonic, authToken }: any = useWallet();
4042 const { pointCursor }: any = usePointCursor();
@@ -71,15 +73,22 @@ export default function useMultikeyFileGenerator({
7173 const nextRevision = useMemo(() => currentRevision + 1, [currentRevision]);
7274
7375 const pairFromRevision = useCallback(
74− async (revision: number) => {
76+ async (revision: number, useInviteMasterTicketWallet = false) => {
7577 if (!_details) {
7678 return;
7779 }
7880
81+ // During the activation flow, we pass in the
82+ // inviteMasterTicketWallet to derive the multikey
83+ const derivationWallet =
84+ useInviteMasterTicketWallet && inviteMasterTicketWallet
85+ ? inviteMasterTicketWallet
86+ : seedWallet || urbitWallet;
87+
7988 const networkSeed = seed
8089 ? Just(seed)
8190 : await attemptNetworkSeedDerivation({
82− urbitWallet: seedWallet || urbitWallet,
91+ urbitWallet: derivationWallet,
8392 wallet,
8493 authMnemonic,
8594 details: _details,
@@ -103,13 +112,14 @@ export default function useMultikeyFileGenerator({
103112 },
104113 [
105114 _details,
106− _point,
107− authMnemonic,
108− authToken,
109− seed,
115+ inviteMasterTicketWallet,
116+ seedWallet,
110117 urbitWallet,
118+ seed,
111119 wallet,
112− seedWallet,
120+ authMnemonic,
121+ authToken,
122+ _point,
113123 ]
114124 );
115125
@@ -136,7 +146,8 @@ export default function useMultikeyFileGenerator({
136146 return;
137147 }
138148
139− const nextPair = await pairFromRevision(nextRevision);
149+ // During the activation flow, we want to use the invite wallet for the next pair
150+ const nextPair = await pairFromRevision(nextRevision, true);
140151
141152 setNotice('');
142153 setCode(generateCode(currentPair));
src/views/Activate/ActivateCodeForm.tsx+3−3
@@ -44,7 +44,7 @@ const ActivateCodeForm = ({ afterSubmit }: ActivateCodeFormProps) => {
4444 setDerivedPatp,
4545 setDerivedPoint,
4646 setDerivedPointDominion,
47− setDerivedWallet,
47+ setInviteMasterTicketWallet,
4848 setInviteWallet,
4949 setIsIn,
5050 setSendWallet,
@@ -153,7 +153,7 @@ const ActivateCodeForm = ({ afterSubmit }: ActivateCodeFormProps) => {
153153 setDerivedPatp(Just(ob.patp(point)));
154154 setDerivedPoint(Just(point));
155155 setDerivedPointDominion(Just(rollerPoint.dominion));
156− setDerivedWallet(Just(await generateWallet(point, ticket, true)));
156+ setInviteMasterTicketWallet(Just(await generateWallet(point, ticket, true)));
157157 setIsIn(false);
158158 await timeout(100);
159159 } else {
@@ -174,7 +174,7 @@ const ActivateCodeForm = ({ afterSubmit }: ActivateCodeFormProps) => {
174174 setDerivedPatp,
175175 setDerivedPoint,
176176 setDerivedPointDominion,
177− setDerivedWallet,
177+ setInviteMasterTicketWallet,
178178 setIsIn,
179179 setSendWallet,
180180 ]
src/views/Activate/MasterKeyConfirm.tsx+2−2
@@ -25,8 +25,8 @@ import View from 'components/View';
2525import './MasterKeyConfirm.scss';
2626
2727const MasterKeyConfirm = () => {
28− const { derivedWallet, setIsIn }: any = useActivateFlow();
29− const { ticket } = need.wallet(derivedWallet);
28+ const { inviteMasterTicketWallet, setIsIn }: any = useActivateFlow();
29+ const { ticket } = need.wallet(inviteMasterTicketWallet);
3030 const { push, names }: any = useLocalRouter();
3131 const STUB_VERIFY_TICKET = isDevelopment;
3232 const ticketSegments = useMemo(() => ticketToSegments(ticket), [ticket]);
src/views/Activate/MasterKeyDownload.tsx+3−2
@@ -23,7 +23,7 @@ import View from 'components/View';
2323const MasterKeyDownload = () => {
2424 const {
2525 derivedPoint,
26− derivedWallet,
26+ inviteMasterTicketWallet,
2727 inviteWallet,
2828 isIn,
2929 setGenerated,
@@ -31,7 +31,7 @@ const MasterKeyDownload = () => {
3131 }: any = useActivateFlow();
3232 const { data, push, names }: any = useLocalRouter();
3333 const point = need.point(derivedPoint);
34− const wallet = need.wallet(derivedWallet);
34+ const wallet = need.wallet(inviteMasterTicketWallet);
3535 const ticket = wallet.ticket.replace('~', '');
3636
3737 const [paper, setPaper] = useState(Nothing());
@@ -49,6 +49,7 @@ const MasterKeyDownload = () => {
4949 const { keyfile, filename } = useMultikeyFileGenerator({
5050 point,
5151 seedWallet: inviteWallet,
52+ inviteMasterTicketWallet,
5253 });
5354
5455 // sync paper value to activation state
src/views/Activate/MasterKeyTransfer.tsx+5−5
@@ -19,7 +19,7 @@ const MasterKeyTransfer = () => {
1919 const {
2020 derivedPatp,
2121 derivedPoint,
22− derivedWallet,
22+ inviteMasterTicketWallet,
2323 sendWallet,
2424 }: any = useActivateFlow();
2525 const [error, setError] = useState<any>();
@@ -30,16 +30,16 @@ const MasterKeyTransfer = () => {
3030 try {
3131 await performL2Reticket({
3232 point: derivedPoint.value,
33− to: derivedWallet.value.ownership.keys.address,
34− manager: derivedWallet.value.management.keys.address,
35− toWallet: derivedWallet.value,
33+ to: inviteMasterTicketWallet.value.ownership.keys.address,
34+ manager: inviteMasterTicketWallet.value.management.keys.address,
35+ toWallet: inviteMasterTicketWallet.value,
3636 fromWallet: sendWallet.value,
3737 });
3838 } catch (e) {
3939 console.error(e);
4040 setError(e);
4141 }
42− }, [derivedWallet, performL2Reticket, derivedPoint.value, sendWallet.value]);
42+ }, [inviteMasterTicketWallet, performL2Reticket, derivedPoint.value, sendWallet.value]);
4343
4444 useFadeIn();
4545
src/views/Activate/useActivateFlowState.js+7−7
@@ -12,11 +12,11 @@ export default function useActivateFlowState() {
1212 // A new wallet generated after confirming that the invite ticket is valid
1313 // and the point is available for activation.
1414 // At the end of the Activate flow, the point will be transferred
15− // from the invite wallet to the derived wallet. When the user confirms
15+ // from the invite wallet to this wallet. When the user confirms
1616 // the Master Key (ticket) and downloads the passport / mnemonic,
17− // it is for the derived wallet
17+ // it is for this wallet
1818 // type UrbitWallet
19− const [derivedWallet, setDerivedWallet] = useState(Nothing());
19+ const [inviteMasterTicketWallet, setInviteMasterTicketWallet] = useState(Nothing());
2020 // The wallet generated deterministically during the invite flow;
2121 // it is re-generated when the user starts the Activate flow. It is used
2222 // to derive and confirm a shareable ticket that a user can activate a point with.
@@ -32,7 +32,7 @@ export default function useActivateFlowState() {
3232 setDerivedPatp(Nothing());
3333 setDerivedPoint(Nothing());
3434 setDerivedPointDominion(Nothing());
35− setDerivedWallet(Nothing());
35+ setInviteMasterTicketWallet(Nothing());
3636 setGenerated(false);
3737 setIncomingPoints(Nothing());
3838 setInviteWallet(Nothing());
@@ -41,7 +41,7 @@ export default function useActivateFlowState() {
4141 setDerivedPatp,
4242 setDerivedPoint,
4343 setDerivedPointDominion,
44− setDerivedWallet,
44+ setInviteMasterTicketWallet,
4545 setGenerated,
4646 setIncomingPoints,
4747 setInviteWallet,
@@ -52,7 +52,7 @@ export default function useActivateFlowState() {
5252 derivedPatp,
5353 derivedPoint,
5454 derivedPointDominion,
55− derivedWallet,
55+ inviteMasterTicketWallet,
5656 generated,
5757 incomingPoints,
5858 inviteWallet,
@@ -62,7 +62,7 @@ export default function useActivateFlowState() {
6262 setDerivedPatp,
6363 setDerivedPoint,
6464 setDerivedPointDominion,
65− setDerivedWallet,
65+ setInviteMasterTicketWallet,
6666 setGenerated,
6767 setIncomingPoints,
6868 setInviteWallet,