1import { crypto } from 'bitcoinjs-lib';
2import { ecdsaSign } from 'secp256k1';
3import Web3 from 'web3';
4import WalletConnect from '@walletconnect/client';
6import { WALLET_TYPES } from './constants';
7import { ledgerSignMessage } from './ledger';
8import { trezorSignMessage } from './trezor';
9import BridgeWallet from './types/BridgeWallet';
11const MESSAGE = 'Bridge Authentication Token';
13function signMessage(privateKey: Buffer) {
14 const msg = '\x19Ethereum Signed Message:\n' + MESSAGE.length + MESSAGE;
15 // #ecdsaSign requires a 32-byte buffer, hence sha256
16 const hashed = crypto.sha256(Buffer.from(msg));
17 const { signature } = ecdsaSign(Buffer.from(hashed), privateKey);
19 // add key recovery parameter
20 const ethSignature = new Uint8Array(65);
21 ethSignature.set(signature);
22 const v = (ethSignature[32] & 1) + 27;
28type MetamaskAuthTokenArgs = {
34type LedgerAuthTokenArgs = {
39type TrezorAuthTokenArgs = LedgerAuthTokenArgs;
41type WalletConnectAuthTokenArgs = {
43 connector: WalletConnect;
47type DefaultAuthTokenArgs = {
52type GetAuthTokenArgs =
53 | MetamaskAuthTokenArgs
56 | WalletConnectAuthTokenArgs
57 | DefaultAuthTokenArgs;
59const getMetamaskAuthToken = ({ address, web3 }: MetamaskAuthTokenArgs) => {
60 return web3.eth.personal.sign(MESSAGE, address, '');
63const getLedgerAuthToken = ({ walletHdPath }: LedgerAuthTokenArgs) => {
64 return ledgerSignMessage(MESSAGE, walletHdPath);
67const getTrezorAuthToken = ({ walletHdPath }: TrezorAuthTokenArgs) => {
68 return trezorSignMessage(MESSAGE, walletHdPath);
71const getWalletConnectAuthToken = ({
74}: WalletConnectAuthTokenArgs) => {
75 return connector.signPersonalMessage([MESSAGE, address]);
78const getDefaultAuthToken = ({ wallet }: DefaultAuthTokenArgs) => {
79 const signature = signMessage(wallet.privateKey);
81 const token = `0x${Buffer.from(signature).toString('hex')}`;
86export const getAuthToken = async ({
89}: GetAuthTokenArgs) => {
91 case WALLET_TYPES.METAMASK:
92 return getMetamaskAuthToken(args);
93 case WALLET_TYPES.LEDGER:
94 return getLedgerAuthToken(args);
95 case WALLET_TYPES.TREZOR:
96 return getTrezorAuthToken(args);
97 case WALLET_TYPES.WALLET_CONNECT:
98 return getWalletConnectAuthToken(args);
100 return getDefaultAuthToken(args);
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list