on master help sign in
Merge pull request #960 from urbit/hm/fix-personal-sign-issue

roller: personal sign issue

commitfe6d1db1023093889ec4aff556703fb5e43ac928 authortomholford <16504501+tomholford@users.noreply.github.com> dateFri 11 Feb 2022, 17:10 (5 years ago) parent7945ab7c510d9a
5 files changed+25−5
package-lock.json+5 package.json+1 src/lib/utils/roller.ts+13−1 src/store/lib/useControlledPointsStore.js+3−3 src/store/network.js+3−1
package-lock.json+5
@@ -4720,6 +4720,11 @@
47204720 "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.2.0.tgz",
47214721 "integrity": "sha512-SLyFyD7ElMhgKWPYedFGCT/ilcbGPgL5hXXYHxOM79Fs5fWi0zaUpt5oGqGMsOAAFaMa9/rbun0pokzPhEFz8A=="
47224722 },
4723+ "@metamask/detect-provider": {
4724+ "version": "1.2.0",
4725+ "resolved": "https://registry.npmjs.org/@metamask/detect-provider/-/detect-provider-1.2.0.tgz",
4726+ "integrity": "sha512-ocA76vt+8D0thgXZ7LxFPyqw3H7988qblgzddTDA6B8a/yU0uKV42QR/DhA+Jh11rJjxW0jKvwb5htA6krNZDQ=="
4727+ },
47234728 "@microsoft/fetch-event-source": {
47244729 "version": "2.0.1",
47254730 "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz",
package.json+1
@@ -18,6 +18,7 @@
1818 "@ethereumjs/tx": "^3.3.0",
1919 "@ledgerhq/hw-app-eth": "^6.5.0",
2020 "@ledgerhq/hw-transport-u2f": "^5.36.0-deprecated",
21+ "@metamask/detect-provider": "^1.2.0",
2122 "@reach/disclosure": "^0.15.0",
2223 "@reach/menu-button": "^0.15.1",
2324 "@reach/tabs": "^0.15.0",
src/lib/utils/roller.ts+13−1
@@ -66,7 +66,19 @@ export const generateHashAndSign = async (
6666) => {
6767 if (walletType === WALLET_TYPES.METAMASK) {
6868 const hash = await api.prepareForSigning(nonce, from, type, data);
69− const sig = await web3.eth.personal.sign(hash, wallet.address, '');
69+ let sig;
70+
71+ // same issue as seen in getMetamaskAuthToken
72+ if (window.ethereum) {
73+ sig = window.ethereum.request({
74+ method: 'personal_sign',
75+ params: [hash, wallet.address],
76+ from: wallet.address,
77+ });
78+ } else {
79+ sig = await web3.eth.personal.sign(hash, wallet.address, '');
80+ }
81+
7082 return sig;
7183 } else if (walletType === WALLET_TYPES.WALLET_CONNECT) {
7284 if (!connector || !connector.connected) {
src/store/lib/useControlledPointsStore.js+3−3
@@ -10,7 +10,7 @@ import { useNetwork } from '../network';
1010import { ONE_MINUTE } from 'lib/constants';
1111
1212export default function useControlledPointsStore() {
13− const { contracts } = useNetwork();
13+ const { contracts, web3 } = useNetwork();
1414 const { wallet } = useWallet();
1515 const { getPoints, getPointsDetails } = useRoller();
1616
@@ -19,7 +19,7 @@ export default function useControlledPointsStore() {
1919 const syncControlledPoints = useCallback(async () => {
2020 const _contracts = contracts.getOrElse(null);
2121 const _wallet = wallet.getOrElse(null);
22− if (!_contracts || !_wallet) {
22+ if (!web3 || Nothing.hasInstance(web3) || !_contracts || !_wallet) {
2323 return;
2424 }
2525
@@ -115,7 +115,7 @@ export default function useControlledPointsStore() {
115115 console.error('failed to fetch controlled points', error);
116116 _setControlledPoints(Just(Result.Error(JSON.stringify(error))));
117117 }
118− }, [contracts, wallet, getPoints, getPointsDetails]);
118+ }, [web3, contracts, wallet, getPoints, getPointsDetails]);
119119
120120 // sync controlled points whenever wallet or contracts changes
121121 useEffect(() => {
src/store/network.js+3−1
@@ -16,6 +16,7 @@ import { isDevelopment } from '../lib/flags';
1616import { Grid } from 'indigo-react';
1717import View from 'components/View';
1818import Blinky from 'components/Blinky';
19+import detectEthereumProvider from '@metamask/detect-provider';
1920
2021function _useNetwork(initialNetworkType = null) {
2122 const [networkType, setNetworkType] = useState(initialNetworkType);
@@ -26,7 +27,8 @@ function _useNetwork(initialNetworkType = null) {
2627
2728 useEffect(() => {
2829 (async () => {
29− if (window.ethereum) {
30+ const provider = await detectEthereumProvider();
31+ if (provider) {
3032 try {
3133 setMetamask(true);
3234 setNetworkType(chainIdToNetworkType(window.ethereum.chainId));