-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: hub adapter and refactor wallets store #852
base: next
Are you sure you want to change the base?
Conversation
61cfe85
to
4e491e3
Compare
4e491e3
to
e1de00f
Compare
9a88ea9
to
6a94cdb
Compare
6a94cdb
to
f73e4e5
Compare
295f375
to
91a1844
Compare
@@ -13,7 +13,7 @@ export interface WidgetInfoContextInterface { | |||
details: ConnectedWallet[]; | |||
totalBalance: string; | |||
isLoading: boolean; | |||
refetch: (accounts: Wallet[], tokens: Token[]) => void; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this can be a breaking change since the hook is public. i don't know why we'd got a second param and didn't use in implementation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's needed in dApp. Please make sure to not break it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the heads up. I opened a PR there.
You're right, I'd removed the retry logic by mistake. I've added a retry in my last commit ( |
0879cd0
to
f9c51e7
Compare
Good catch. I fixed it in e99356d |
This should've been fixed in my latest commit e99356d |
I didn't check the code but I've conducted a quick test and identified a few issues:
I've attached some images for the related issues. Let me know if you need any further explanation. Confirm wallet incorrect wallet pre-selection: |
ab16aea
to
9355468
Compare
9355468
to
1f9f637
Compare
Summary
Add adapter to use hub providers alongside legacy providers.
This PR includes adding hub adapter in
/react/
and refactorwallets
store. From now on, we should be able to develop with our new wallet management system, Hub.How did you test this change?
You can test the changes by running
yarn dev:widget
.Details on how to review and what to test has been written in next section.
Notes for reviewers
Store
Assignee: @Ikari-Shinji-re
We had a separate store for
wallets
, in order to continue our work to migrate our stores to a single store and make current stores a slice of that, I completely removedwallets
store and made it an slice.The structure is mostly same, but there are one major difference. Previously, we had a
connectedWallets
which each of them had abalance
itself. To simplify the process, I added a separate_balances
and keep them separate fromconnectedWallet
.This change helps us do calculation much simpler (like calculating total balances) and treat this part differently, for example on connecting wallet it has two phases, one for adding the wallet to
connectedWallets
and another action for getting balances.Other notable changes
shiftedBy
in order to show a correct number to user. There were places likeMax
button needs to be updated which I did. I just mentioned this, maybe there are more places like this I'm unaware.Area of changes
Mostly
embedded/src/store
, you can take a look atembedded
as well and they will be updating usage ofwallets
store.Also removing
balance
fromrango-preset
is related to wallets store.AutoConnect
Assignee: @Ikari-Shinji-re
For having auto connect in
Hub
, in addition to wallet type/name, we neednamespace
as well. So I added a separate key in storage.I tried to reuse the legacy codes as much as I can,
eagerConnectHandler
,LastConnectedWalletsFromStorage
, same filenames are some effort to achieve this.LastConnectedWalletsFromStorage
is actually a shared interface to interact with both legacy and hub storage.Area of changes
You can start by reviewing
react/src/legacy/
, I tried to make the legacy code reusable by separating the logic intoautoConnect
,useAutoConnect
. Auto connect is calling inuseLegacyProvider
.And then you can start taking a look at
react/src/hub/
, I tried to use same filename and structure in legacy to make it more consistent and understandable.When you are reviewing this, you will notice there are some new functions like
LastConnectedWallets
which are actually a general solutions on legacy codes that needs to be reused in adapter.These files should be interested to you:
autoConnect,ts
constancts.ts
lastConnectedWallets.ts
useHubAdapter.ts
In Future
Adapter
__Assignee: @RyukTheCoder __
In previous PRs, we've prepared the filesystem structure for adding an adapter. In this PR, We've added a new
/react/src/hub
directory alongside/react/src/legacy
.The idea here is keeping the legacy interface to not needing to update clients (like embedded), to achieve this I created a new hook called
useProviders
which provides the legacy (ProviderContext
) at the end. It simply will load both hub and legacy providers and it's switch between them. For example you are going to useconnect
inembedded
, when it's going to run, it will check the request wallet is a legacy provider or hub provider, then it will call the method on that one.Each legacy and hub has a hook to implement the legacy interface (
ProviderContext
), they areuseLegacyProviders
anduseHubProviders
.For backward compatibility, there is an special namespace called
DISCOVER_MODE
. AlongsideDISCOVER_MODE
,network
will be set as well. here we are manually matching networks to namespaces. This will help us keep the legacy interface and have what hub needs as well. Explained some more details on next section.Other notable changes
namespace
is required. Since the legacy hasn't this concept, we only havenetwork
there. Adapter has a mapping betweenNetworks
and Hub'sNamespace
. Take a look atdiscoverNamespace
to see the mapping. That would be great if @RanGojo check this mapping as well.Network
can not be passed to wallet's instances (e.g.window.ethereum
) directly, for example for switching network, we need to convertNetwork
enum tochain id
. take a look attryConvertNamespaceNetworkToChainInfo
in this regard.Area of changes
Hub enabled in
widget/app/src/App.tsx
, and there are some update regarding toconnect
, it needs to haveDISCOVER_MODE
( e.gwidget/embedded/src/QueueManager.tsx
).Adapter has been written in
/react/src/hub
. Some parts of the changes is forauto connect
. It separately has been assigned to @Ikari-Shinji-re .Changes to
/react/src/legacy
are mostly for auto connect feature.Breaking Changes
connect
in/react
has changed. I updated the usage inembedded
.Phantom
__Assignee: @RyukTheCoder __
Phantom has been migrated to hub and also in addition to Solana namespace, EVM namespace has been added too.
Area of changes
You can take a look at
/provider-phantom
.Other changes
configs.isExperimentalEnabled
. I made itenable
for now.TODO
utils
from/core/mod.ts
In Future
suggestAndConnect
hasn't implemented in Hub adapter.canSwitchNetworkTo
,canEagerConnect
,getSigners
,getWalletInfo().supportedChains
,getInstance
fromlegacy
provider.Related PRs