on 7e11fce help sign in
bridge/src/lib/WalletConnect.ts
47 lines 1.3 kB history raw
1import { ITxData } from '@walletconnect/types';
2import { Transaction } from '@ethereumjs/tx';
3import { stripHexPrefix } from './utils/address';
4import { FakeSignResult } from './txn';
6type SignWalletConnectTransactionArgs = {
7 from: string;
8 txn: Transaction;
9 txnSigner: (args: ITxData) => Promise<string>;
10 txnSender: (args: ITxData) => Promise<string>;
11};
13const walletConnectSignTransaction = async ({
14 from,
15 txn,
16 txnSigner,
17 txnSender,
18}: SignWalletConnectTransactionArgs) => {
19 let wcFormattedTx = txn.toJSON();
20 wcFormattedTx.from = from;
21 wcFormattedTx.gas = wcFormattedTx.gasLimit;
23 let signature;
24 try {
25 signature = await txnSigner(wcFormattedTx);
26 } catch (e) {
27 if (e.message === 'METHOD_NOT_SUPPORTED') {
28 console.log('connected wc wallet does not support tx signing.');
29 return new FakeSignResult(
30 wcFormattedTx,
31 walletConnectSendTransaction(txnSender)
32 );
33 } else {
34 throw e;
35 }
36 }
37 const serializedTx = Buffer.from(stripHexPrefix(signature), 'hex');
38 const signedTx = Transaction.fromSerializedTx(serializedTx);
40 return signedTx;
41};
43const walletConnectSendTransaction = (
44 txnSender: (tx: any) => Promise<string>
45) => (_web3, txn): Promise<string> => txnSender(txn);
47export { walletConnectSignTransaction };