@@ -5,6 +5,7 @@ import retry from 'async-retry';
5import { NETWORK_TYPES } from './network';
5import { NETWORK_TYPES } from './network';
6import { ledgerSignTransaction } from './ledger';
6import { ledgerSignTransaction } from './ledger';
7import { trezorSignTransaction } from './trezor';
7import { trezorSignTransaction } from './trezor';
8+import { metamaskSignTransaction, FakeMetamaskTransaction } from './metamask';
8import { WALLET_TYPES, addHexPrefix } from './wallet';
9import { WALLET_TYPES, addHexPrefix } from './wallet';
9import { CHECK_BLOCK_EVERY_MS } from './constants';
10import { CHECK_BLOCK_EVERY_MS } from './constants';
10import patp2dec from './patp2dec';
11import patp2dec from './patp2dec';
@@ -89,6 +90,8 @@ const signTransaction = async ({
89 await ledgerSignTransaction(stx, walletHdPath);
90 await ledgerSignTransaction(stx, walletHdPath);
90 } else if (walletType === WALLET_TYPES.TREZOR) {
91 } else if (walletType === WALLET_TYPES.TREZOR) {
91 await trezorSignTransaction(stx, walletHdPath);
92 await trezorSignTransaction(stx, walletHdPath);
93+ } else if (walletType === WALLET_TYPES.METAMASK) {
94+ return metamaskSignTransaction(stx, wallet.address);
93 stx.sign(wallet.privateKey);
96 stx.sign(wallet.privateKey);
@@ -97,6 +100,20 @@ const signTransaction = async ({
99const sendSignedTransaction = (web3, stx, doubtNonceError) => {
102const sendSignedTransaction = (web3, stx, doubtNonceError) => {
103+ // Handle fake metamask transaction
104+ if (stx instanceof FakeMetamaskTransaction) {
105+ const { ethereum } = window;
107+ method: 'eth_sendTransaction',
108+ params: [stx.txnData],
109+ from: stx.txnData.from,
111+ return new Promise((resolve, reject) =>
112+ ethereum.sendAsync(sendTxs, (err, data) =>
113+ err ? reject(err) : resolve(data.result)
100 const rawTx = hexify(stx.serialize());
117 const rawTx = hexify(stx.serialize());
102 return new Promise(async (resolve, reject) => {
119 return new Promise(async (resolve, reject) => {