on master help sign in
add authToken for custodial wallets
commite11c85b9282d4bd8c98078f33be3e5a66865cfbe authorLiam Fitzgerald <liam@urizen.co> dateFri 27 Mar 2020, 11:02 (7 years ago) parent24942f5
2 files changed+38
src/lib/authToken.js+14 src/store/wallet.js+24
src/lib/authToken.jsnew file+14
@@ -0,0 +1,14 @@
1+import * as secp256k1 from 'secp256k1';
2+
3+import { keccak256 } from './wallet';
4+
5+const MESSAGE = 'Bridge Authentication Token';
6+
7+export const getAuthToken = ({ wallet, walletType, walletHdPath, web3 }) => {
8+ const { signature } = secp256k1.sign(
9+ keccak256('\x19Ethereum Signed Message:\n' + MESSAGE.length + MESSAGE),
10+ wallet.privateKey
11+ );
12+
13+ return signature;
14+};
src/store/wallet.js+24
@@ -4,6 +4,7 @@ import React, {
44 useCallback,
55 useContext,
66 useState,
7+ useEffect,
78} from 'react';
89import { Just, Nothing } from 'folktale/maybe';
910import { includes } from 'lodash';
@@ -14,8 +15,11 @@ import {
1415 addressFromSecp256k1Public,
1516 walletFromMnemonic,
1617} from 'lib/wallet';
18+import { getAuthToken } from 'lib/authToken';
1719import { BRIDGE_ERROR } from 'lib/error';
1820
21+import { useNetwork } from 'store/network';
22+
1923export const WalletContext = createContext(null);
2024
2125const DEFAULT_WALLET_TYPE = WALLET_TYPES.TICKET;
@@ -46,6 +50,26 @@ function _useWallet(initialWallet = Nothing(), initialMnemonic = Nothing()) {
4650 const [networkSeed, setNetworkSeed] = useState(Nothing());
4751 const [networkRevision, setNetworkRevision] = useState(Nothing());
4852
53+ const [authToken, setAuthToken] = useState(Nothing());
54+
55+ const { web3 } = useNetwork();
56+
57+ useEffect(() => {
58+ if (!Just.hasInstance(wallet) || !Just.hasInstance(web3)) {
59+ return;
60+ }
61+ const _wallet = wallet.value;
62+ const _web3 = web3.value;
63+ const token = getAuthToken({
64+ wallet: _wallet,
65+ walletType,
66+ walletHdPath,
67+ web3: _web3,
68+ });
69+
70+ setAuthToken(token);
71+ }, [wallet, walletType, walletHdPath, web3]);
72+
4973 const setWalletType = useCallback(
5074 walletType => {
5175 if (!includes(WALLET_TYPES, walletType)) {