on master help sign in
keys: during Activation, use new wallet's seed
8adbabbtomholford
src/lib/useMultikeyFileGenerator.ts+19−8
@@ -24,6 +24,7 @@ interface useMultikeyFileGeneratorArgs {
24 seed?: string;
24 seed?: string;
25 point?: number;
25 point?: number;
26 seedWallet?: any;
26 seedWallet?: any;
27+ inviteMasterTicketWallet?: any;
27}
28}
28
29
29/**
30/**
@@ -35,6 +36,7 @@ export default function useMultikeyFileGenerator({
35 seed,
36 seed,
36 point,
37 point,
37 seedWallet,
38 seedWallet,
39+ inviteMasterTicketWallet,
38}: useMultikeyFileGeneratorArgs) {
40}: useMultikeyFileGeneratorArgs) {
39 const { urbitWallet, wallet, authMnemonic, authToken }: any = useWallet();
41 const { urbitWallet, wallet, authMnemonic, authToken }: any = useWallet();
40 const { pointCursor }: any = usePointCursor();
42 const { pointCursor }: any = usePointCursor();
@@ -71,15 +73,22 @@ export default function useMultikeyFileGenerator({
71 const nextRevision = useMemo(() => currentRevision + 1, [currentRevision]);
73 const nextRevision = useMemo(() => currentRevision + 1, [currentRevision]);
72
74
73 const pairFromRevision = useCallback(
75 const pairFromRevision = useCallback(
74− async (revision: number) => {
76+ async (revision: number, useInviteMasterTicketWallet = false) => {
75 if (!_details) {
77 if (!_details) {
76 return;
78 return;
77 }
79 }
78
80
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+
79 const networkSeed = seed
88 const networkSeed = seed
80 ? Just(seed)
89 ? Just(seed)
81 : await attemptNetworkSeedDerivation({
90 : await attemptNetworkSeedDerivation({
82− urbitWallet: seedWallet || urbitWallet,
91+ urbitWallet: derivationWallet,
83 wallet,
92 wallet,
84 authMnemonic,
93 authMnemonic,
85 details: _details,
94 details: _details,
@@ -103,13 +112,14 @@ export default function useMultikeyFileGenerator({
103 },
112 },
104 [
113 [
105 _details,
114 _details,
106− _point,
115+ inviteMasterTicketWallet,
107− authMnemonic,
116+ seedWallet,
108− authToken,
109− seed,
110 urbitWallet,
117 urbitWallet,
118+ seed,
111 wallet,
119 wallet,
112− seedWallet,
120+ authMnemonic,
121+ authToken,
122+ _point,
113 ]
123 ]
114 );
124 );
115
125
@@ -136,7 +146,8 @@ export default function useMultikeyFileGenerator({
136 return;
146 return;
137 }
147 }
138
148
149+ // During the activation flow, we want to use the invite wallet for the next pair
139− const nextPair = await pairFromRevision(nextRevision);
150+ const nextPair = await pairFromRevision(nextRevision, true);
140
151
141 setNotice('');
152 setNotice('');
142 setCode(generateCode(currentPair));
153 setCode(generateCode(currentPair));
src/views/Activate/ActivateCodeForm.tsx+3−3
@@ -44,7 +44,7 @@ const ActivateCodeForm = ({ afterSubmit }: ActivateCodeFormProps) => {
44 setDerivedPatp,
44 setDerivedPatp,
45 setDerivedPoint,
45 setDerivedPoint,
46 setDerivedPointDominion,
46 setDerivedPointDominion,
47− setDerivedWallet,
47+ setInviteMasterTicketWallet,
48 setInviteWallet,
48 setInviteWallet,
49 setIsIn,
49 setIsIn,
50 setSendWallet,
50 setSendWallet,
@@ -153,7 +153,7 @@ const ActivateCodeForm = ({ afterSubmit }: ActivateCodeFormProps) => {
153 setDerivedPatp(Just(ob.patp(point)));
153 setDerivedPatp(Just(ob.patp(point)));
154 setDerivedPoint(Just(point));
154 setDerivedPoint(Just(point));
155 setDerivedPointDominion(Just(rollerPoint.dominion));
155 setDerivedPointDominion(Just(rollerPoint.dominion));
156− setDerivedWallet(Just(await generateWallet(point, ticket, true)));
156+ setInviteMasterTicketWallet(Just(await generateWallet(point, ticket, true)));
157 setIsIn(false);
157 setIsIn(false);
158 await timeout(100);
158 await timeout(100);
159 } else {
159 } else {
@@ -174,7 +174,7 @@ const ActivateCodeForm = ({ afterSubmit }: ActivateCodeFormProps) => {
174 setDerivedPatp,
174 setDerivedPatp,
175 setDerivedPoint,
175 setDerivedPoint,
176 setDerivedPointDominion,
176 setDerivedPointDominion,
177− setDerivedWallet,
177+ setInviteMasterTicketWallet,
178 setIsIn,
178 setIsIn,
179 setSendWallet,
179 setSendWallet,
180 ]
180 ]
src/views/Activate/MasterKeyConfirm.tsx+2−2
@@ -25,8 +25,8 @@ import View from 'components/View';
25import './MasterKeyConfirm.scss';
25import './MasterKeyConfirm.scss';
26
26
27const MasterKeyConfirm = () => {
27const MasterKeyConfirm = () => {
28− const { derivedWallet, setIsIn }: any = useActivateFlow();
28+ const { inviteMasterTicketWallet, setIsIn }: any = useActivateFlow();
29− const { ticket } = need.wallet(derivedWallet);
29+ const { ticket } = need.wallet(inviteMasterTicketWallet);
30 const { push, names }: any = useLocalRouter();
30 const { push, names }: any = useLocalRouter();
31 const STUB_VERIFY_TICKET = isDevelopment;
31 const STUB_VERIFY_TICKET = isDevelopment;
32 const ticketSegments = useMemo(() => ticketToSegments(ticket), [ticket]);
32 const ticketSegments = useMemo(() => ticketToSegments(ticket), [ticket]);
src/views/Activate/MasterKeyDownload.tsx+3−2
@@ -23,7 +23,7 @@ import View from 'components/View';
23const MasterKeyDownload = () => {
23const MasterKeyDownload = () => {
24 const {
24 const {
25 derivedPoint,
25 derivedPoint,
26− derivedWallet,
26+ inviteMasterTicketWallet,
27 inviteWallet,
27 inviteWallet,
28 isIn,
28 isIn,
29 setGenerated,
29 setGenerated,
@@ -31,7 +31,7 @@ const MasterKeyDownload = () => {
31 }: any = useActivateFlow();
31 }: any = useActivateFlow();
32 const { data, push, names }: any = useLocalRouter();
32 const { data, push, names }: any = useLocalRouter();
33 const point = need.point(derivedPoint);
33 const point = need.point(derivedPoint);
34− const wallet = need.wallet(derivedWallet);
34+ const wallet = need.wallet(inviteMasterTicketWallet);
35 const ticket = wallet.ticket.replace('~', '');
35 const ticket = wallet.ticket.replace('~', '');
36
36
37 const [paper, setPaper] = useState(Nothing());
37 const [paper, setPaper] = useState(Nothing());
@@ -49,6 +49,7 @@ const MasterKeyDownload = () => {
49 const { keyfile, filename } = useMultikeyFileGenerator({
49 const { keyfile, filename } = useMultikeyFileGenerator({
50 point,
50 point,
51 seedWallet: inviteWallet,
51 seedWallet: inviteWallet,
52+ inviteMasterTicketWallet,
52 });
53 });
53
54
54 // sync paper value to activation state
55 // sync paper value to activation state
src/views/Activate/MasterKeyTransfer.tsx+5−5
@@ -19,7 +19,7 @@ const MasterKeyTransfer = () => {
19 const {
19 const {
20 derivedPatp,
20 derivedPatp,
21 derivedPoint,
21 derivedPoint,
22− derivedWallet,
22+ inviteMasterTicketWallet,
23 sendWallet,
23 sendWallet,
24 }: any = useActivateFlow();
24 }: any = useActivateFlow();
25 const [error, setError] = useState<any>();
25 const [error, setError] = useState<any>();
@@ -30,16 +30,16 @@ const MasterKeyTransfer = () => {
30 try {
30 try {
31 await performL2Reticket({
31 await performL2Reticket({
32 point: derivedPoint.value,
32 point: derivedPoint.value,
33− to: derivedWallet.value.ownership.keys.address,
33+ to: inviteMasterTicketWallet.value.ownership.keys.address,
34− manager: derivedWallet.value.management.keys.address,
34+ manager: inviteMasterTicketWallet.value.management.keys.address,
35− toWallet: derivedWallet.value,
35+ toWallet: inviteMasterTicketWallet.value,
36 fromWallet: sendWallet.value,
36 fromWallet: sendWallet.value,
37 });
37 });
38 } catch (e) {
38 } catch (e) {
39 console.error(e);
39 console.error(e);
40 setError(e);
40 setError(e);
41 }
41 }
42− }, [derivedWallet, performL2Reticket, derivedPoint.value, sendWallet.value]);
42+ }, [inviteMasterTicketWallet, performL2Reticket, derivedPoint.value, sendWallet.value]);
43
43
44 useFadeIn();
44 useFadeIn();
45
45
src/views/Activate/useActivateFlowState.js+7−7
@@ -12,11 +12,11 @@ export default function useActivateFlowState() {
12 // A new wallet generated after confirming that the invite ticket is valid
12 // A new wallet generated after confirming that the invite ticket is valid
13 // and the point is available for activation.
13 // and the point is available for activation.
14 // At the end of the Activate flow, the point will be transferred
14 // 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
16 // the Master Key (ticket) and downloads the passport / mnemonic,
16 // the Master Key (ticket) and downloads the passport / mnemonic,
17− // it is for the derived wallet
17+ // it is for this wallet
18 // type UrbitWallet
18 // type UrbitWallet
19− const [derivedWallet, setDerivedWallet] = useState(Nothing());
19+ const [inviteMasterTicketWallet, setInviteMasterTicketWallet] = useState(Nothing());
20 // The wallet generated deterministically during the invite flow;
20 // The wallet generated deterministically during the invite flow;
21 // it is re-generated when the user starts the Activate flow. It is used
21 // it is re-generated when the user starts the Activate flow. It is used
22 // to derive and confirm a shareable ticket that a user can activate a point with.
22 // to derive and confirm a shareable ticket that a user can activate a point with.
@@ -32,7 +32,7 @@ export default function useActivateFlowState() {
32 setDerivedPatp(Nothing());
32 setDerivedPatp(Nothing());
33 setDerivedPoint(Nothing());
33 setDerivedPoint(Nothing());
34 setDerivedPointDominion(Nothing());
34 setDerivedPointDominion(Nothing());
35− setDerivedWallet(Nothing());
35+ setInviteMasterTicketWallet(Nothing());
36 setGenerated(false);
36 setGenerated(false);
37 setIncomingPoints(Nothing());
37 setIncomingPoints(Nothing());
38 setInviteWallet(Nothing());
38 setInviteWallet(Nothing());
@@ -41,7 +41,7 @@ export default function useActivateFlowState() {
41 setDerivedPatp,
41 setDerivedPatp,
42 setDerivedPoint,
42 setDerivedPoint,
43 setDerivedPointDominion,
43 setDerivedPointDominion,
44− setDerivedWallet,
44+ setInviteMasterTicketWallet,
45 setGenerated,
45 setGenerated,
46 setIncomingPoints,
46 setIncomingPoints,
47 setInviteWallet,
47 setInviteWallet,
@@ -52,7 +52,7 @@ export default function useActivateFlowState() {
52 derivedPatp,
52 derivedPatp,
53 derivedPoint,
53 derivedPoint,
54 derivedPointDominion,
54 derivedPointDominion,
55− derivedWallet,
55+ inviteMasterTicketWallet,
56 generated,
56 generated,
57 incomingPoints,
57 incomingPoints,
58 inviteWallet,
58 inviteWallet,
@@ -62,7 +62,7 @@ export default function useActivateFlowState() {
62 setDerivedPatp,
62 setDerivedPatp,
63 setDerivedPoint,
63 setDerivedPoint,
64 setDerivedPointDominion,
64 setDerivedPointDominion,
65− setDerivedWallet,
65+ setInviteMasterTicketWallet,
66 setGenerated,
66 setGenerated,
67 setIncomingPoints,
67 setIncomingPoints,
68 setInviteWallet,
68 setInviteWallet,