Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export const AccountDetails = ({
removeCredential,
credentials,
setCredential,
setCurrentWallet,
updateCurrentWallet,
keyAgentName,
} = useVault()

Expand All @@ -53,7 +53,7 @@ export const AccountDetails = ({
) {
removeCredential(account?.credentialName)
setCredential(serializedList[0])
setCurrentWallet({
updateCurrentWallet({
keyAgentName,
credentialName: serializedList[0]?.credentialName,
currentAccountIndex:
Expand Down
2 changes: 2 additions & 0 deletions packages/features/src/account-management/index.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ const accounts: SingleCredentialState[] = [
address: "B62qjzAXN9NkX8K6JfGzYz4qVQoMrkL4uJ3FgkFjVZd4W5X5cQFQkCG",
encryptedPrivateKeyBytes: new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
},
lastSelected: undefined,
},
{
credentialName: "Second",
Expand All @@ -40,6 +41,7 @@ const accounts: SingleCredentialState[] = [
address: "B62qjzAXN9NkX8K6JfGzYz4qVQoMrkL4uJ3FgkFjVZd4W5X5cQFQkCF",
encryptedPrivateKeyBytes: new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 11]),
},
lastSelected: undefined,
},
]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { AccountManagementView } from "../views/account-management"
export const AccountManagementRoute = () => {
const navigate = useNavigate()
const {
setCurrentWallet,
updateCurrentWallet,
setCredential,
keyAgentName,
credentials,
Expand All @@ -23,7 +23,7 @@ export const AccountManagementRoute = () => {
const selectAccount = (account: SingleCredentialState) => {
setSelectedAccount(account)
setCredential(account)
setCurrentWallet({
updateCurrentWallet({
keyAgentName,
credentialName: account?.credentialName,
currentAccountIndex: account?.credential?.accountIndex ?? 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export const EditAccountRoute = () => {
credentials,
setCredential,
removeCredential,
setCurrentWallet,
updateCurrentWallet,
keyAgentName,
} = useVault()
const { t } = useTranslation()
Expand Down Expand Up @@ -45,7 +45,7 @@ export const EditAccountRoute = () => {
removeCredential(editingAccount.credentialName)
setEditingAccount(updatedAccount)
setCredential(updatedAccount)
setCurrentWallet({
updateCurrentWallet({
keyAgentName,
credentialName: updatedAccount?.credentialName,
currentAccountIndex: updatedAccount?.credential?.accountIndex ?? 0,
Expand Down
2 changes: 2 additions & 0 deletions packages/vault/src/credentials/credentialsState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ export type SingleCredentialState = {
credentialName: CredentialName
keyAgentName: KeyAgentName
credential: StoredCredential
lastSelected: number | undefined
}

export const initialCredentialState: SingleCredentialState = {
credentialName: "",
keyAgentName: "",
credential: undefined,
lastSelected: undefined,
}

export type CredentialStore = {
Expand Down
6 changes: 3 additions & 3 deletions packages/vault/src/credentials/credentialsStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ export const credentialSlice: StateCreator<CredentialStore> = (set, get) => ({
}),
)
},
setCredential: (credentialState) => {
const { credentialName } = credentialState
setCredential: (singleCredentialState) => {
const { credentialName } = singleCredentialState
set(
produce((state) => {
state.credentials[credentialName] = credentialState
state.credentials[credentialName] = singleCredentialState
}),
)
},
Expand Down
4 changes: 2 additions & 2 deletions packages/vault/src/vault/utils/derive-account.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export async function deriveAccountHelper(get: any, credentialName: string) {
setKnownAccounts,
addAccount,
getNetworkId,
setCurrentWallet,
updateCurrentWallet,
setCredential,
credentials,
} = get()
Expand Down Expand Up @@ -52,7 +52,7 @@ export async function deriveAccountHelper(get: any, credentialName: string) {
}

setCredential(singleCredentialState)
setCurrentWallet({
updateCurrentWallet({
keyAgentName,
credentialName,
currentAccountIndex: 0,
Expand Down
4 changes: 2 additions & 2 deletions packages/vault/src/vault/utils/restore-wallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export async function restoreWalletHelper(
initialiseKeyAgent,
restoreKeyAgent,
setCredential,
setCurrentWallet,
updateCurrentWallet,
_syncWallet,
ensureAccount,
setKnownAccounts,
Expand Down Expand Up @@ -58,7 +58,7 @@ export async function restoreWalletHelper(
// TODO: set the current network info, restore and create wallet
// should take some providerConfig object
setCredential(singleCredentialState)
setCurrentWallet({
updateCurrentWallet({
keyAgentName,
credentialName,
currentAccountIndex: derivedCredential.accountIndex,
Expand Down
22 changes: 22 additions & 0 deletions packages/vault/src/vault/utils/update-current-wallet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import type { SingleCredentialState } from "../../credentials"
import { WalletError } from "../../lib/Errors"
import type { CurrentWalletPayload } from "../vaultState"

export async function updateCurrentWalletHelper(
get: any,
payload: CurrentWalletPayload,
) {
const { credentials, _setCurrentWallet, setCredential, getCredential } = get()
const credential = getCredential(payload.credentialName)
if (!credential.credential?.address) {
throw new WalletError("Invalid current wallet or address")
}
const latestSelected = (
Object.values(credentials) as SingleCredentialState[]
).reduce((a, c) => Math.max(c.lastSelected ?? 0, a), 0)
setCredential({
...credential,
lastSelected: latestSelected + 1,
})
_setCurrentWallet(payload)
}
Empty file.
5 changes: 3 additions & 2 deletions packages/vault/src/vault/vaultState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export type CurrentWallet = {
transactions: Record<string, Tx[]> // string here is token ticker
}

type CurrentWalletPayload = {
export type CurrentWalletPayload = {
keyAgentName: string
credentialName: string
currentAccountIndex: number
Expand All @@ -59,7 +59,8 @@ export type GlobalVaultActions = {
setChain: (chain: Network) => void
setKnownAccounts: (address: string) => void
getCurrentWallet: () => CurrentWallet
setCurrentWallet: (payload: CurrentWalletPayload) => void
updateCurrentWallet: (payload: CurrentWalletPayload) => void
_setCurrentWallet: (payload: CurrentWalletPayload) => void
_syncAccountInfo: (
providerConfig: ProviderConfig,
publicKey: ChainAddress,
Expand Down
6 changes: 5 additions & 1 deletion packages/vault/src/vault/vaultStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import {
syncWalletHelper,
} from "./utils"
import { deriveAccountHelper } from "./utils/derive-account"
import { updateCurrentWalletHelper } from "./utils/update-current-wallet"
import type { GlobalVaultState, GlobalVaultStore } from "./vaultState"

const defaultGlobalVaultState: GlobalVaultState = {
Expand Down Expand Up @@ -79,8 +80,11 @@ export const useVault = create<
}),
)
},
updateCurrentWallet(payload) {
return updateCurrentWalletHelper(get, payload)
},
// TODO: create a new store for wallet?
setCurrentWallet(payload) {
_setCurrentWallet(payload) {
return set(
produce((state) => {
state.keyAgentName = payload.keyAgentName
Expand Down
6 changes: 3 additions & 3 deletions packages/web-provider/src/vault-service/vault-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ export const createVaultService = (): IVaultService => {
await rehydrate()
const store = useVault.getState()
const credentials = store.credentials
const addresses = Object.values(credentials).map(
(cred) => cred?.credential?.address,
)
const addresses = Object.values(credentials)
.sort((a, b) => (b.lastSelected ?? 0) - (a.lastSelected ?? 0))
.map((cred) => cred?.credential?.address)
return addresses.filter((address) => address !== undefined) as string[]
}
const isLocked = async () => {
Expand Down
Loading