Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
5cb88d4
Fixes for governance
bhgames May 6, 2021
4b1d3cf
fixed firefox and safari svg compatibility (#109)
yamijuan May 7, 2021
cf8f124
Added MathWallet Provider (#110)
yamijuan May 8, 2021
3c66d0c
feat: improve style and filter duplicate tokens
bartosz-lipinski May 22, 2021
8a60c54
Governance: MVP UI (#115)
SebastianBor Jun 15, 2021
4c4d0bf
Governance: lazy account loading (#117)
SebastianBor Jun 17, 2021
988d1f7
Governance: actions UI feedback (#118)
SebastianBor Jun 19, 2021
dd22e82
Governance: support mints with large supply (#120)
SebastianBor Jun 25, 2021
3db7107
fix import case (#119)
mschneider Jun 25, 2021
ac8d8e2
Governance: Create mint instruction (#121)
SebastianBor Jun 25, 2021
e60ce1b
Governance: Create token governance (#122)
SebastianBor Jun 26, 2021
7f60b40
Governance: Change slots to timestamps (#123)
SebastianBor Jun 30, 2021
778265c
Governance: future proofing for v2 (#124)
SebastianBor Jul 1, 2021
b13bd0e
Governance: support program clones (#125)
SebastianBor Jul 2, 2021
cb89af5
fix: map governance errors using 500 offset and add token errors
SebastianBor Jul 3, 2021
a1b95ee
feat: add docs link
SebastianBor Jul 3, 2021
b07fb33
Governance: Update program structures (#126)
SebastianBor Jul 7, 2021
517756e
Governance: anchor IDL set-buffer instruction (#127)
SebastianBor Jul 9, 2021
fc5ceab
chore: remove realm and account from config (#128)
SebastianBor Jul 10, 2021
65bf7a2
Governance: Implement set governance config (#129)
SebastianBor Jul 10, 2021
7315293
fix: remove dead rpc endpoints from settings options (#131)
SebastianBor Jul 14, 2021
5166cb8
Governance: use mint decimals for min tokens to crate proposals in th…
SebastianBor Jul 15, 2021
b64d15e
feat: add app error banner (#133)
SebastianBor Jul 15, 2021
65516c5
feat: add an option to flag instruction as broken (#134)
SebastianBor Jul 16, 2021
ca78823
Governance: cleanup proposal components (#135)
SebastianBor Jul 17, 2021
0919c14
Governance: Instruction dry run (#136)
SebastianBor Jul 19, 2021
5d1906c
Governance: Upgrade buffer validation (#137)
SebastianBor Jul 20, 2021
43fd7dd
feat: validate instruction token account
SebastianBor Jul 20, 2021
2149df6
chore: move buffer validator to validators
SebastianBor Jul 20, 2021
b15429d
feat: validate token account for mintTo instruction
SebastianBor Jul 20, 2021
b3d6640
Add disclaimer
rmshea Jul 21, 2021
4c1cd0c
Governance: Implement different council and community tokens threshol…
SebastianBor Jul 21, 2021
94fa1ce
Governance: Capture realm authority and proposal mint supply (#139)
SebastianBor Jul 22, 2021
8e56e17
Governance: SetRealmAuthority (#140)
SebastianBor Jul 23, 2021
1b981f6
Governance: Format mints amounts for governances (#141)
SebastianBor Jul 23, 2021
8e86d41
fix: remove defunct connection endpoints (#130)
jordaaash Jul 26, 2021
3bab38b
Governance: Show vote results as progress (#146)
SebastianBor Jul 26, 2021
cd933a1
chore: upgrade @solana/web3 to 1.22.0 (#147)
SebastianBor Jul 27, 2021
7b34bb5
fix: use URL to compose explorer url (#148)
SebastianBor Jul 27, 2021
ec73ffd
feat: use vote threshold from proposal for voted on proposals (#149)
SebastianBor Jul 27, 2021
daee80a
fixes balances not showing up for eth tokens with more than 9 decimal…
yamijuan Jul 28, 2021
d9b22a5
Governance: Add countdown timer (#152)
SebastianBor Jul 28, 2021
652736b
Fixed issue with high integers supplies (#156)
yamijuan Jul 29, 2021
0936c54
Governance: Realm config (#157)
SebastianBor Jul 29, 2021
714bd98
Governance: Set config when creating realm (#160)
SebastianBor Jul 30, 2021
8bc6ad8
Governance: Realm configs and max vote weight fraction (#162)
SebastianBor Aug 1, 2021
7dade0e
Governance: Simplify realm actions (#164)
SebastianBor Aug 2, 2021
d2d172f
Governance: Add signatory list (#165)
SebastianBor Aug 2, 2021
876bad0
Governance: Min tokens to create governance (#166)
SebastianBor Aug 3, 2021
543398a
Governance: Remove mint account from input accounts (#167)
SebastianBor Aug 3, 2021
209c6a8
Governance: Add NotEnoughTokensToCreateGovernance error (#169)
SebastianBor Aug 3, 2021
a92214a
Common: fix less build #168
mschneider Aug 3, 2021
c4b7d17
Fixed wwt wrapped tokens not showing up balances on eth side (#171)
yamijuan Aug 3, 2021
e05ecbc
Added renbtc debug page (#172)
yamijuan Aug 4, 2021
d5dbc29
Governance: Do not show Yes/No buttons when voter record can't be loa…
SebastianBor Aug 5, 2021
59a776e
Governance: Optimise proposal accounts loading (#174)
SebastianBor Aug 6, 2021
b11588d
fix: use vote time expiration to show/hide relinquish vote button (#175)
SebastianBor Aug 6, 2021
ad55dfa
Governance: Constrain active proposals per wallet (#178)
SebastianBor Aug 12, 2021
ed065c2
Fixed mint key on native sol tokens and wwt eth, eth -> sol (#181)
yamijuan Aug 13, 2021
dfd9f88
Governance: Fix mint and transfer instruction decimals (#183)
SebastianBor Aug 13, 2021
137321e
Governance: Support mints with 0 supply (#184)
SebastianBor Aug 13, 2021
e0c9ca8
Governance: Increase tx timeout to 30s and show timeout msg (#187)
SebastianBor Aug 17, 2021
4f5f0db
Fixed cache getting program accounts instead of wallet ASA (#192)
yamijuan Aug 19, 2021
ac30e28
feat: update warning message
bartosz-lipinski Aug 28, 2021
327cadb
Exit only Mode (#229)
yamijuan Sep 11, 2021
f2d2eb0
Governance: Fix tx false positive timeouts (#320)
SebastianBor Sep 13, 2021
a698d76
Governance: Do not cap max tokens when mint supply is 0 (#321)
SebastianBor Sep 13, 2021
252636a
feat: change cname
bartosz-lipinski Sep 17, 2021
c749a79
Merge branch 'main' of https://github.com/solana-labs/oyster
bartosz-lipinski Sep 17, 2021
0de70a5
Fix endpoint / retry table (#356)
yamijuan Sep 20, 2021
443a86d
Merge branch 'main' of https://github.com/solana-labs/oyster
bartosz-lipinski Sep 20, 2021
cb7d002
bridge: remove assets table from homepage (#361)
evan-gray Sep 22, 2021
8495521
Governance: Add Raydium yield farming instructions (#188)
SebastianBor Sep 22, 2021
226ab64
Added ibbtc (#363)
yamijuan Sep 24, 2021
f422781
Governance: Voter weight addin api (#392)
SebastianBor Oct 13, 2021
974409f
Governance: Chat api (#393)
SebastianBor Oct 13, 2021
33abf1e
fix: use single onProgramAccountChange() subscription
SebastianBor Oct 13, 2021
c027899
Governance: Support deposit amount in api (#394)
SebastianBor Oct 13, 2021
0ae3a95
Governance: Fix max vote weight rounding error (#400)
armaniferrante Oct 18, 2021
561ca2b
chore: Add governance readme
SebastianBor Oct 18, 2021
0d5d134
Governance: Show token icons for token governance (#403)
SebastianBor Oct 21, 2021
bdc90a4
Fallback to identicon when token icon can't be loaded (#404)
SebastianBor Oct 21, 2021
d397faf
Governance: Use explicit fetch and notify for instructions (#405)
SebastianBor Oct 22, 2021
0e0b613
use wallet-adapter lib (#180)
jordaaash Oct 22, 2021
89cbb42
fix: fromSolana handles Big amounts (#413)
evan-gray Oct 27, 2021
3001611
Governance: Add minCommunityTokensToCreateGovernance in realmConfigFo…
abrzezinski94 Nov 20, 2021
abae88f
Governance: Use list for realm authorities (#429)
SebastianBor Nov 20, 2021
3783129
Governance: Use 1m tokens to create proposal when no supply (#430)
SebastianBor Nov 20, 2021
dbed72d
Fix minCommunityTokensToCreateGovernance for large thresholds (#432)
SebastianBor Nov 22, 2021
c10fcf6
Governance: Create treasury account (#439)
SebastianBor Nov 25, 2021
21c607a
Governance: update version slot (#449)
SebastianBor Dec 4, 2021
d2a555c
Governance: Fix getMintNaturalAmountFromDecimal for large threshold (…
sjillen Dec 7, 2021
0b8a2c1
fix/governance/governanceConfig allow minCommunityTokensToCreatePropo…
sjillen Dec 7, 2021
dc6a0f8
Governance: Update cut off slot
SebastianBor Dec 8, 2021
e3b494b
Merge pull request #1 from UXDProtocol/fix/governance/minTokenToCreat…
sjillen Dec 11, 2021
6b48d97
Governance: v2 api (#452)
SebastianBor Dec 13, 2021
c8d90ee
Merge branch 'solana-labs:main' into main
acamill Dec 14, 2021
4bbb314
Governance: Add getTokenOwnerRecordForRealm() api call (#456)
SebastianBor Dec 14, 2021
e3f6f71
update endpoint to use quiknode for mainnet
sjillen Dec 15, 2021
5d9994d
Merge branch 'main' of https://github.com/UXDProtocol/oyster
sjillen Dec 15, 2021
876a5cf
Merge branch 'solana-labs:main' into main
sjillen Dec 15, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
41 changes: 41 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,44 @@ Then, test that css transpiling is working:
## ⚠️ Warning

Any content produced by Solana, or developer resources that Solana provides, are for educational and inspiration purposes only. Solana does not encourage, induce or sanction the deployment of any such applications in violation of applicable laws or regulations.

# Disclaimer

All claims, content, designs, algorithms, estimates, roadmaps,
specifications, and performance measurements described in this project
are done with the Solana Foundation's ("SF") best efforts. It is up to
the reader to check and validate their accuracy and truthfulness.
Furthermore nothing in this project constitutes a solicitation for
investment.

Any content produced by SF or developer resources that SF provides, are
for educational and inspiration purposes only. SF does not encourage,
induce or sanction the deployment, integration or use of any such
applications (including the code comprising the Solana blockchain
protocol) in violation of applicable laws or regulations and hereby
prohibits any such deployment, integration or use. This includes use of
any such applications by the reader (a) in violation of export control
or sanctions laws of the United States or any other applicable
jurisdiction, (b) if the reader is located in or ordinarily resident in
a country or territory subject to comprehensive sanctions administered
by the U.S. Office of Foreign Assets Control (OFAC), or (c) if the
reader is or is working on behalf of a Specially Designated National
(SDN) or a person subject to similar blocking or denied party
prohibitions.

The reader should be aware that U.S. export control and sanctions laws
prohibit U.S. persons (and other persons that are subject to such laws)
from transacting with persons in certain countries and territories or
that are on the SDN list. As a project based primarily on open-source
software, it is possible that such sanctioned persons may nevertheless
bypass prohibitions, obtain the code comprising the Solana blockchain
protocol (or other project code or applications) and deploy, integrate,
or otherwise use it. Accordingly, there is a risk to individuals that
other persons using the Solana blockchain protocol may be sanctioned
persons and that transactions with such persons would be a violation of
U.S. export controls and sanctions law. This risk applies to
individuals, organizations, and other ecosystem participants that
deploy, integrate, or use the Solana blockchain protocol code directly
(e.g., as a node operator), and individuals that transact on the Solana
blockchain through light clients, third party interfaces, and/or wallet
software.
2 changes: 1 addition & 1 deletion packages/arweave-push/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"busboy": "^0.3.0",
"escape-html": "^1.0.3",
"arweave": "1.10.13",
"@solana/web3.js": "^1.5.0",
"@solana/web3.js": "^1.22.0",
"mime-types": "2.1.30",
"node-fetch": "2.6.1",
"coingecko-api": "1.0.10"
Expand Down
6 changes: 2 additions & 4 deletions packages/bridge-sdk/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,10 @@
},
"dependencies": {
"@babel/preset-typescript": "^7.13.0",
"@oyster/common": "0.0.1",
"@oyster/common": "0.0.2",
"@solana/spl-token": "0.0.13",
"@solana/spl-token-swap": "0.1.0",
"@solana/wallet-base": "0.0.1",
"@solana/wallet-ledger": "0.0.1",
"@solana/web3.js": "^1.5.0",
"@solana/web3.js": "^1.22.0",
"bignumber.js": "^9.0.1",
"bn.js": "^5.1.3",
"bs58": "^4.0.1",
Expand Down
25 changes: 16 additions & 9 deletions packages/bridge-sdk/src/bridge/transfer/fromSolana.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import { programIds, sendTransactionWithRetry, sleep } from '@oyster/common';
import { WalletAdapter } from '@solana/wallet-base';
import {
programIds,
sendTransactionWithRetry,
sleep,
WalletSigner,
} from '@oyster/common';
import { ethers } from 'ethers';
import { WormholeFactory } from '../../contracts/WormholeFactory';
import { bridgeAuthorityKey } from './../helpers';
import { Connection, PublicKey, SystemProgram } from '@solana/web3.js';
import { Token } from '@solana/spl-token';
import { Token, u64 } from '@solana/spl-token';
import { ProgressUpdate, TransferRequest } from './interface';
import BN from 'bn.js';
import { createLockAssetInstruction } from '../lock';
Expand All @@ -13,7 +17,7 @@ import { SolanaBridge } from '../../core';

export const fromSolana = async (
connection: Connection,
wallet: WalletAdapter,
wallet: WalletSigner,
request: TransferRequest,
provider: ethers.providers.Web3Provider,
setProgress: (update: ProgressUpdate) => void,
Expand Down Expand Up @@ -62,20 +66,23 @@ export const fromSolana = async (
return;
}

const amountBN = ethers.utils.parseUnits(
request.amount.toString(),
request.info.decimals || 0,
);
const amountBI = BigInt(amountBN.toString())

let group = 'Initiate transfer';
const programs = programIds();
const bridgeId = programs.wormhole.pubkey;
const authorityKey = await bridgeAuthorityKey(bridgeId);

const precision = Math.pow(10, request.info?.decimals || 0);
const amount = Math.floor(request.amount * precision);

let { ix: lock_ix, transferKey } = await createLockAssetInstruction(
authorityKey,
wallet.publicKey,
new PublicKey(request.info.address),
new PublicKey(request.info.mint),
new BN(amount),
new BN(amountBN.toString()),
request.to,
request.recipient,
{
Expand All @@ -93,7 +100,7 @@ export const fromSolana = async (
authorityKey,
wallet.publicKey,
[],
amount,
new u64(amountBI.toString(16), 16),
);

setProgress({
Expand Down
39 changes: 28 additions & 11 deletions packages/bridge-sdk/src/bridge/transfer/toSolana.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
TokenAccountParser,
ParsedAccount,
createAssociatedTokenAccountInstruction,
WalletSigner,
} from '@oyster/common';
import { ethers } from 'ethers';
import { ERC20Factory } from '../../contracts/ERC20Factory';
Expand All @@ -20,17 +21,21 @@ import {
} from '@solana/web3.js';
import { AccountInfo } from '@solana/spl-token';
import { TransferRequest, ProgressUpdate } from './interface';
import { WalletAdapter } from '@solana/wallet-base';
import { BigNumber } from 'bignumber.js';

export const toSolana = async (
connection: Connection,
wallet: WalletAdapter,
wallet: WalletSigner,
request: TransferRequest,
provider: ethers.providers.Web3Provider,
setProgress: (update: ProgressUpdate) => void,
) => {
if (!request.asset || !request.amount || !request.info) {
if (
!request.asset ||
!request.amount ||
!request.info ||
!request.info.address
) {
return;
}
const walletName = 'MetaMask';
Expand Down Expand Up @@ -68,21 +73,30 @@ export const toSolana = async (

const group = 'Initiate transfer';
try {
let mintKey: PublicKey;

const bridgeId = programIds().wormhole.pubkey;
const authority = await bridgeAuthorityKey(bridgeId);
const meta: AssetMeta = {
decimals: Math.min(request.info?.decimals, 9),
address: request.info?.assetAddress,
chain: request.from,
};
const mintKey = await wrappedAssetMintKey(bridgeId, authority, meta);
if (request.info.mint) {
mintKey = new PublicKey(request.info.mint);
} else {
mintKey = await wrappedAssetMintKey(bridgeId, authority, meta);
}

const recipientKey =
cache
.byParser(TokenAccountParser)
.map(key => {
let account = cache.get(key) as ParsedAccount<AccountInfo>;
if (account?.info.mint.toBase58() === mintKey.toBase58()) {
if (
account?.info.mint.toBase58() === mintKey.toBase58() &&
account?.info.owner.toBase58() === wallet?.publicKey?.toBase58()
) {
return key;
}

Expand Down Expand Up @@ -114,6 +128,7 @@ export const toSolana = async (

if (!accounts.array[0]) {
// create mint using wormhole instruction

instructions.push(
await createWrappedAssetInstruction(
meta,
Expand Down Expand Up @@ -164,14 +179,14 @@ export const toSolana = async (
},
// approves assets for transfer
approve: async (request: TransferRequest) => {
if (!request.asset) {
if (!request.info?.address) {
return;
}

const group = 'Approve assets';
try {
if (request.info?.allowance.lt(amountBN)) {
let e = ERC20Factory.connect(request.asset, signer);
let e = ERC20Factory.connect(request.info.address, signer);
setProgress({
message: `Waiting for ${walletName} approval`,
type: 'user',
Expand All @@ -180,7 +195,8 @@ export const toSolana = async (
});
let res = await e.approve(programIds().wormhole.bridge, amountBN);
setProgress({
message: 'Waiting for ETH transaction to be mined... (Up to few min.)',
message:
'Waiting for ETH transaction to be mined... (Up to few min.)',
type: 'wait',
group,
step: counter++,
Expand Down Expand Up @@ -216,7 +232,7 @@ export const toSolana = async (
lock: async (request: TransferRequest) => {
if (
!amountBN ||
!request.asset ||
!request.info?.address ||
!request.recipient ||
!request.to ||
!request.info
Expand All @@ -235,15 +251,16 @@ export const toSolana = async (
step: counter++,
});
let res = await wh.lockAssets(
request.asset,
request.info.address,
amountBN,
request.recipient,
request.to,
nonce,
false,
);
setProgress({
message: 'Waiting for ETH transaction to be mined... (Up to few min.)',
message:
'Waiting for ETH transaction to be mined... (Up to few min.)',
type: 'wait',
group,
step: counter++,
Expand Down
7 changes: 2 additions & 5 deletions packages/bridge/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,14 @@
"@ant-design/icons": "^4.4.0",
"@babel/preset-typescript": "^7.12.13",
"@craco/craco": "^5.7.0",
"@oyster/common": "0.0.1",
"@oyster/common": "0.0.2",
"@project-serum/serum": "^0.13.11",
"@project-serum/sol-wallet-adapter": "^0.1.4",
"@react-three/drei": "^3.8.0",
"@solana/spl-token": "0.0.13",
"@solana/spl-token-registry": "^0.2.0",
"@solana/spl-token-swap": "0.1.0",
"@solana/wallet-base": "0.0.1",
"@solana/wallet-ledger": "0.0.1",
"@solana/bridge-sdk": "0.0.1",
"@solana/web3.js": "^1.5.0",
"@solana/web3.js": "^1.22.0",
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.5.0",
"@testing-library/user-event": "^7.2.1",
Expand Down
2 changes: 1 addition & 1 deletion packages/bridge/public/CNAME
Original file line number Diff line number Diff line change
@@ -1 +1 @@
www.wormholebridge.com
v1.wormholebridge.com
2 changes: 1 addition & 1 deletion packages/bridge/public/home/main-logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 5 additions & 6 deletions packages/bridge/src/components/CurrentUserWalletBadge/index.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import React from 'react';

import { useWallet, WALLET_PROVIDERS } from '@oyster/common';
import { shortenAddress } from '@oyster/common';
import { shortenAddress, useWallet } from '@oyster/common';

export const CurrentUserWalletBadge = (props: { showDisconnect?: boolean }) => {
const { wallet, disconnect } = useWallet();
const { wallet, publicKey, disconnect } = useWallet();

if (!wallet || !wallet.publicKey) {
if (!wallet || !publicKey) {
return null;
}

Expand All @@ -17,10 +16,10 @@ export const CurrentUserWalletBadge = (props: { showDisconnect?: boolean }) => {
alt={'icon'}
width={20}
height={20}
src={WALLET_PROVIDERS.filter(p => p.name === 'Sollet')[0]?.icon}
src={wallet.icon}
style={{ marginRight: 8 }}
/>
{shortenAddress(`${wallet.publicKey}`)}
{shortenAddress(`${publicKey}`)}
{props.showDisconnect && (
<span className={'disconnect'} onClick={() => disconnect()}>
X
Expand Down
7 changes: 4 additions & 3 deletions packages/bridge/src/components/Input/style.less
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@
font-weight: normal;
font-size: 16px;
line-height: 21px;
color: @tungsten-40;
}
.input-chain{
margin-top: 13px;
Expand Down Expand Up @@ -151,7 +150,9 @@
padding: 0 36px 0 36px;
font-size: 32px;
line-height: 39px;
color: @tungsten-80;
::placeholder {
color: @tungsten-40;
}
height: 100%;
}
.input-select {
Expand Down Expand Up @@ -181,7 +182,7 @@
}
}

.dashed-input-container.right {
.dashed-input-container {
& > button.ant-btn:not(.ant-dropdown-trigger) {
text-transform: uppercase;
color: white;
Expand Down
7 changes: 4 additions & 3 deletions packages/bridge/src/components/Layout/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@ export const AppLayout = React.memo((props: any) => {
{props.children}
</Content>
<Footer>
<div className={'description-text'} style={{ color: '#2F506F' }}>

</div>
<div
className={'description-text'}
style={{ color: '#2F506F' }}
></div>
</Footer>
</Layout>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ export const RecentTransactionsTable = (props: {
showUserTransactions?: boolean;
tokenAccounts: TokenAccount[];
}) => {
const { loading: loadingTransfers, transfers } = useWormholeTransactions(props.tokenAccounts);
const { loading: loadingTransfers, transfers } = useWormholeTransactions(
props.tokenAccounts,
);
const { provider } = useEthereum();
const bridge = useBridge();

Expand Down Expand Up @@ -338,7 +340,6 @@ export const RecentTransactionsTable = (props: {
scrollToFirstRowOnChange: false,
x: 900,
}}

dataSource={transfers.sort((a, b) => b.date - a.date)}
columns={userColumns}
loading={loadingTransfers}
Expand Down
3 changes: 1 addition & 2 deletions packages/bridge/src/components/Settings/index.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import React from 'react';
import { Button, Select } from 'antd';
import { contexts } from '@oyster/common';
import { contexts, useWallet } from '@oyster/common';

const { useWallet, WALLET_PROVIDERS } = contexts.Wallet;
const { ENDPOINTS, useConnectionConfig } = contexts.Connection;

export const Settings = () => {
Expand Down
Loading