use to fetch balances + lint
This commit is contained in:
parent
0a4c2a00c0
commit
31f0b22c49
|
@ -167,18 +167,20 @@ export default function AddTokenDialog({ open, onClose }) {
|
|||
</React.Fragment>
|
||||
) : tab === 'popular' ? (
|
||||
<List disablePadding>
|
||||
{popularTokens.filter(tokenInfo => tokenInfo.address).map((tokenInfo) => (
|
||||
<TokenListItem
|
||||
key={tokenInfo.address}
|
||||
tokenInfo={tokenInfo}
|
||||
existingAccount={(walletAccounts || []).find(
|
||||
(account) =>
|
||||
account.parsed.mint.toBase58() === tokenInfo.address,
|
||||
)}
|
||||
onSubmit={onSubmit}
|
||||
disabled={sending}
|
||||
/>
|
||||
))}
|
||||
{popularTokens
|
||||
.filter((tokenInfo) => tokenInfo.address)
|
||||
.map((tokenInfo) => (
|
||||
<TokenListItem
|
||||
key={tokenInfo.address}
|
||||
tokenInfo={tokenInfo}
|
||||
existingAccount={(walletAccounts || []).find(
|
||||
(account) =>
|
||||
account.parsed.mint.toBase58() === tokenInfo.address,
|
||||
)}
|
||||
onSubmit={onSubmit}
|
||||
disabled={sending}
|
||||
/>
|
||||
))}
|
||||
</List>
|
||||
) : tab === 'erc20' ? (
|
||||
<>
|
||||
|
@ -243,8 +245,7 @@ function TokenListItem({ tokenInfo, onSubmit, disabled, existingAccount }) {
|
|||
target="_blank"
|
||||
rel="noopener"
|
||||
href={
|
||||
`https://solscan.io/account/${tokenInfo.address}` +
|
||||
urlSuffix
|
||||
`https://solscan.io/account/${tokenInfo.address}` + urlSuffix
|
||||
}
|
||||
>
|
||||
{tokenInfo.name ?? abbreviateAddress(tokenInfo.address)}
|
||||
|
|
|
@ -62,6 +62,7 @@ import MergeAccountsDialog from './MergeAccountsDialog';
|
|||
import SwapButton from './SwapButton';
|
||||
import DnsIcon from '@material-ui/icons/Dns';
|
||||
import DomainsList from './DomainsList';
|
||||
import { useSolBalance, useMultipleBalanceInfo } from '../utils/tokens/rpc';
|
||||
|
||||
const balanceFormat = new Intl.NumberFormat(undefined, {
|
||||
minimumFractionDigits: 4,
|
||||
|
@ -106,6 +107,9 @@ function fairsIsLoaded(publicKeys) {
|
|||
export default function BalancesList() {
|
||||
const wallet = useWallet();
|
||||
const [publicKeys, loaded] = useWalletPublicKeys();
|
||||
const [solBalance] = useSolBalance(publicKeys[0]);
|
||||
const balancesInfo = useMultipleBalanceInfo(publicKeys?.slice(1));
|
||||
|
||||
const [showAddTokenDialog, setShowAddTokenDialog] = useState(false);
|
||||
const [showEditAccountNameDialog, setShowEditAccountNameDialog] = useState(
|
||||
false,
|
||||
|
@ -182,17 +186,21 @@ export default function BalancesList() {
|
|||
);
|
||||
const balanceListItemsMemo = useMemo(() => {
|
||||
return sortedPublicKeys.map((pk) => {
|
||||
return React.memo((props) => {
|
||||
return React.memo(() => {
|
||||
const balanceInfo = pk.equals(wallet.publicKey)
|
||||
? solBalance
|
||||
: balancesInfo?.find((e) => e.pubkey.equals(pk));
|
||||
return (
|
||||
<BalanceListItem
|
||||
key={pk.toString()}
|
||||
publicKey={pk}
|
||||
setUsdValue={setUsdValuesCallback}
|
||||
balanceInfo={balanceInfo}
|
||||
/>
|
||||
);
|
||||
});
|
||||
});
|
||||
}, [sortedPublicKeys, setUsdValuesCallback]);
|
||||
}, [sortedPublicKeys, setUsdValuesCallback, balancesInfo, solBalance]);
|
||||
|
||||
const iconSize = isExtensionWidth ? 'small' : 'medium';
|
||||
|
||||
|
@ -274,7 +282,9 @@ export default function BalancesList() {
|
|||
</IconButton>
|
||||
</Tooltip>
|
||||
<DomainsList open={showDomains} setOpen={setShowDomains} />
|
||||
{region.result && !region.result.isRestricted && <SwapButton size={iconSize} />}
|
||||
{region.result && !region.result.isRestricted && (
|
||||
<SwapButton size={iconSize} />
|
||||
)}
|
||||
<Tooltip title="Migrate Tokens" arrow>
|
||||
<IconButton
|
||||
size={iconSize}
|
||||
|
@ -384,9 +394,13 @@ const useStyles = makeStyles((theme) => ({
|
|||
},
|
||||
}));
|
||||
|
||||
export function BalanceListItem({ publicKey, expandable, setUsdValue }) {
|
||||
export function BalanceListItem({
|
||||
publicKey,
|
||||
expandable,
|
||||
setUsdValue,
|
||||
balanceInfo,
|
||||
}) {
|
||||
const wallet = useWallet();
|
||||
const balanceInfo = useBalanceInfo(publicKey);
|
||||
const classes = useStyles();
|
||||
const connection = useConnection();
|
||||
const [open, setOpen] = useState(false);
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
import React, { useState } from 'react';
|
||||
import DialogForm from './DialogForm';
|
||||
import { forgetWallet, normalizeMnemonic, useUnlockedMnemonicAndSeed } from '../utils/wallet-seed';
|
||||
import {
|
||||
forgetWallet,
|
||||
normalizeMnemonic,
|
||||
useUnlockedMnemonicAndSeed,
|
||||
} from '../utils/wallet-seed';
|
||||
import DialogTitle from '@material-ui/core/DialogTitle';
|
||||
import { DialogContentText } from '@material-ui/core';
|
||||
import DialogActions from '@material-ui/core/DialogActions';
|
||||
|
@ -36,8 +40,8 @@ export default function DeleteMnemonicDialog({ open, onClose }) {
|
|||
<br />
|
||||
<strong>
|
||||
To prevent loss of funds, please ensure you have the seed phrase
|
||||
and the private key for all current accounts. You can view it by selecting
|
||||
"Export Mnemonic" in the user menu.
|
||||
and the private key for all current accounts. You can view it by
|
||||
selecting "Export Mnemonic" in the user menu.
|
||||
</strong>
|
||||
</div>
|
||||
<TextField
|
||||
|
|
|
@ -193,7 +193,14 @@ const TransferDialog = ({
|
|||
color="primary"
|
||||
style={{ padding: 10 }}
|
||||
>
|
||||
{loading ? <LoadingIndicator height="10px" /> : 'Transfer'}
|
||||
{loading ? (
|
||||
<LoadingIndicator
|
||||
// @ts-ignore
|
||||
height="10px"
|
||||
/>
|
||||
) : (
|
||||
'Transfer'
|
||||
)}
|
||||
</Button>
|
||||
</div>
|
||||
</Paper>
|
||||
|
|
|
@ -69,7 +69,9 @@ export default function FtxPayDialog({ open, onClose }) {
|
|||
</DialogTitle>
|
||||
<DialogContent>
|
||||
<DialogContentText>
|
||||
Send funds to your Sollet wallet from an FTX account, where you can add funds using crypto on multiple blockchains, credit cards, and more.
|
||||
Send funds to your Sollet wallet from an FTX account, where you can
|
||||
add funds using crypto on multiple blockchains, credit cards, and
|
||||
more.
|
||||
</DialogContentText>
|
||||
<DialogContentText>
|
||||
If you don't have an FTX account, it may take a few moments to get up.
|
||||
|
@ -108,7 +110,12 @@ export default function FtxPayDialog({ open, onClose }) {
|
|||
urlSuffix
|
||||
}
|
||||
>
|
||||
{(isExtensionWidth ? '' : `${tokenInfo.name ?? abbreviateAddress(tokenInfo.address)} `) + tokenInfo.symbol}
|
||||
{(isExtensionWidth
|
||||
? ''
|
||||
: `${
|
||||
tokenInfo.name ??
|
||||
abbreviateAddress(tokenInfo.address)
|
||||
} `) + tokenInfo.symbol}
|
||||
</Link>
|
||||
</div>
|
||||
</MenuItem>
|
||||
|
|
|
@ -190,9 +190,9 @@ export default function MergeAccountsDialog({ open, onClose }) {
|
|||
</DialogContentText>
|
||||
<DialogContentText>
|
||||
If migrating fails during a period of high network load, you will
|
||||
not have lost your funds. Just recontinue the migration from where you
|
||||
left off. If you have a lot of accounts, migrating might take a
|
||||
while.
|
||||
not have lost your funds. Just recontinue the migration from where
|
||||
you left off. If you have a lot of accounts, migrating might take
|
||||
a while.
|
||||
</DialogContentText>
|
||||
<TextField
|
||||
label={`Please type "migrate" to confirm`}
|
||||
|
|
|
@ -117,22 +117,14 @@ function SwapButtonPopover({ size }) {
|
|||
}
|
||||
|
||||
class NotifyingProvider extends Provider {
|
||||
constructor(
|
||||
connection,
|
||||
wallet,
|
||||
sendTransaction,
|
||||
) {
|
||||
constructor(connection, wallet, sendTransaction) {
|
||||
super(connection, wallet, {
|
||||
commitment: 'recent',
|
||||
});
|
||||
this.sendTransaction = sendTransaction;
|
||||
}
|
||||
|
||||
async send(
|
||||
tx,
|
||||
signers,
|
||||
opts,
|
||||
) {
|
||||
async send(tx, signers, opts) {
|
||||
return new Promise((onSuccess, onError) => {
|
||||
this.sendTransaction(super.send(tx, signers, opts), {
|
||||
onSuccess,
|
||||
|
@ -141,10 +133,7 @@ class NotifyingProvider extends Provider {
|
|||
});
|
||||
}
|
||||
|
||||
async sendAll(
|
||||
txs,
|
||||
opts,
|
||||
) {
|
||||
async sendAll(txs, opts) {
|
||||
return new Promise(async (resolve, onError) => {
|
||||
let txSigs = [];
|
||||
for (const tx of txs) {
|
||||
|
|
|
@ -1,10 +1,17 @@
|
|||
import React, { useState } from 'react';
|
||||
|
||||
export default function TokenIcon({ mint, url, tokenName, size = 20, ...props }) {
|
||||
export default function TokenIcon({
|
||||
mint,
|
||||
url,
|
||||
tokenName,
|
||||
size = 20,
|
||||
...props
|
||||
}) {
|
||||
const [hasError, setHasError] = useState(false);
|
||||
|
||||
if (!url && mint === null) {
|
||||
url = 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/solana/info/logo.png';
|
||||
url =
|
||||
'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/solana/info/logo.png';
|
||||
}
|
||||
|
||||
if (hasError || !url) {
|
||||
|
|
|
@ -44,8 +44,7 @@ export default function TokenInfoDialog({
|
|||
<Typography variant="body2" className={classes.explorerLink}>
|
||||
<Link
|
||||
href={
|
||||
`https://solscan.io/account/${publicKey.toBase58()}`
|
||||
+ urlSuffix
|
||||
`https://solscan.io/account/${publicKey.toBase58()}` + urlSuffix
|
||||
}
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
|
|
|
@ -25,7 +25,11 @@ const DATA_LABELS = {
|
|||
authoritySeed: { label: 'Authority seed', address: false },
|
||||
authorityOwner: { label: 'Authority owner', address: true },
|
||||
newAuthorizedPubkey: { label: 'New authorized', address: true },
|
||||
stakeAuthorizationType: { label: 'Stake authorization type', address: false, transform: () => JSON.stringify },
|
||||
stakeAuthorizationType: {
|
||||
label: 'Stake authorization type',
|
||||
address: false,
|
||||
transform: () => JSON.stringify,
|
||||
},
|
||||
custodianPubkey: { label: 'Custodian', address: true },
|
||||
splitStakePubkey: { label: 'Split to', address: true },
|
||||
lamports: { label: 'Lamports', address: false },
|
||||
|
@ -54,7 +58,13 @@ export default function StakeInstruction({ instruction, onOpenAddress }) {
|
|||
<LabelValue
|
||||
key={key}
|
||||
label={label + ''}
|
||||
value={address ? value?.toBase58() : (transform ? transform(value) : value)}
|
||||
value={
|
||||
address
|
||||
? value?.toBase58()
|
||||
: transform
|
||||
? transform(value)
|
||||
: value
|
||||
}
|
||||
link={address}
|
||||
onClick={() => address && onOpenAddress(value?.toBase58())}
|
||||
/>
|
||||
|
|
|
@ -15,7 +15,11 @@ const TYPE_LABELS = {
|
|||
};
|
||||
|
||||
const DATA_LABELS = {
|
||||
amount: { label: 'Amount', address: false, transform: (amount) => amount.toString()},
|
||||
amount: {
|
||||
label: 'Amount',
|
||||
address: false,
|
||||
transform: (amount) => amount.toString(),
|
||||
},
|
||||
authorityType: { label: 'Authority type', address: false },
|
||||
currentAuthority: { label: 'Current authority', address: true },
|
||||
decimals: { label: 'Decimals', address: false },
|
||||
|
@ -66,7 +70,13 @@ export default function TokenInstruction({ instruction, onOpenAddress }) {
|
|||
<LabelValue
|
||||
key={key}
|
||||
label={label + ''}
|
||||
value={address ? getAddressValue(value) : transform ? transform(value) : value}
|
||||
value={
|
||||
address
|
||||
? getAddressValue(value)
|
||||
: transform
|
||||
? transform(value)
|
||||
: value
|
||||
}
|
||||
link={address}
|
||||
onClick={() => address && onOpenAddress(value?.toBase58())}
|
||||
/>
|
||||
|
|
|
@ -16,7 +16,12 @@ import LoadingIndicator from '../components/LoadingIndicator';
|
|||
import { BalanceListItem } from '../components/BalancesList.js';
|
||||
import Card from '@material-ui/core/Card';
|
||||
import CardContent from '@material-ui/core/CardContent';
|
||||
import { DialogActions, DialogContentText, DialogTitle, Typography } from '@material-ui/core';
|
||||
import {
|
||||
DialogActions,
|
||||
DialogContentText,
|
||||
DialogTitle,
|
||||
Typography,
|
||||
} from '@material-ui/core';
|
||||
import TextField from '@material-ui/core/TextField';
|
||||
import Checkbox from '@material-ui/core/Checkbox';
|
||||
import FormControl from '@material-ui/core/FormControl';
|
||||
|
@ -29,6 +34,7 @@ import { useCallAsync } from '../utils/notifications';
|
|||
import Link from '@material-ui/core/Link';
|
||||
import { validateMnemonic } from 'bip39';
|
||||
import DialogForm from '../components/DialogForm';
|
||||
import { useMultipleSolBalance } from '../utils/tokens/rpc';
|
||||
|
||||
export default function LoginPage() {
|
||||
const [restore, setRestore] = useState(false);
|
||||
|
@ -110,7 +116,7 @@ function SeedWordsForm({ mnemonicAndSeed, goForward }) {
|
|||
link.setAttribute('download', 'sollet.bak');
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
|
@ -140,9 +146,9 @@ function SeedWordsForm({ mnemonicAndSeed, goForward }) {
|
|||
<LoadingIndicator />
|
||||
)}
|
||||
<Typography paragraph>
|
||||
Your private keys are only stored on your current computer or device.
|
||||
You will need these words to restore your wallet if your browser's
|
||||
storage is cleared or your device is damaged or lost.
|
||||
Your private keys are only stored on your current computer or
|
||||
device. You will need these words to restore your wallet if your
|
||||
browser's storage is cleared or your device is damaged or lost.
|
||||
</Typography>
|
||||
<Typography paragraph>
|
||||
By default, sollet will use <code>m/44'/501'/0'/0'</code> as the
|
||||
|
@ -160,16 +166,25 @@ function SeedWordsForm({ mnemonicAndSeed, goForward }) {
|
|||
label="I have saved these words in a safe place."
|
||||
/>
|
||||
<Typography paragraph>
|
||||
<Button variant="contained" color="primary" style={{ marginTop: 20 }} onClick={() => {
|
||||
downloadMnemonic(mnemonicAndSeed?.mnemonic);
|
||||
setDownloaded(true);
|
||||
}}>
|
||||
Download Backup Mnemonic File (Required)
|
||||
</Button>
|
||||
<Button
|
||||
variant="contained"
|
||||
color="primary"
|
||||
style={{ marginTop: 20 }}
|
||||
onClick={() => {
|
||||
downloadMnemonic(mnemonicAndSeed?.mnemonic);
|
||||
setDownloaded(true);
|
||||
}}
|
||||
>
|
||||
Download Backup Mnemonic File (Required)
|
||||
</Button>
|
||||
</Typography>
|
||||
</CardContent>
|
||||
<CardActions style={{ justifyContent: 'flex-end' }}>
|
||||
<Button color="primary" disabled={!confirmed || !downloaded} onClick={() => setShowDialog(true)}>
|
||||
<Button
|
||||
color="primary"
|
||||
disabled={!confirmed || !downloaded}
|
||||
onClick={() => setShowDialog(true)}
|
||||
>
|
||||
Continue
|
||||
</Button>
|
||||
</CardActions>
|
||||
|
@ -204,7 +219,9 @@ function SeedWordsForm({ mnemonicAndSeed, goForward }) {
|
|||
<Button
|
||||
type="submit"
|
||||
color="secondary"
|
||||
disabled={normalizeMnemonic(seedCheck) !== mnemonicAndSeed?.mnemonic}
|
||||
disabled={
|
||||
normalizeMnemonic(seedCheck) !== mnemonicAndSeed?.mnemonic
|
||||
}
|
||||
>
|
||||
Continue
|
||||
</Button>
|
||||
|
@ -276,14 +293,14 @@ function LoginForm() {
|
|||
progressMessage: 'Unlocking wallet...',
|
||||
successMessage: 'Wallet unlocked',
|
||||
});
|
||||
}
|
||||
};
|
||||
const submitOnEnter = (e) => {
|
||||
if (e.code === "Enter" || e.code === "NumpadEnter") {
|
||||
if (e.code === 'Enter' || e.code === 'NumpadEnter') {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
submit();
|
||||
}
|
||||
}
|
||||
};
|
||||
const setPasswordOnChange = (e) => setPassword(e.target.value);
|
||||
const toggleStayLoggedIn = (e) => setStayLoggedIn(e.target.checked);
|
||||
|
||||
|
@ -306,10 +323,7 @@ function LoginForm() {
|
|||
/>
|
||||
<FormControlLabel
|
||||
control={
|
||||
<Checkbox
|
||||
checked={stayLoggedIn}
|
||||
onChange={toggleStayLoggedIn}
|
||||
/>
|
||||
<Checkbox checked={stayLoggedIn} onChange={toggleStayLoggedIn} />
|
||||
}
|
||||
label="Keep wallet unlocked"
|
||||
/>
|
||||
|
@ -333,7 +347,8 @@ function RestoreWalletForm({ goBack }) {
|
|||
const mnemonic = normalizeMnemonic(rawMnemonic);
|
||||
const isNextBtnEnabled =
|
||||
password === passwordConfirm && validateMnemonic(mnemonic);
|
||||
const displayInvalidMnemonic = validateMnemonic(mnemonic) === false && mnemonic.length > 0;
|
||||
const displayInvalidMnemonic =
|
||||
validateMnemonic(mnemonic) === false && mnemonic.length > 0;
|
||||
return (
|
||||
<>
|
||||
{next ? (
|
||||
|
@ -359,9 +374,10 @@ function RestoreWalletForm({ goBack }) {
|
|||
wallets can be optionally connected after a web wallet is created.
|
||||
</Typography>
|
||||
{displayInvalidMnemonic && (
|
||||
<Typography fontWeight="fontWeightBold" style={{ color: 'red' }}>
|
||||
Mnemonic validation failed. Please enter a valid BIP 39 seed phrase.
|
||||
</Typography>
|
||||
<Typography fontWeight="fontWeightBold" style={{ color: 'red' }}>
|
||||
Mnemonic validation failed. Please enter a valid BIP 39 seed
|
||||
phrase.
|
||||
</Typography>
|
||||
)}
|
||||
<TextField
|
||||
variant="outlined"
|
||||
|
@ -465,6 +481,10 @@ export function AccountsSelector({
|
|||
setDPathMenuItem,
|
||||
onClick,
|
||||
}) {
|
||||
const [balancesInfo] = useMultipleSolBalance(
|
||||
accounts.map((e) => e.publicKey),
|
||||
);
|
||||
|
||||
return (
|
||||
<CardContent>
|
||||
<div
|
||||
|
@ -502,7 +522,7 @@ export function AccountsSelector({
|
|||
</Select>
|
||||
</FormControl>
|
||||
</div>
|
||||
{accounts.map((acc) => {
|
||||
{accounts.map((acc, idx) => {
|
||||
return (
|
||||
<div onClick={onClick ? () => onClick(acc) : {}}>
|
||||
<BalanceListItem
|
||||
|
@ -510,6 +530,7 @@ export function AccountsSelector({
|
|||
onClick={onClick}
|
||||
publicKey={acc.publicKey}
|
||||
expandable={false}
|
||||
balanceInfo={balancesInfo ? balancesInfo[idx] : undefined}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
|
|
@ -11,7 +11,7 @@ export const CLUSTERS = [
|
|||
{
|
||||
name: 'mainnet-beta-backup',
|
||||
apiUrl: MAINNET_BACKUP_URL,
|
||||
label: 'Mainnet Beta Backup',
|
||||
label: 'Mainnet Beta Backup',
|
||||
clusterSlug: 'mainnet-beta',
|
||||
},
|
||||
{
|
||||
|
@ -31,26 +31,31 @@ export const CLUSTERS = [
|
|||
apiUrl: 'http://localhost:8899',
|
||||
label: null,
|
||||
clusterSlug: 'localnet',
|
||||
}
|
||||
},
|
||||
];
|
||||
|
||||
export function clusterForEndpoint(endpoint) {
|
||||
return getClusters().find(({ apiUrl }) => apiUrl === endpoint);
|
||||
}
|
||||
|
||||
const customClusterConfigKey = "customClusterConfig";
|
||||
const customClusterConfigKey = 'customClusterConfig';
|
||||
|
||||
export function addCustomCluster(name, apiUrl) {
|
||||
const stringifiedConfig = JSON.stringify({name: name, label: name, apiUrl: apiUrl, clusterSlug: null});
|
||||
const stringifiedConfig = JSON.stringify({
|
||||
name: name,
|
||||
label: name,
|
||||
apiUrl: apiUrl,
|
||||
clusterSlug: null,
|
||||
});
|
||||
localStorage.setItem(customClusterConfigKey, stringifiedConfig);
|
||||
}
|
||||
|
||||
export function customClusterExists() {
|
||||
return !!localStorage.getItem(customClusterConfigKey)
|
||||
return !!localStorage.getItem(customClusterConfigKey);
|
||||
}
|
||||
|
||||
export function getClusters() {
|
||||
const stringifiedConfig = localStorage.getItem(customClusterConfigKey);
|
||||
const config = stringifiedConfig ? JSON.parse(stringifiedConfig) : null;
|
||||
return config ? [...CLUSTERS, config] : CLUSTERS;
|
||||
return config ? [...CLUSTERS, config] : CLUSTERS;
|
||||
}
|
||||
|
|
|
@ -58,7 +58,9 @@ export function useIsProdNetwork() {
|
|||
if (!context) {
|
||||
throw new Error('Missing connection context');
|
||||
}
|
||||
return context.endpoint === MAINNET_URL || context.endpoint === MAINNET_BACKUP_URL;
|
||||
return (
|
||||
context.endpoint === MAINNET_URL || context.endpoint === MAINNET_BACKUP_URL
|
||||
);
|
||||
}
|
||||
|
||||
export function useSolanaExplorerUrlSuffix() {
|
||||
|
@ -131,5 +133,5 @@ export async function getMultipleSolanaAccounts(
|
|||
): Promise<
|
||||
Array<null | { publicKey: PublicKey; account: AccountInfo<Buffer> }>
|
||||
> {
|
||||
return anchor.utils.rpc.getMultipleAccounts(connection, publicKeys);
|
||||
return anchor.utils.rpc.getMultipleAccounts(connection, publicKeys);
|
||||
}
|
||||
|
|
|
@ -16,27 +16,8 @@ import {
|
|||
TOKEN_PROGRAM_ID,
|
||||
transferChecked,
|
||||
} from './instructions';
|
||||
import { ACCOUNT_LAYOUT, getOwnedAccountsFilters, MINT_LAYOUT } from './data';
|
||||
|
||||
export async function getOwnedTokenAccounts(connection, publicKey) {
|
||||
let filters = getOwnedAccountsFilters(publicKey);
|
||||
let resp = await connection.getProgramAccounts(
|
||||
TOKEN_PROGRAM_ID,
|
||||
{
|
||||
filters,
|
||||
},
|
||||
);
|
||||
return resp
|
||||
.map(({ pubkey, account: { data, executable, owner, lamports } }) => ({
|
||||
publicKey: new PublicKey(pubkey),
|
||||
accountInfo: {
|
||||
data,
|
||||
executable,
|
||||
owner: new PublicKey(owner),
|
||||
lamports,
|
||||
},
|
||||
}))
|
||||
}
|
||||
import { ACCOUNT_LAYOUT, MINT_LAYOUT } from './data';
|
||||
export * from './rpc';
|
||||
|
||||
export async function signAndSendTransaction(
|
||||
connection,
|
||||
|
|
|
@ -42,7 +42,10 @@ LAYOUT.addVariant(
|
|||
LAYOUT.addVariant(9, BufferLayout.struct([]), 'closeAccount');
|
||||
LAYOUT.addVariant(
|
||||
12,
|
||||
BufferLayout.struct([BufferLayout.nu64('amount'), BufferLayout.u8('decimals')]),
|
||||
BufferLayout.struct([
|
||||
BufferLayout.nu64('amount'),
|
||||
BufferLayout.u8('decimals'),
|
||||
]),
|
||||
'transferChecked',
|
||||
);
|
||||
|
||||
|
@ -96,7 +99,14 @@ export function initializeAccount({ account, mint, owner }) {
|
|||
});
|
||||
}
|
||||
|
||||
export function transferChecked({ source, mint, destination, amount, decimals, owner }) {
|
||||
export function transferChecked({
|
||||
source,
|
||||
mint,
|
||||
destination,
|
||||
amount,
|
||||
decimals,
|
||||
owner,
|
||||
}) {
|
||||
let keys = [
|
||||
{ pubkey: source, isSigner: false, isWritable: true },
|
||||
{ pubkey: mint, isSigner: false, isWritable: false },
|
||||
|
|
|
@ -268,8 +268,7 @@ const POPULAR_TOKENS = {
|
|||
tokenSymbol: 'SLRS',
|
||||
mintAddress: 'SLRSSpSLUTP7okbCUBYStWCo1vUgyt775faPqz8HUMr',
|
||||
tokenName: 'Solrise Finance',
|
||||
icon:
|
||||
'https://i.ibb.co/tqbTKTT/slrs-256.png',
|
||||
icon: 'https://i.ibb.co/tqbTKTT/slrs-256.png',
|
||||
},
|
||||
{
|
||||
tokenSymbol: 'SAMO',
|
||||
|
|
|
@ -0,0 +1,187 @@
|
|||
import { Connection, PublicKey, AccountInfo } from '@solana/web3.js';
|
||||
import { parseTokenAccountData, parseMintData } from './data';
|
||||
import { getTokenInfo, useTokenInfos } from './names';
|
||||
import { useConnection, useConnectionConfig } from '../connection';
|
||||
import { useAsyncData } from '../fetch-loop';
|
||||
import { useState, useEffect } from 'react';
|
||||
import tuple from 'immutable-tuple';
|
||||
|
||||
const TOKEN_PROGRAM_ID = new PublicKey(
|
||||
'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',
|
||||
);
|
||||
|
||||
export const getOwnedTokenAccounts = async (
|
||||
connection: Connection,
|
||||
publicKey: string,
|
||||
) => {
|
||||
const { value } = await connection.getTokenAccountsByOwner(
|
||||
new PublicKey(publicKey),
|
||||
{
|
||||
programId: TOKEN_PROGRAM_ID,
|
||||
},
|
||||
);
|
||||
return value.map(({ pubkey, account }) => ({
|
||||
publicKey: pubkey,
|
||||
accountInfo: account,
|
||||
}));
|
||||
};
|
||||
|
||||
export const useMultipleAccountsInfo = (
|
||||
publicKeys: PublicKey[] | null | undefined,
|
||||
) => {
|
||||
const connection = useConnection();
|
||||
const fn = async () => {
|
||||
if (!publicKeys) return;
|
||||
const result = await connection.getMultipleAccountsInfo(publicKeys);
|
||||
return result;
|
||||
};
|
||||
return useAsyncData(fn, tuple('useMultipleAccountsInfo', publicKeys?.length));
|
||||
};
|
||||
|
||||
export const useMultipleMintInfo = (
|
||||
accountInfo: (AccountInfo<Buffer> | null)[] | null | undefined,
|
||||
) => {
|
||||
const connection = useConnection();
|
||||
const fn = async () => {
|
||||
if (!accountInfo) return null;
|
||||
// Can't be null
|
||||
const keys = accountInfo.map((e) => new PublicKey(e!.data.slice(0, 32)));
|
||||
const result = await connection.getMultipleAccountsInfo(keys);
|
||||
return result;
|
||||
};
|
||||
return useAsyncData(fn, tuple('useMultipleMintInfo', accountInfo?.length));
|
||||
};
|
||||
|
||||
interface BalanceInfo {
|
||||
pubkey: PublicKey;
|
||||
amount: number;
|
||||
decimals: number;
|
||||
mint: PublicKey;
|
||||
owner: PublicKey | null;
|
||||
tokenName: string;
|
||||
tokenSymbol: string;
|
||||
tokenLogoUri: string | null;
|
||||
valid: boolean;
|
||||
}
|
||||
|
||||
export const useSolBalance = (publicKey: PublicKey) => {
|
||||
const connection = useConnection();
|
||||
|
||||
const fn = async () => {
|
||||
const balance = await connection.getBalance(publicKey);
|
||||
return {
|
||||
pubkey: publicKey,
|
||||
amount: balance,
|
||||
decimals: 9,
|
||||
mint: null,
|
||||
owner: publicKey,
|
||||
tokenName: 'SOL',
|
||||
tokenSymbol: 'SOL',
|
||||
valid: true,
|
||||
};
|
||||
};
|
||||
return useAsyncData(fn, tuple('useSolBalance', publicKey?.toBase58()));
|
||||
};
|
||||
|
||||
export const useMultipleSolBalance = (
|
||||
publicKeys: PublicKey[] | null | undefined,
|
||||
) => {
|
||||
const connection = useConnection();
|
||||
const fn = async () => {
|
||||
if (!publicKeys) return;
|
||||
const result = await connection.getMultipleAccountsInfo(publicKeys);
|
||||
|
||||
return result.map((e, idx) => {
|
||||
return {
|
||||
pubkey: publicKeys[idx],
|
||||
amount: e?.lamports || 0,
|
||||
decimals: 9,
|
||||
mint: null,
|
||||
owner: publicKeys[idx],
|
||||
tokenName: 'SOL',
|
||||
tokenSymbol: 'SOL',
|
||||
valid: true,
|
||||
};
|
||||
});
|
||||
};
|
||||
return useAsyncData(fn, tuple('useMultipleSolBalance', publicKeys?.length));
|
||||
};
|
||||
|
||||
export const useMultipleBalanceInfo = (
|
||||
publicKeys: PublicKey[] | null | undefined,
|
||||
) => {
|
||||
const { endpoint } = useConnectionConfig();
|
||||
const tokenInfos = useTokenInfos();
|
||||
const [accountsInfo, accountsInfoLoaded] = useMultipleAccountsInfo(
|
||||
publicKeys,
|
||||
);
|
||||
|
||||
const [mintsInfo, mintsInfoLoaded] = useMultipleMintInfo(accountsInfo);
|
||||
const [result, setResult] = useState<BalanceInfo[] | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
const _result: BalanceInfo[] = [];
|
||||
const fn = () => {
|
||||
if (!publicKeys) return;
|
||||
if (!accountsInfoLoaded || !mintsInfoLoaded) return;
|
||||
if (!mintsInfo || !accountsInfo) return;
|
||||
const len = accountsInfo.length;
|
||||
|
||||
for (let i = 0; i < len; i++) {
|
||||
const mintInfo = mintsInfo[i];
|
||||
const accountInfo = accountsInfo[i];
|
||||
|
||||
if (!mintInfo) continue;
|
||||
if (!accountInfo) continue;
|
||||
|
||||
if (accountInfo.owner.equals(TOKEN_PROGRAM_ID)) {
|
||||
const { mint, owner, amount } = parseTokenAccountData(
|
||||
accountInfo.data,
|
||||
);
|
||||
const { symbol, logoUri, name } = getTokenInfo(
|
||||
mint,
|
||||
endpoint,
|
||||
tokenInfos,
|
||||
);
|
||||
|
||||
try {
|
||||
let { decimals } = parseMintData(mintInfo.data);
|
||||
_result.push({
|
||||
pubkey: publicKeys[i],
|
||||
amount,
|
||||
decimals,
|
||||
mint,
|
||||
owner,
|
||||
tokenName: name,
|
||||
tokenSymbol: symbol,
|
||||
tokenLogoUri: logoUri,
|
||||
valid: true,
|
||||
});
|
||||
} catch (err) {
|
||||
_result.push({
|
||||
pubkey: publicKeys[i],
|
||||
amount,
|
||||
decimals: 0,
|
||||
mint,
|
||||
owner,
|
||||
tokenName: 'Invalid',
|
||||
tokenSymbol: 'INVALID',
|
||||
tokenLogoUri: null,
|
||||
valid: false,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
setResult(_result);
|
||||
};
|
||||
|
||||
fn();
|
||||
}, [
|
||||
accountsInfoLoaded,
|
||||
mintsInfoLoaded,
|
||||
accountsInfo?.length,
|
||||
mintsInfo?.length,
|
||||
]);
|
||||
|
||||
return result;
|
||||
};
|
|
@ -7,7 +7,7 @@ import { isExtension } from './utils';
|
|||
import { useEffect, useState } from 'react';
|
||||
|
||||
export function normalizeMnemonic(mnemonic) {
|
||||
return mnemonic.trim().split(/\s+/g).join(" ");
|
||||
return mnemonic.trim().split(/\s+/g).join(' ');
|
||||
}
|
||||
|
||||
export async function generateMnemonicAndSeed() {
|
||||
|
@ -32,11 +32,14 @@ async function getExtensionUnlockedMnemonic() {
|
|||
}
|
||||
|
||||
return new Promise((resolve) => {
|
||||
chrome.runtime.sendMessage({
|
||||
channel: 'sollet_extension_mnemonic_channel',
|
||||
method: 'get',
|
||||
}, resolve);
|
||||
})
|
||||
chrome.runtime.sendMessage(
|
||||
{
|
||||
channel: 'sollet_extension_mnemonic_channel',
|
||||
method: 'get',
|
||||
},
|
||||
resolve,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
const EMPTY_MNEMONIC = {
|
||||
|
@ -55,7 +58,7 @@ let unlockedMnemonicAndSeed = (async () => {
|
|||
}
|
||||
const stored = JSON.parse(
|
||||
(await getExtensionUnlockedMnemonic()) ||
|
||||
sessionStorage.getItem('unlocked') ||
|
||||
sessionStorage.getItem('unlocked') ||
|
||||
localStorage.getItem('unlocked') ||
|
||||
'null',
|
||||
);
|
||||
|
@ -77,13 +80,13 @@ export function getUnlockedMnemonicAndSeed() {
|
|||
// returns [mnemonic, loading]
|
||||
export function useUnlockedMnemonicAndSeed() {
|
||||
const [currentUnlockedMnemonic, setCurrentUnlockedMnemonic] = useState(null);
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
walletSeedChanged.addListener('change', setCurrentUnlockedMnemonic);
|
||||
unlockedMnemonicAndSeed.then(setCurrentUnlockedMnemonic);
|
||||
return () => {
|
||||
walletSeedChanged.removeListener('change', setCurrentUnlockedMnemonic);
|
||||
}
|
||||
};
|
||||
}, []);
|
||||
|
||||
return !currentUnlockedMnemonic
|
||||
|
|
|
@ -147,12 +147,9 @@ const WalletContext = React.createContext(null);
|
|||
|
||||
export function WalletProvider({ children }) {
|
||||
useListener(walletSeedChanged, 'change');
|
||||
const [{
|
||||
mnemonic,
|
||||
seed,
|
||||
importsEncryptionKey,
|
||||
derivationPath,
|
||||
}] = useUnlockedMnemonicAndSeed();
|
||||
const [
|
||||
{ mnemonic, seed, importsEncryptionKey, derivationPath },
|
||||
] = useUnlockedMnemonicAndSeed();
|
||||
const { enqueueSnackbar } = useSnackbar();
|
||||
const connection = useConnection();
|
||||
const [wallet, setWallet] = useState();
|
||||
|
|
315
yarn.lock
315
yarn.lock
|
@ -2,15 +2,6 @@
|
|||
# yarn lockfile v1
|
||||
|
||||
|
||||
"101@^1.0.0", "101@^1.2.0":
|
||||
version "1.6.3"
|
||||
resolved "https://registry.yarnpkg.com/101/-/101-1.6.3.tgz#9071196e60c47e4ce327075cf49c0ad79bd822fd"
|
||||
integrity sha512-4dmQ45yY0Dx24Qxp+zAsNLlMF6tteCyfVzgbulvSyC7tCyd3V8sW76sS0tHq8NpcbXfWTKasfyfzU1Kd86oKzw==
|
||||
dependencies:
|
||||
clone "^1.0.2"
|
||||
deep-eql "^0.1.3"
|
||||
keypather "^1.10.2"
|
||||
|
||||
"@babel/code-frame@7.10.4", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4":
|
||||
version "7.10.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
|
||||
|
@ -1247,7 +1238,7 @@
|
|||
dependencies:
|
||||
regenerator-runtime "^0.13.4"
|
||||
|
||||
"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7":
|
||||
"@babel/runtime@^7.10.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7":
|
||||
version "7.11.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736"
|
||||
integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==
|
||||
|
@ -1261,7 +1252,14 @@
|
|||
dependencies:
|
||||
regenerator-runtime "^0.13.4"
|
||||
|
||||
"@babel/runtime@^7.12.5", "@babel/runtime@^7.9.2":
|
||||
"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5":
|
||||
version "7.17.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2"
|
||||
integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==
|
||||
dependencies:
|
||||
regenerator-runtime "^0.13.4"
|
||||
|
||||
"@babel/runtime@^7.9.2":
|
||||
version "7.12.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e"
|
||||
integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==
|
||||
|
@ -2422,6 +2420,13 @@
|
|||
dependencies:
|
||||
buffer "~6.0.3"
|
||||
|
||||
"@solana/buffer-layout@^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz#75b1b11adc487234821c81dfae3119b73a5fd734"
|
||||
integrity sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ==
|
||||
dependencies:
|
||||
buffer "~6.0.3"
|
||||
|
||||
"@solana/spl-token-registry@^0.2.102":
|
||||
version "0.2.102"
|
||||
resolved "https://registry.yarnpkg.com/@solana/spl-token-registry/-/spl-token-registry-0.2.102.tgz#e313a098474bb8b1fab5af74fce2644a046dbf01"
|
||||
|
@ -2503,20 +2508,20 @@
|
|||
tweetnacl "^1.0.0"
|
||||
|
||||
"@solana/web3.js@^1.17.0":
|
||||
version "1.19.0"
|
||||
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.19.0.tgz#b4f0153844a137d03a23b03e478138c1deada232"
|
||||
integrity sha512-tZ+Bk0sD6xvyHas13eRTl0fOtWGHoKithNjIHHYeUbZWwdxOKdutfv14SuD1eqkBdoiQs3KFJvVUkj3M7zTVDg==
|
||||
version "1.37.0"
|
||||
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.37.0.tgz#167b5b5d4aedc151237d9230b6142da068b0af34"
|
||||
integrity sha512-O2iCcgkGdi2FXwVLztPIZHcBuZXdhbVLavMsG+RdEyFGzFD0tQN1rOJ+Xb5eaexjqtgcqRN+Fyg3wAhLcHJbiA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.12.5"
|
||||
"@ethersproject/sha2" "^5.5.0"
|
||||
"@solana/buffer-layout" "^4.0.0"
|
||||
bn.js "^5.0.0"
|
||||
borsh "^0.4.0"
|
||||
borsh "^0.7.0"
|
||||
bs58 "^4.0.1"
|
||||
buffer "6.0.1"
|
||||
buffer-layout "^1.2.0"
|
||||
crypto-hash "^1.2.2"
|
||||
cross-fetch "^3.1.4"
|
||||
jayson "^3.4.4"
|
||||
js-sha3 "^0.8.0"
|
||||
node-fetch "^2.6.1"
|
||||
rpc-websockets "^7.4.2"
|
||||
secp256k1 "^4.0.2"
|
||||
superstruct "^0.14.2"
|
||||
|
@ -2786,9 +2791,9 @@
|
|||
integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
|
||||
|
||||
"@types/connect@^3.4.33":
|
||||
version "3.4.33"
|
||||
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.33.tgz#31610c901eca573b8713c3330abc6e6b9f588546"
|
||||
integrity sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==
|
||||
version "3.4.35"
|
||||
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
|
||||
integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
|
@ -2811,9 +2816,9 @@
|
|||
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
|
||||
|
||||
"@types/express-serve-static-core@^4.17.9":
|
||||
version "4.17.13"
|
||||
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.13.tgz#d9af025e925fc8b089be37423b8d1eac781be084"
|
||||
integrity sha512-RgDi5a4nuzam073lRGKTUIaL3eF2+H7LJvJ8eUnCI0wA6SNjXc44DCmWNiTLs/AZ7QlsFWZiw/gTG3nSQGL0fA==
|
||||
version "4.17.28"
|
||||
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8"
|
||||
integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
"@types/qs" "*"
|
||||
|
@ -2882,9 +2887,9 @@
|
|||
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
|
||||
|
||||
"@types/lodash@^4.14.159":
|
||||
version "4.14.161"
|
||||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.161.tgz#a21ca0777dabc6e4f44f3d07f37b765f54188b18"
|
||||
integrity sha512-EP6O3Jkr7bXvZZSZYlsgt5DIjiGr0dXP1/jVEwVLTFgg0d+3lWVQkRavYVQszV7dYUwvg0B8R0MBDpcmXg7XIA==
|
||||
version "4.14.181"
|
||||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.181.tgz#d1d3740c379fda17ab175165ba04e2d03389385d"
|
||||
integrity sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==
|
||||
|
||||
"@types/minimatch@*":
|
||||
version "3.0.3"
|
||||
|
@ -2892,9 +2897,9 @@
|
|||
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
||||
|
||||
"@types/node@*":
|
||||
version "14.11.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256"
|
||||
integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA==
|
||||
version "17.0.23"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da"
|
||||
integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==
|
||||
|
||||
"@types/node@10.12.18":
|
||||
version "10.12.18"
|
||||
|
@ -2906,7 +2911,12 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a"
|
||||
integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==
|
||||
|
||||
"@types/node@^12.12.54", "@types/node@^12.12.6":
|
||||
"@types/node@^12.12.54":
|
||||
version "12.20.47"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.47.tgz#ca9237d51f2a2557419688511dab1c8daf475188"
|
||||
integrity sha512-BzcaRsnFuznzOItW1WpQrDHM7plAa7GIDMZ6b5pnMbkqEtM/6WCOhvZar39oeMQP79gwvFUWjjptE7/KGcNqFg==
|
||||
|
||||
"@types/node@^12.12.6":
|
||||
version "12.12.62"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.62.tgz#733923d73669188d35950253dd18a21570085d2b"
|
||||
integrity sha512-qAfo81CsD7yQIM9mVyh6B/U47li5g7cfpVQEDMfQeF8pSZVwzbhwU3crc0qG4DmpsebpJPR49AKOExQyJ05Cpg==
|
||||
|
@ -2949,14 +2959,14 @@
|
|||
integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==
|
||||
|
||||
"@types/qs@*":
|
||||
version "6.9.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b"
|
||||
integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==
|
||||
version "6.9.7"
|
||||
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
|
||||
integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
|
||||
|
||||
"@types/range-parser@*":
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
|
||||
integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
|
||||
integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
|
||||
|
||||
"@types/react-copy-to-clipboard@^5.0.1":
|
||||
version "5.0.1"
|
||||
|
@ -3059,6 +3069,13 @@
|
|||
"@types/webpack-sources" "*"
|
||||
source-map "^0.6.0"
|
||||
|
||||
"@types/ws@^7.4.4":
|
||||
version "7.4.7"
|
||||
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702"
|
||||
integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/yargs-parser@*":
|
||||
version "15.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
|
||||
|
@ -3669,18 +3686,6 @@ asn1@~0.2.3:
|
|||
dependencies:
|
||||
safer-buffer "~2.1.0"
|
||||
|
||||
assert-args@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/assert-args/-/assert-args-1.2.1.tgz#404103a1452a32fe77898811e54e590a8a9373bd"
|
||||
integrity sha1-QEEDoUUqMv53iYgR5U5ZCoqTc70=
|
||||
dependencies:
|
||||
"101" "^1.2.0"
|
||||
compound-subject "0.0.1"
|
||||
debug "^2.2.0"
|
||||
get-prototype-of "0.0.0"
|
||||
is-capitalized "^1.0.0"
|
||||
is-class "0.0.4"
|
||||
|
||||
assert-plus@1.0.0, assert-plus@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
||||
|
@ -3943,7 +3948,14 @@ balanced-match@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||
|
||||
base-x@^3.0.2, base-x@^3.0.8:
|
||||
base-x@^3.0.2:
|
||||
version "3.0.9"
|
||||
resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320"
|
||||
integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==
|
||||
dependencies:
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
base-x@^3.0.8:
|
||||
version "3.0.8"
|
||||
resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d"
|
||||
integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==
|
||||
|
@ -4075,21 +4087,26 @@ bn.js@4.11.6:
|
|||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
|
||||
integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU=
|
||||
|
||||
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0:
|
||||
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9:
|
||||
version "4.11.9"
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
|
||||
integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==
|
||||
|
||||
bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2:
|
||||
version "5.1.3"
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b"
|
||||
integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==
|
||||
bn.js@^4.4.0:
|
||||
version "4.12.0"
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
|
||||
integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
|
||||
|
||||
bn.js@^5.1.0, bn.js@^5.1.3, bn.js@^5.2.0:
|
||||
bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.3, bn.js@^5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
|
||||
integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
|
||||
|
||||
bn.js@^5.1.1, bn.js@^5.1.2:
|
||||
version "5.1.3"
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b"
|
||||
integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==
|
||||
|
||||
body-parser@1.19.0, body-parser@^1.16.0:
|
||||
version "1.19.0"
|
||||
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
|
||||
|
@ -4142,6 +4159,15 @@ borsh@^0.6.0:
|
|||
bs58 "^4.0.0"
|
||||
text-encoding-utf-8 "^1.0.2"
|
||||
|
||||
borsh@^0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a"
|
||||
integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==
|
||||
dependencies:
|
||||
bn.js "^5.2.0"
|
||||
bs58 "^4.0.0"
|
||||
text-encoding-utf-8 "^1.0.2"
|
||||
|
||||
brace-expansion@^1.1.7:
|
||||
version "1.1.11"
|
||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||
|
@ -4357,11 +4383,11 @@ buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0:
|
|||
ieee754 "^1.1.4"
|
||||
|
||||
bufferutil@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.1.tgz#3a177e8e5819a1243fe16b63a199951a7ad8d4a7"
|
||||
integrity sha512-xowrxvpxojqkagPcWRQVXZl0YXhRhAtBEIq3VoER1NH5Mw1n1o0ojdspp+GS2J//2gCVyrzQDApQ4unGF+QOoA==
|
||||
version "4.0.6"
|
||||
resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433"
|
||||
integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==
|
||||
dependencies:
|
||||
node-gyp-build "~3.7.0"
|
||||
node-gyp-build "^4.3.0"
|
||||
|
||||
builtin-modules@^3.1.0:
|
||||
version "3.1.0"
|
||||
|
@ -4745,11 +4771,6 @@ clone-response@^1.0.2:
|
|||
dependencies:
|
||||
mimic-response "^1.0.0"
|
||||
|
||||
clone@^1.0.2:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
|
||||
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
|
||||
|
||||
clsx@^1.0.4, clsx@^1.1.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
|
||||
|
@ -4871,11 +4892,6 @@ compose-function@3.0.3:
|
|||
dependencies:
|
||||
arity-n "^1.0.4"
|
||||
|
||||
compound-subject@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/compound-subject/-/compound-subject-0.0.1.tgz#271554698a15ae608b1dfcafd30b7ba1ea892c4b"
|
||||
integrity sha1-JxVUaYoVrmCLHfyv0wt7oeqJLEs=
|
||||
|
||||
compressible@~2.0.16:
|
||||
version "2.0.18"
|
||||
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
|
||||
|
@ -5525,13 +5541,6 @@ dedent@^0.7.0:
|
|||
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
|
||||
integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
|
||||
|
||||
deep-eql@^0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
|
||||
integrity sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=
|
||||
dependencies:
|
||||
type-detect "0.1.1"
|
||||
|
||||
deep-equal@^1.0.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
|
||||
|
@ -5609,6 +5618,11 @@ del@^4.1.1:
|
|||
pify "^4.0.1"
|
||||
rimraf "^2.6.3"
|
||||
|
||||
delay@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d"
|
||||
integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==
|
||||
|
||||
delayed-stream@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||
|
@ -5894,7 +5908,7 @@ electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.621:
|
|||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.628.tgz#be5a14ddf3a455de876274c84de0926439a287a7"
|
||||
integrity sha512-fmhO4YGo/kapy+xL9Eq/cZwDASaTHZu3psIFYo4yc+RY1LzbZr84xjKlDImDrlrmWhOxsrDi98nX097U/xK/cQ==
|
||||
|
||||
elliptic@6.5.3, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3:
|
||||
elliptic@6.5.3, elliptic@^6.4.0, elliptic@^6.5.3:
|
||||
version "6.5.3"
|
||||
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6"
|
||||
integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==
|
||||
|
@ -5907,7 +5921,7 @@ elliptic@6.5.3, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3:
|
|||
minimalistic-assert "^1.0.0"
|
||||
minimalistic-crypto-utils "^1.0.0"
|
||||
|
||||
elliptic@6.5.4:
|
||||
elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4:
|
||||
version "6.5.4"
|
||||
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
|
||||
integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
|
||||
|
@ -7169,11 +7183,6 @@ get-package-type@^0.1.0:
|
|||
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
|
||||
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
|
||||
|
||||
get-prototype-of@0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/get-prototype-of/-/get-prototype-of-0.0.0.tgz#98772bd10716d16deb4b322516c469efca28ac44"
|
||||
integrity sha1-mHcr0QcW0W3rSzIlFsRp78oorEQ=
|
||||
|
||||
get-stream@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
|
||||
|
@ -7978,11 +7987,6 @@ is-callable@^1.1.4, is-callable@^1.2.0, is-callable@^1.2.2:
|
|||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9"
|
||||
integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==
|
||||
|
||||
is-capitalized@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-capitalized/-/is-capitalized-1.0.0.tgz#4c8464b4d91d3e4eeb44889dd2cd8f1b0ac4c136"
|
||||
integrity sha1-TIRktNkdPk7rRIid0s2PGwrEwTY=
|
||||
|
||||
is-ci@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
|
||||
|
@ -7990,11 +7994,6 @@ is-ci@^2.0.0:
|
|||
dependencies:
|
||||
ci-info "^2.0.0"
|
||||
|
||||
is-class@0.0.4:
|
||||
version "0.0.4"
|
||||
resolved "https://registry.yarnpkg.com/is-class/-/is-class-0.0.4.tgz#e057451705bb34e39e3e33598c93a9837296b736"
|
||||
integrity sha1-4FdFFwW7NOOePjNZjJOpg3KWtzY=
|
||||
|
||||
is-color-stop@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
|
||||
|
@ -8295,6 +8294,11 @@ isobject@^3.0.0, isobject@^3.0.1:
|
|||
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
||||
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
|
||||
|
||||
isomorphic-ws@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc"
|
||||
integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==
|
||||
|
||||
isstream@~0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
||||
|
@ -8367,21 +8371,25 @@ jayson@^3.0.1:
|
|||
uuid "^3.4.0"
|
||||
|
||||
jayson@^3.4.4:
|
||||
version "3.6.2"
|
||||
resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.6.2.tgz#e551e25abf2efe333051a6ed88b10f08c5288f50"
|
||||
integrity sha512-hbl+x2xH6FT7nckw+Pq3lKOIJaMBKOgNJEVfvloDBWB8iSfzn/1U2igj1A5rplqNMFN/OnnaTNw8qPKVmoq83Q==
|
||||
version "3.6.6"
|
||||
resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.6.6.tgz#189984f624e398f831bd2be8e8c80eb3abf764a1"
|
||||
integrity sha512-f71uvrAWTtrwoww6MKcl9phQTC+56AopLyEenWvKVAIMz+q0oVGj6tenLZ7Z6UiPBkJtKLj4kt0tACllFQruGQ==
|
||||
dependencies:
|
||||
"@types/connect" "^3.4.33"
|
||||
"@types/express-serve-static-core" "^4.17.9"
|
||||
"@types/lodash" "^4.14.159"
|
||||
"@types/node" "^12.12.54"
|
||||
"@types/ws" "^7.4.4"
|
||||
JSONStream "^1.3.5"
|
||||
commander "^2.20.3"
|
||||
delay "^5.0.0"
|
||||
es6-promisify "^5.0.0"
|
||||
eyes "^0.1.8"
|
||||
isomorphic-ws "^4.0.1"
|
||||
json-stringify-safe "^5.0.1"
|
||||
lodash "^4.17.20"
|
||||
uuid "^3.4.0"
|
||||
uuid "^8.3.2"
|
||||
ws "^7.4.5"
|
||||
|
||||
jest-changed-files@^26.6.2:
|
||||
version "26.6.2"
|
||||
|
@ -9067,13 +9075,6 @@ keccak@^3.0.0, keccak@^3.0.1:
|
|||
node-addon-api "^2.0.0"
|
||||
node-gyp-build "^4.2.0"
|
||||
|
||||
keypather@^1.10.2:
|
||||
version "1.10.2"
|
||||
resolved "https://registry.yarnpkg.com/keypather/-/keypather-1.10.2.tgz#e0449632d4b3e516f21cc014ce7c5644fddce614"
|
||||
integrity sha1-4ESWMtSz5RbyHMAUznxWRP3c5hQ=
|
||||
dependencies:
|
||||
"101" "^1.0.0"
|
||||
|
||||
keyv@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
|
||||
|
@ -9338,11 +9339,16 @@ lodash.uniq@^4.5.0:
|
|||
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
||||
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
|
||||
|
||||
"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.5:
|
||||
"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.5:
|
||||
version "4.17.20"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
|
||||
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
|
||||
|
||||
lodash@^4.17.20:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
|
||||
loglevel@^1.6.8:
|
||||
version "1.7.1"
|
||||
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197"
|
||||
|
@ -9908,11 +9914,18 @@ node-addon-api@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32"
|
||||
integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==
|
||||
|
||||
node-fetch@2.6.1, node-fetch@^2.2.0, node-fetch@^2.6.1:
|
||||
node-fetch@2.6.1, node-fetch@^2.2.0:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
|
||||
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
|
||||
|
||||
node-fetch@^2.6.1:
|
||||
version "2.6.7"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
||||
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
||||
dependencies:
|
||||
whatwg-url "^5.0.0"
|
||||
|
||||
node-forge@0.9.0:
|
||||
version "0.9.0"
|
||||
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
|
||||
|
@ -9923,15 +9936,10 @@ node-forge@^0.10.0:
|
|||
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
|
||||
integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
|
||||
|
||||
node-gyp-build@^4.2.0:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739"
|
||||
integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==
|
||||
|
||||
node-gyp-build@~3.7.0:
|
||||
version "3.7.0"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-3.7.0.tgz#daa77a4f547b9aed3e2aac779eaf151afd60ec8d"
|
||||
integrity sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==
|
||||
node-gyp-build@^4.2.0, node-gyp-build@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3"
|
||||
integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==
|
||||
|
||||
node-int64@^0.4.0:
|
||||
version "0.4.0"
|
||||
|
@ -11949,7 +11957,12 @@ regenerator-runtime@^0.11.0:
|
|||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
|
||||
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
|
||||
|
||||
regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7:
|
||||
regenerator-runtime@^0.13.4:
|
||||
version "0.13.9"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
|
||||
integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
|
||||
|
||||
regenerator-runtime@^0.13.7:
|
||||
version "0.13.7"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
|
||||
integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
|
||||
|
@ -12294,16 +12307,15 @@ rollup@^1.31.1:
|
|||
acorn "^7.1.0"
|
||||
|
||||
rpc-websockets@^7.4.2:
|
||||
version "7.4.6"
|
||||
resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.4.6.tgz#a0053ad36e893774cdd0edb72ac577deaf34f247"
|
||||
integrity sha512-vDGdyJv858O5ZIc7glov8pQDdFztOqujA7iNyrfPxw87ajHT5s8WQU4MLNEG8pTR/xzqOn06dYH7kef2hijInw==
|
||||
version "7.4.17"
|
||||
resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.4.17.tgz#f38845dd96db0442bff9e15fba9df781beb44cc0"
|
||||
integrity sha512-eolVi/qlXS13viIUH9aqrde902wzSLAai0IjmOZSRefp5I3CSG/vCnD0c0fDSYCWuEyUoRL1BHQA8K1baEUyow==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.11.2"
|
||||
assert-args "^1.2.1"
|
||||
circular-json "^0.5.9"
|
||||
eventemitter3 "^4.0.7"
|
||||
uuid "^8.3.0"
|
||||
ws "^7.3.1"
|
||||
ws "^7.4.5"
|
||||
optionalDependencies:
|
||||
bufferutil "^4.0.1"
|
||||
utf-8-validate "^5.0.2"
|
||||
|
@ -12446,7 +12458,7 @@ scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1:
|
|||
resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312"
|
||||
integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==
|
||||
|
||||
secp256k1@^4.0.1, secp256k1@^4.0.2:
|
||||
secp256k1@^4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1"
|
||||
integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==
|
||||
|
@ -12455,6 +12467,15 @@ secp256k1@^4.0.1, secp256k1@^4.0.2:
|
|||
node-addon-api "^2.0.0"
|
||||
node-gyp-build "^4.2.0"
|
||||
|
||||
secp256k1@^4.0.2:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303"
|
||||
integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==
|
||||
dependencies:
|
||||
elliptic "^6.5.4"
|
||||
node-addon-api "^2.0.0"
|
||||
node-gyp-build "^4.2.0"
|
||||
|
||||
select-hose@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
|
||||
|
@ -13598,6 +13619,11 @@ tr46@^2.0.2:
|
|||
dependencies:
|
||||
punycode "^2.1.1"
|
||||
|
||||
tr46@~0.0.3:
|
||||
version "0.0.3"
|
||||
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
|
||||
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
|
||||
|
||||
traverse-chain@~0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1"
|
||||
|
@ -13683,11 +13709,6 @@ type-check@~0.3.2:
|
|||
dependencies:
|
||||
prelude-ls "~1.1.2"
|
||||
|
||||
type-detect@0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
|
||||
integrity sha1-C6XsKohWQORw6k6FBZcZANrFiCI=
|
||||
|
||||
type-detect@4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
|
||||
|
@ -13940,11 +13961,11 @@ use@^3.1.0:
|
|||
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
|
||||
|
||||
utf-8-validate@^5.0.2:
|
||||
version "5.0.2"
|
||||
resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.2.tgz#63cfbccd85dc1f2b66cf7a1d0eebc08ed056bfb3"
|
||||
integrity sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw==
|
||||
version "5.0.9"
|
||||
resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3"
|
||||
integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==
|
||||
dependencies:
|
||||
node-gyp-build "~3.7.0"
|
||||
node-gyp-build "^4.3.0"
|
||||
|
||||
utf8@3.0.0:
|
||||
version "3.0.0"
|
||||
|
@ -14008,10 +14029,10 @@ uuid@^3.3.2, uuid@^3.4.0:
|
|||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
||||
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
|
||||
|
||||
uuid@^8.3.0:
|
||||
version "8.3.1"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31"
|
||||
integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==
|
||||
uuid@^8.3.0, uuid@^8.3.2:
|
||||
version "8.3.2"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
||||
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
|
||||
|
||||
v8-compile-cache@^2.0.3:
|
||||
version "2.1.1"
|
||||
|
@ -14097,8 +14118,10 @@ watchpack@^1.7.4:
|
|||
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
|
||||
integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
|
||||
dependencies:
|
||||
chokidar "^3.4.1"
|
||||
graceful-fs "^4.1.2"
|
||||
neo-async "^2.5.0"
|
||||
watchpack-chokidar2 "^2.0.1"
|
||||
optionalDependencies:
|
||||
chokidar "^3.4.1"
|
||||
watchpack-chokidar2 "^2.0.1"
|
||||
|
@ -14349,6 +14372,11 @@ web3@^1.2.11:
|
|||
web3-shh "1.3.0"
|
||||
web3-utils "1.3.0"
|
||||
|
||||
webidl-conversions@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
|
||||
integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
|
||||
|
||||
webidl-conversions@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
|
||||
|
@ -14553,6 +14581,14 @@ whatwg-mimetype@^2.3.0:
|
|||
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
|
||||
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
|
||||
|
||||
whatwg-url@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
|
||||
integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
|
||||
dependencies:
|
||||
tr46 "~0.0.3"
|
||||
webidl-conversions "^3.0.0"
|
||||
|
||||
whatwg-url@^8.0.0:
|
||||
version "8.4.0"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837"
|
||||
|
@ -14819,7 +14855,7 @@ ws@^6.2.1:
|
|||
dependencies:
|
||||
async-limiter "~1.0.0"
|
||||
|
||||
ws@^7.0.0, ws@^7.3.1:
|
||||
ws@^7.0.0:
|
||||
version "7.3.1"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8"
|
||||
integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==
|
||||
|
@ -14829,6 +14865,11 @@ ws@^7.2.3:
|
|||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.1.tgz#a333be02696bd0e54cea0434e21dcc8a9ac294bb"
|
||||
integrity sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==
|
||||
|
||||
ws@^7.4.5:
|
||||
version "7.5.7"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67"
|
||||
integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==
|
||||
|
||||
xhr-request-promise@^0.1.2:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c"
|
||||
|
|
Loading…
Reference in New Issue