Add support for the Sollet Extension (#68)

* init

* fix build

* upgrade sol-wallet-adapter

* upgrade sol-wallet-adapter
This commit is contained in:
jhl 2021-03-30 02:02:14 +08:00 committed by GitHub
parent 5b4487634e
commit 94ef37ad1a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 57 additions and 14 deletions

View File

@ -11,7 +11,7 @@
"@project-serum/awesome-serum": "1.0.1",
"@project-serum/pool": "0.2.2",
"@project-serum/serum": "^0.13.30",
"@project-serum/sol-wallet-adapter": "^0.1.1",
"@project-serum/sol-wallet-adapter": "^0.1.8",
"@solana/web3.js": "0.86.1",
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.3.2",

View File

@ -16,6 +16,7 @@ import {
LedgerWalletAdapter,
SolongWalletAdapter,
PhantomWalletAdapter,
SolletExtensionAdapter,
MathWalletAdapter,
} from '../wallet-adapters';
@ -27,6 +28,12 @@ export const WALLET_PROVIDERS = [
url: 'https://www.sollet.io',
icon: `${ASSET_URL}/sollet.svg`,
},
{
name: 'Sollet Extension',
url: 'https://www.sollet.io/extension',
icon: `${ASSET_URL}/sollet.svg`,
adapter: SolletExtensionAdapter as any,
},
{
name: 'Ledger',
url: 'https://www.ledger.com',
@ -66,24 +73,40 @@ export function WalletProvider({ children }) {
[providerUrl],
);
const wallet = useMemo(
function () {
if (provider) {
return new (provider.adapter || Wallet)(
let [wallet, setWallet] = useState<WalletAdapter|undefined>(undefined);
useEffect(() => {
if (provider) {
const updateWallet = () => {
// hack to also update wallet synchronously in case it disconnects
// eslint-disable-next-line react-hooks/exhaustive-deps
wallet = new (provider.adapter || Wallet)(
providerUrl,
endpoint,
) as WalletAdapter;
setWallet(wallet);
}
},
[provider, providerUrl, endpoint],
);
if (document.readyState !== 'complete') {
// wait to ensure that browser extensions are loaded
const listener = () => {
updateWallet();
window.removeEventListener('load', listener);
};
window.addEventListener('load', listener);
return () => window.removeEventListener('load', listener);
} else {
updateWallet();
}
}
}, [provider, providerUrl, endpoint]);
const [connected, setConnected] = useState(false);
useEffect(() => {
if (wallet) {
wallet.on('connect', () => {
if (wallet.publicKey) {
if (wallet?.publicKey) {
console.log('connected');
localStorage.removeItem('feeDiscountKey');
setConnected(true);
@ -118,7 +141,7 @@ export function WalletProvider({ children }) {
return () => {
setConnected(false);
if (wallet) {
if (wallet && wallet.connected) {
wallet.disconnect();
setConnected(false);
}

View File

@ -1,5 +1,6 @@
export * from './ledger';
export * from './solong';
export * from './phantom';
export * from './sollet-extension';
export * from './math';
export * from './types';

View File

@ -0,0 +1,19 @@
import Wallet from '@project-serum/sol-wallet-adapter';
import { notify } from '../../utils/notifications';
export function SolletExtensionAdapter(_, network) {
const sollet = (window as any).sollet;
if (sollet) {
return new Wallet(sollet, network);
}
return {
on: () => {},
connect: () => {
notify({
message: 'Sollet Extension Error',
description: 'Please install the Sollet Extension for Chrome',
});
}
}
}

View File

@ -1523,10 +1523,10 @@
bn.js "^5.1.2"
buffer-layout "^1.2.0"
"@project-serum/sol-wallet-adapter@^0.1.1":
version "0.1.5"
resolved "https://registry.yarnpkg.com/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.1.5.tgz#b8376addcb5e364f0621be639692d1c3b6d28622"
integrity sha512-g2ugWI3mZu/+aXWA/hpDRly0lTwjfTeOQXUs5DNuZCbxXRdNXe1LLfjzzoZEMpURavqO725UwBkKxC5acvgoMw==
"@project-serum/sol-wallet-adapter@^0.1.8":
version "0.1.8"
resolved "https://registry.yarnpkg.com/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.1.8.tgz#90c6c1da793d32ed4ba3c67c5702a5bc804ef197"
integrity sha512-lKMgp7bsKpkrtBtIaEjtGuUMke0GUqFUL39Z7cjqsQpTVhkU5Ez4zHyjhXqAEORRGLFbwx/+H6HLpwppxpUDMQ==
dependencies:
bs58 "^4.0.1"
eventemitter3 "^4.0.4"