on master help sign in
keys: during Activation, use new wallet's seed

This fix adds conditional behavior to the MultiKeyFileGenerator. By default, the keygen uses the logged-in wallet to generate both halves of the pair. During the Activation flow, the generator now accepts an optional wallet arg which is used to pass in the receiving master ticket wallet. Then, The MT wallet is used to generate the 2nd half of the keypair. This change also renames some variables for improved readability. Co-authored-by: willbach <willbach@gmail.com>

commit8adbabb84c6c9acaa1dc01a8f8c0b5fb60095e1b authortomholford <tomholford@users.noreply.github.com> dateFri 14 Jan 2022, 12:58 (5 years ago) parent4474c9d
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,