@@ -5,6 +5,7 @@ import retry from 'async-retry';
55import { NETWORK_TYPES } from './network';
66import { ledgerSignTransaction } from './ledger';
77import { trezorSignTransaction } from './trezor';
8+import { metamaskSignTransaction, FakeMetamaskTransaction } from './metamask';
89import { WALLET_TYPES, addHexPrefix } from './wallet';
910import { CHECK_BLOCK_EVERY_MS } from './constants';
1011import patp2dec from './patp2dec';
@@ -89,6 +90,8 @@ const signTransaction = async ({
8990 await ledgerSignTransaction(stx, walletHdPath);
9091 } else if (walletType === WALLET_TYPES.TREZOR) {
9192 await trezorSignTransaction(stx, walletHdPath);
93+ } else if (walletType === WALLET_TYPES.METAMASK) {
94+ return metamaskSignTransaction(stx, wallet.address);
9295 } else {
9396 stx.sign(wallet.privateKey);
9497 }
@@ -97,6 +100,20 @@ const signTransaction = async ({
97100};
98101
99102const sendSignedTransaction = (web3, stx, doubtNonceError) => {
103+ // Handle fake metamask transaction
104+ if (stx instanceof FakeMetamaskTransaction) {
105+ const { ethereum } = window;
106+ const sendTxs = {
107+ method: 'eth_sendTransaction',
108+ params: [stx.txnData],
109+ from: stx.txnData.from,
110+ };
111+ return new Promise((resolve, reject) =>
112+ ethereum.sendAsync(sendTxs, (err, data) =>
113+ err ? reject(err) : resolve(data.result)
114+ )
115+ );
116+ }
100117 const rawTx = hexify(stx.serialize());
101118
102119 return new Promise(async (resolve, reject) => {