@@ -66,6 +66,7 @@ function useSetKeys() {
6666 construct: _construct,
6767 broadcasting,
6868 confirmed,
69+ inputsLocked,
6970 bind,
7071 } = useEthereumTransaction(GAS_LIMITS.CONFIGURE_KEYS);
7172
@@ -76,13 +77,15 @@ function useSetKeys() {
7677 }
7778 }, [_point, confirmed, syncOwnedPoint]);
7879
79− const construct = useCallback(
80− async (manualSeed, isDiscontinuity) => {
80+ const getSeed = useCallback(
81+ async manualSeed => {
8182 const details = need.details(getDetails(_point));
8283 const networkRevision = parseInt(details.keyRevisionNumber, 10);
8384
84− let _seed = manualSeed;
85− if (!_seed) {
85+ if (manualSeed !== undefined) {
86+ setNdNetworkSeed(manualSeed);
87+ return manualSeed;
88+ } else {
8689 const networkSeed = await attemptNetworkSeedDerivation({
8790 urbitWallet,
8891 wallet,
@@ -91,7 +94,7 @@ function useSetKeys() {
9194 revision: networkRevision + 1,
9295 });
9396
94− _seed = networkSeed.matchWith({
97+ return networkSeed.matchWith({
9598 Nothing: () => {
9699 const ndSeed = randomHex(64);
97100 setNdNetworkSeed(ndSeed);
@@ -100,7 +103,14 @@ function useSetKeys() {
100103 Just: p => p.value,
101104 });
102105 }
103− const pair = deriveNetworkKeys(_seed);
106+ },
107+ [_point, authMnemonic, getDetails, urbitWallet, wallet]
108+ );
109+
110+ const construct = useCallback(
111+ async (manualSeed, isDiscontinuity) => {
112+ const seed = await getSeed(manualSeed);
113+ const pair = deriveNetworkKeys(seed);
104114
105115 const txn = azimuth.ecliptic.configureKeys(
106116 _contracts,
@@ -113,15 +123,7 @@ function useSetKeys() {
113123
114124 _construct(txn);
115125 },
116− [
117− _construct,
118− _contracts,
119− _point,
120− authMnemonic,
121− getDetails,
122− urbitWallet,
123− wallet,
124− ]
126+ [_construct, _contracts, _point, getSeed]
125127 );
126128
127129 return {
@@ -130,6 +132,7 @@ function useSetKeys() {
130132 broadcasting,
131133 confirmed,
132134 ndNetworkSeed,
135+ inputsLocked,
133136 bind,
134137 };
135138}
@@ -147,12 +150,24 @@ export default function AdminNetworkingKeys() {
147150 Just: ({ value: details }) => parseInt(details.keyRevisionNumber, 10) > 0,
148151 });
149152
153+ const {
154+ isDefaultState,
155+ construct,
156+ broadcasting,
157+ confirmed,
158+ inputsLocked,
159+ ndNetworkSeed,
160+ bind,
161+ } = useSetKeys();
162+
150163 const [showNetworkSeedInput, { data: showNetworkSeed }] = useCheckboxInput({
151164 name: 'shownetworkseed',
152165 label: 'Use Custom Network Seed',
153166 inverseLabel: 'Back to Derived Network Seed',
154167 initialValue: false,
168+ disabled: inputsLocked,
155169 });
170+
156171 const [
157172 networkSeedInput,
158173 { pass: validNetworkSeed, data: networkSeed },
@@ -161,6 +176,7 @@ export default function AdminNetworkingKeys() {
161176 name: 'networkseed',
162177 label: 'Network Seed (64 bytes)',
163178 length: 32, // 64 bytes
179+ disabled: inputsLocked,
164180 });
165181
166182 const [
@@ -169,19 +185,10 @@ export default function AdminNetworkingKeys() {
169185 ] = useCheckboxInput({
170186 name: 'discontinuity',
171187 label: 'Trigger New Continuity Era',
172− length: 64,
173188 initialValue: false,
189+ disabled: inputsLocked,
174190 });
175191
176− const {
177− isDefaultState,
178− construct,
179− broadcasting,
180− confirmed,
181− ndNetworkSeed,
182− bind,
183− } = useSetKeys();
184−
185192 useEffect(() => {
186193 if (
187194 (!showNetworkSeed || (showNetworkSeed && validNetworkSeed)) &&